Mercurial > cpython-lru_cache-weakref
annotate RISCOS/Modules/drawfmodule.c @ 49955:878d40468c4e legacy-trunk
Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
| author | Vinay Sajip <vinay_sajip@yahoo.co.uk> |
|---|---|
| date | Wed, 03 Dec 2008 23:22:58 +0000 |
| parents | 52294af4b663 |
| children |
| rev | line source |
|---|---|
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /* drawf DrawFile functions */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
20652
2d3cee9f1633
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
16941
diff
changeset
|
3 #include "oslib/os.h" |
|
2d3cee9f1633
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
16941
diff
changeset
|
4 #include "oslib/osfile.h" |
|
2d3cee9f1633
SF patch #474590 -- RISC OS support
Guido van Rossum <guido@python.org>
parents:
16941
diff
changeset
|
5 #include "oslib/drawfile.h" |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 #include "Python.h" |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 #include <limits.h> |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 #define PyDrawF_Check(op) ((op)->ob_type == &PyDrawFType) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 #define HDRSIZE 40 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 #define GRPHDRSIZE 36 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 #define DRAWTYPE 0xaff |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 #define NEXT(d) ((drawfile_object*)((char*)(d)+(d)->size)) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 typedef struct |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 { PyObject_HEAD |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 drawfile_diagram *drawf; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 int size; /*length in bytes*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 int nobjs; /* no of objects */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 } PyDrawFObject; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 typedef struct dheader |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 { char tag [4]; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 int major_version; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 int minor_version; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 char source [12]; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 os_box bbox; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 } dheader; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 static PyObject *DrawFError; /* Exception drawf.error */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 static os_error *e; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 static PyTypeObject PyDrawFType; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 static dheader header= |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 { {'D','r','a','w'}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 201,0, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 {'P','y','t','h','o','n',' ',' ',' ',' ',' ',' '}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 {INT_MAX,INT_MAX,INT_MIN,INT_MIN} |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 }; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 static PyObject *drawf_oserror(void) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 { PyErr_SetString(DrawFError,e->errmess); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 return 0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 static PyObject *drawf_error(char *s) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 { PyErr_SetString(DrawFError,s); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 return 0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 /* DrawFile commands */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 static void countobjs(PyDrawFObject *pd) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 { int k=0,q; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 drawfile_diagram *dd=pd->drawf; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 drawfile_object *d=dd->objects; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 char *end=(char*)dd+pd->size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 pd->nobjs=-1; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 while((char*)d<end) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 { k++; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 q=d->size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 if(q<=0||q&3) return ; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 d=NEXT(d); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 if ((char*)d==end) pd->nobjs=k; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
69 static drawfile_object *findobj(PyDrawFObject *pd,Py_ssize_t n) |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 { drawfile_diagram *dd=pd->drawf; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 drawfile_object *d=dd->objects; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 for(;n>0;n--) d=NEXT(d); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 return d; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 static PyDrawFObject* new(int size) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 { PyDrawFObject *b=PyObject_NEW(PyDrawFObject,&PyDrawFType); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 if(!b) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 size+=HDRSIZE; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 b->drawf=malloc(size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 if(!b->drawf) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 { Py_DECREF(b); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 return (PyDrawFObject*)PyErr_NoMemory(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 b->size=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 return b; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 static void extend(os_box *b,os_box *c) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 { if(b->x0>c->x0) b->x0=c->x0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 if(b->y0>c->y0) b->y0=c->y0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 if(b->x1<c->x1) b->x1=c->x1; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 if(b->y1<c->y1) b->y1=c->y1; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 static PyObject *DrawF_New(PyObject *self,PyObject *args) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 { PyDrawFObject *b; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 if(!PyArg_ParseTuple(args,"")) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 b=new(0); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 if(!b) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 *((dheader*)b->drawf)=header; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 b->nobjs=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 return (PyObject *)b; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
106 static PyObject *DrawF_Load(PyObject *self,PyObject *args) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 { int size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 char *fname; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
109 PyDrawFObject *b; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 fileswitch_object_type ot; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
111 if(!PyArg_ParseTuple(args,"s",&fname)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 e=xosfile_read_no_path(fname,&ot,0,0,&size,0); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 if(e) return drawf_oserror(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 size-=HDRSIZE; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 if(ot!=osfile_IS_FILE||size<0||size&3) return drawf_error("Bad draw file"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 b=new(size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
117 if(!b) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 e=xosfile_load_stamped_no_path(fname,(byte*)(b->drawf),0,0,0,0,0); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
119 if(e) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
120 { Py_DECREF(b); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
121 return drawf_oserror(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
122 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 countobjs(b); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 if(b->nobjs>=0) return (PyObject *)b; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 Py_DECREF(b); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
126 return drawf_error("Corrupt draw file"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
127 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
128 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
129 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
130 static PyObject *DrawF_Save(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
131 { char *fname; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
132 if(!PyArg_ParseTuple(arg,"s",&fname)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
133 e=xosfile_save_stamped(fname,DRAWTYPE, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
134 (byte*)(self->drawf),(byte*)(self->drawf)+self->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
135 if (e) return drawf_oserror(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
136 Py_INCREF(Py_None);return Py_None; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
137 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
138 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
139 static PyObject *DrawF_Render(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
140 { int flags,trans,clip,flat; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
141 if(!PyArg_ParseTuple(arg,"iiii",&flags,&trans,&clip,&flat)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
142 e=xdrawfile_render((drawfile_render_flags)flags,self->drawf,self->size, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
143 (os_trfm*)trans,(os_box*)clip,flat); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 if(e) return drawf_oserror(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 Py_INCREF(Py_None);return Py_None; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 static PyObject *DrawF_Path(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
149 { PyObject *pl; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 PyObject *dp=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
151 os_colour fill; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
152 os_colour outline; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 int width,start=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
154 drawfile_path_style style; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
155 int size=40; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
156 int n,i,element_count; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
157 drawfile_diagram *diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
158 drawfile_object *dobj; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
159 drawfile_path *dpath; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
160 draw_path *thepath; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
161 draw_line_style line_style; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
162 draw_dash_pattern *dash_pattern=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
163 os_box *box; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
164 long *pe; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
165 if(!PyArg_ParseTuple(arg,"O!(iiii)|O!i",&PyList_Type,&pl,(int*)&fill, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 (int*)&outline,&width,(int*)&style,&PyTuple_Type,&dp,&start)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
167 if(dp) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
168 { element_count=PyTuple_Size(dp); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 size+=4*element_count+8; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
170 style.flags|=drawfile_PATH_DASHED; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
171 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
172 else style.flags&=~drawfile_PATH_DASHED; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
173 n=PyList_Size(pl); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
174 size+=4*n+8; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 for(i=0;i<n;i++) if(!PyInt_Check(PyList_GetItem(pl,i))) size+=4; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
176 diag=realloc(self->drawf,self->size+size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
177 if(!diag) return PyErr_NoMemory(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
178 self->drawf=diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 dobj=(drawfile_object*)((char*)diag+self->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
180 dobj->type=drawfile_TYPE_PATH; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 dobj->size=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
182 dpath=&dobj->data.path; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
183 self->size+=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
184 self->nobjs++; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
185 box=&dpath->bbox; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
186 dpath->fill=fill;dpath->outline=outline; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
187 dpath->width=width;dpath->style=style; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
188 pe=(long*)&(dpath->path); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 if(dp) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 { dash_pattern=&(((drawfile_path_with_pattern*)dpath)->pattern); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 dash_pattern->start=start; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
192 dash_pattern->element_count=element_count; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
193 for(i=0;i<element_count;i++) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
194 { dash_pattern->elements[i]=(int)PyInt_AsLong(PyTuple_GetItem(dp,i)); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
195 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 pe+=element_count+2; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
198 thepath=(draw_path*)pe; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
199 *pe++=draw_MOVE_TO; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
200 for(i=0;i<n;i++) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
201 { PyObject *p=PyList_GetItem(pl,i); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
202 if(PyInt_Check(p)) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
203 *pe++=PyInt_AsLong(p); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
204 else |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
205 { |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
206 *pe++=PyInt_AsLong(PyTuple_GetItem(p,0)); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
207 *pe++=PyInt_AsLong(PyTuple_GetItem(p,1)); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
208 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
209 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
210 *pe=draw_END_PATH; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
211 line_style.join_style=style.flags&3; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 line_style.end_cap_style=(style.flags&3)>>2; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
213 line_style.start_cap_style=(style.flags&3)>>4; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
214 line_style.reserved=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
215 line_style.mitre_limit=10; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
216 line_style.start_cap_width=style.cap_width; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
217 line_style.end_cap_width=style.cap_width; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
218 line_style.start_cap_length=style.cap_length; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
219 line_style.end_cap_length=style.cap_length; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
220 e=xdraw_process_path(thepath,0x70000000,0,0,width,&line_style,dash_pattern, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
221 (draw_output_path)((char*)box+0x80000000),0); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 if(e) return drawf_oserror(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
223 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
224 /* draw_process_path seems to have a bug: |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
225 If the bounding box size is zero, it returns 0x7FFFFFFF, ..., 0x80000000 instead of the |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
226 correct size. */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
227 if (box->x0==0x7FFFFFFF) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
228 { |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
229 /* path has zero extension, so forget it; it would be invisible anyway */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
230 self->size-=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
231 self->nobjs--; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
232 diag=realloc(self->drawf,self->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
233 if(!diag) return PyErr_NoMemory(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
234 self->drawf=diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
235 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
236 else |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
237 extend(&(diag->bbox),box); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
238 Py_INCREF(Py_None);return Py_None; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
239 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
240 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
241 static PyObject *DrawF_Text(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
242 { os_colour fill,bg_hint; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
243 drawfile_text_style style; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
244 int xsize,ysize,x,y; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 int size,len; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 char *text; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
247 drawfile_diagram *diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
248 drawfile_object *dobj; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
249 drawfile_text *dtext; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
250 os_box *box; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
251 if(!PyArg_ParseTuple(arg,"(ii)s(iiiii)",&x,&y,&text, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
252 (int*)&fill,(int*)&bg_hint,(int*)&style,&xsize,&ysize)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
253 len=strlen(text); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
254 size=((len+4)&(~3))+52; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
255 diag=realloc(self->drawf,self->size+size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
256 if(!diag) return PyErr_NoMemory(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
257 self->drawf=diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
258 dobj=(drawfile_object*)((char*)diag+self->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 dobj->type=drawfile_TYPE_TEXT; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
260 dobj->size=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
261 dtext=&dobj->data.text; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
262 self->size+=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
263 self->nobjs++; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
264 dtext->fill=fill; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
265 dtext->bg_hint=bg_hint; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
266 dtext->style=style; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
267 dtext->xsize=xsize; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
268 dtext->ysize=ysize; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
269 dtext->base.x=x; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
270 dtext->base.y=y; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
271 memset(dtext->text,0,(len+4)&(~3)); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
272 sprintf(dtext->text,"%s",text); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
273 box=&(dtext->bbox); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
274 box->x0=x;box->y0=y;box->x1=x+len*xsize;box->y1=y+ysize; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
275 extend(&(diag->bbox),box); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
276 Py_INCREF(Py_None);return Py_None; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
277 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
278 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
279 static PyObject *DrawF_TText(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
280 { os_colour fill,bg_hint; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
281 drawfile_text_style style; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 int xsize,ysize,x,y; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
283 int t1,t2,t3,t4,t5,t6; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 int size,len; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 char *text; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
286 drawfile_diagram *diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
287 drawfile_object *dobj; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
288 drawfile_trfm_text *dtext; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 os_box *box; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
290 t1=1<<16;t2=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
291 t3=0;t4=1<<16; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
292 t5=t6=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
293 if(!PyArg_ParseTuple(arg,"(ii)s(iiiii)|(iiiiii)",&x,&y,&text, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
294 (int*)&fill,(int*)&bg_hint,(int*)&style,&xsize,&ysize,&t1,&t2,&t3,&t4,&t5,&t6)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
295 len=strlen(text); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 size=((len+4)&(~3))+52+28; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
297 diag=realloc(self->drawf,self->size+size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 if(!diag) return PyErr_NoMemory(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 self->drawf=diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
300 dobj=(drawfile_object*)((char*)diag+self->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
301 dobj->type=drawfile_TYPE_TRFM_TEXT; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
302 dobj->size=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
303 dtext=&dobj->data.trfm_text; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
304 self->size+=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
305 self->nobjs++; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
306 dtext->trfm.entries[0][0]=t1; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
307 dtext->trfm.entries[0][1]=t2; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
308 dtext->trfm.entries[1][0]=t3; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
309 dtext->trfm.entries[1][1]=t4; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
310 dtext->trfm.entries[2][0]=t5; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
311 dtext->trfm.entries[2][1]=t6; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
312 dtext->flags=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
313 dtext->fill=fill; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
314 dtext->bg_hint=bg_hint; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
315 dtext->style=style; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
316 dtext->xsize=xsize; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 dtext->ysize=ysize; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
318 dtext->base.x=x; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
319 dtext->base.y=y; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
320 memset(dtext->text,0,(len+4)&(~3)); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
321 sprintf(dtext->text,"%s",text); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
322 box=&(dtext->bbox); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
323 box->x0=x;box->y0=y;box->x1=x+len*xsize;box->y1=y+ysize; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
324 extend(&(diag->bbox),box); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
325 Py_INCREF(Py_None);return Py_None; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
326 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
327 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
328 static PyObject *DrawF_FontTable(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
329 { int size=8,n=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
330 PyObject *d,*key,*value; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
331 drawfile_diagram *diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
332 drawfile_object *dobj; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
333 char *dtable; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
334 if(!PyArg_ParseTuple(arg,"O!",&PyDict_Type,&d)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
335 while(PyDict_Next(d,&n,&key,&value)) |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
336 { int m=PyString_Size(value); |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
337 if(m<0||!PyInt_Check(key)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
338 size+=m+2; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
339 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
340 size=(size+3)&(~3); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
341 diag=realloc(self->drawf,self->size+size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
342 if(!diag) return PyErr_NoMemory(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
343 self->drawf=diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
344 dobj=(drawfile_object*)((char*)diag+self->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
345 dobj->type=drawfile_TYPE_FONT_TABLE; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
346 dobj->size=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
347 dtable=(char*)(&dobj->data.font_table); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
348 self->size+=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
349 self->nobjs++; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
350 memset(dtable,0,size-8); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
351 n=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
352 while(PyDict_Next(d,&n,&key,&value)) |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
353 { int m=PyString_Size(value); |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
354 *dtable=(char)PyInt_AsLong(key); |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
355 strcpy(dtable+1,PyString_AsString(value)); |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
356 dtable+=m+2; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
357 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
358 Py_INCREF(Py_None);return Py_None; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
359 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
360 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
361 static PyObject *DrawF_Group(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
362 { int size,n; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
363 PyDrawFObject *g; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
364 char *name=""; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
365 drawfile_diagram *diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
366 drawfile_object *dobj; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 drawfile_group *dgroup; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
368 if(!PyArg_ParseTuple(arg,"O!|s",&PyDrawFType,(PyObject*)&g,&name)) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
369 return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
370 size=g->size-4; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
371 diag=realloc(self->drawf,self->size+size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
372 if(!diag) return PyErr_NoMemory(); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
373 self->drawf=diag; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
374 self->nobjs++; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
375 dobj=(drawfile_object*)((char*)diag+self->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
376 self->size+=size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
377 dobj->type=drawfile_TYPE_GROUP; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
378 dobj->size=g->size-4; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
379 dgroup=&dobj->data.group; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
380 dgroup->bbox=g->drawf->bbox; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
381 memset(dgroup->name,' ',12); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
382 n=strlen(name); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
383 if(n>12) n=12; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
384 memcpy(dgroup->name,name,n); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
385 memcpy((char*)dgroup->objects,(char*)g->drawf+40,g->size-40); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
386 extend(&(diag->bbox),&(dgroup->bbox)); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
387 Py_INCREF(Py_None);return Py_None; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
388 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
389 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
390 static PyObject *DrawF_Find(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
391 { int x,y,n=0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
392 int r=-1; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
393 drawfile_object *d; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
394 if(!PyArg_ParseTuple(arg,"ii|i",&x,&y,&n)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
395 if(n<self->nobjs&&n>=0) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
396 { d=findobj(self,n); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
397 while(n<self->nobjs) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
398 { if(x>=d->data.text.bbox.x0&&x<=d->data.text.bbox.x1&& |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
399 y>=d->data.text.bbox.y0&&y<=d->data.text.bbox.y1) { r=n;break;} |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
400 n++; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
401 d=NEXT(d); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
402 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
403 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
404 return PyInt_FromLong(r); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
405 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
406 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
407 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
408 static PyObject *DrawF_Box(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
409 { int n=-1; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
410 os_box *box; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
411 if(!PyArg_ParseTuple(arg,"|i",&n)) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
412 if(n>=self->nobjs|n<0) box=&(self->drawf->bbox); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
413 else box=&(findobj(self,n)->data.text.bbox); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
414 return Py_BuildValue("iiii",box->x0,box->y0,box->x1,box->y1); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
415 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
416 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
417 static void SetBlock(drawfile_object *d,int size,int type,int offset,int value) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
418 { char *end=(char*)d+size; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
419 printf("s%d t%d o%d v%d\n",size,type,offset,value); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
420 for(;(char*)d<end;d=NEXT(d)) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
421 if(d->type==type) ((int*)(d))[offset]=value; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
422 else if(d->type==drawfile_TYPE_GROUP) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
423 SetBlock((drawfile_object*)&d->data.group.objects, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
424 d->size,type,offset,value); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
425 printf("SetBlock Done\n"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
426 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
427 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
428 static PyObject *SetWord(PyDrawFObject *self,PyObject *arg,int type,int offset) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
429 { int n=PyTuple_Size(arg); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
430 int m,value,q; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
431 PyObject *par; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
432 drawfile_object *e,*d=self->drawf->objects; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
433 if(n==0) return drawf_error("Value Required"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
434 par=PyTuple_GetItem(arg,0); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
435 if(!PyInt_Check(par)) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
436 { PyErr_SetString(PyExc_TypeError,"Int Required"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
437 return 0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
438 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
439 value=(int)PyInt_AsLong(par); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
440 if(n==1) SetBlock(d,self->size-HDRSIZE,type,offset,value); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
441 else |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
442 { for(m=1;m<n;m++) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
443 { par=PyTuple_GetItem(arg,m); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
444 if(!PyInt_Check(par)) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
445 { PyErr_SetString(PyExc_TypeError,"Int Required"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
446 return 0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
447 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
448 q=(int)PyInt_AsLong(par); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
449 if(q<0||q>=self->nobjs) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
450 { PyErr_SetString(PyExc_ValueError,"Object out of range"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
451 return 0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
452 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
453 e=d; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
454 for(;q>0;q--) e=NEXT(e); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
455 if(e->type==type) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
456 { ((int*)(e))[offset]=value; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
457 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
458 else if(e->type==drawfile_TYPE_GROUP) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
459 SetBlock((drawfile_object*)&e->data.group.objects, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
460 e->size-GRPHDRSIZE,type,offset,value); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
461 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
462 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
463 Py_INCREF(Py_None);return Py_None; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
464 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
465 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
466 static PyObject *DrawF_PathFill(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
467 { return SetWord(self,arg,drawfile_TYPE_PATH,6); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
468 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
469 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
470 static PyObject *DrawF_PathColour(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
471 { return SetWord(self,arg,drawfile_TYPE_PATH,7); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
472 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
473 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
474 static PyObject *DrawF_TextColour(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
475 { return SetWord(self,arg,drawfile_TYPE_TEXT,6); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
476 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
477 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
478 static PyObject *DrawF_TextBackground(PyDrawFObject *self,PyObject *arg) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
479 { return SetWord(self,arg,drawfile_TYPE_TEXT,7); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
480 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
481 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
482 static struct PyMethodDef PyDrawF_Methods[]= |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
483 { |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
484 { "render",(PyCFunction)DrawF_Render,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
485 { "save",(PyCFunction)DrawF_Save,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
486 { "path",(PyCFunction)DrawF_Path,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
487 { "text",(PyCFunction)DrawF_Text,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
488 { "ttext",(PyCFunction)DrawF_TText,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
489 { "fonttable",(PyCFunction)DrawF_FontTable,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
490 { "group",(PyCFunction)DrawF_Group,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
491 { "find",(PyCFunction)DrawF_Find,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
492 { "box",(PyCFunction)DrawF_Box,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
493 { "pathfill",(PyCFunction)DrawF_PathFill,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
494 { "pathcolour",(PyCFunction)DrawF_PathColour,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
495 { "textcolour",(PyCFunction)DrawF_TextColour,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
496 { "textbackground",(PyCFunction)DrawF_TextBackground,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
497 { NULL,NULL} /* sentinel */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
498 }; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
499 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
500 static int drawf_len(PyDrawFObject *b) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
501 { return b->nobjs; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
502 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
503 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
504 static PyObject *drawf_concat(PyDrawFObject *b,PyDrawFObject *c) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
505 { int size=b->size+c->size-2*HDRSIZE; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
506 PyDrawFObject *p=new(size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
507 drawfile_diagram *dd; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
508 drawfile_object *d; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
509 int n; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
510 if(!p) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
511 dd=p->drawf; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
512 d=(drawfile_object*)((char*)dd+b->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
513 memcpy((char*)dd,(char*)(b->drawf),b->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
514 memcpy(d,(char*)(c->drawf)+HDRSIZE,c->size-HDRSIZE); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
515 p->nobjs=b->nobjs+c->nobjs; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
516 for(n=c->nobjs;n>0;n--) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
517 { extend(&(dd->bbox),&(d->data.path.bbox)); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
518 d=NEXT(d); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
519 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
520 return (PyObject*)p; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
521 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
522 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
523 static PyObject *drawf_repeat(PyDrawFObject *b,Py_ssize_t i) |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
524 { PyErr_SetString(PyExc_IndexError,"drawf repetition not implemented"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
525 return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
526 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
527 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
528 static PyObject *drawf_item(PyDrawFObject *b,Py_ssize_t i) |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
529 { PyDrawFObject *c; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
530 Py_ssize_t size; |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
531 drawfile_diagram *dd; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
532 drawfile_object *d; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
533 if(i<0||i>=b->nobjs) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
534 { PyErr_SetString(PyExc_IndexError,"drawf index out of range"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
535 return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
536 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
537 d=findobj(b,i); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
538 size=(char*)findobj(b,i+1)-(char*)d; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
539 c=new(size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
540 if(!c) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
541 dd=c->drawf; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
542 *((dheader*)dd)=header; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
543 memcpy(dd->objects,d,size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
544 c->nobjs=1; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
545 extend(&(dd->bbox),&(d->data.path.bbox)); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
546 return (PyObject*)c; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
547 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
548 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
549 static PyObject *drawf_slice(PyDrawFObject *b,Py_ssize_t i,Py_ssize_t j) |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
550 { PyDrawFObject *c; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
551 Py_ssize_t size,n; |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
552 drawfile_diagram *dd; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
553 drawfile_object *d; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
554 if(i<0||j>b->nobjs) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
555 { PyErr_SetString(PyExc_IndexError,"drawf index out of range"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
556 return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
557 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
558 d=findobj(b,i); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
559 size=(char*)findobj(b,j)-(char*)d; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
560 c=new(size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
561 if(!c) return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
562 dd=c->drawf; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
563 *((dheader*)dd)=header; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
564 memcpy(dd->objects,d,size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
565 c->nobjs=j-i; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
566 for(n=j-i;n>0;n--) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
567 { extend(&(dd->bbox),&(d->data.path.bbox)); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
568 d=NEXT(d); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
569 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
570 return (PyObject*)c; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
571 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
572 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
573 static int drawf_ass_item(PyDrawFObject *b,Py_ssize_t i,PyObject *v) |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
574 { PyErr_SetString(PyExc_IndexError,"drawf ass not implemented"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
575 return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
576 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
577 /*{ if(i<0||4*i>=b->length) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
578 { PyErr_SetString(PyExc_IndexError,"drawf index out of range"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
579 return -1; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
580 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
581 if(!PyInt_Check(v)) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
582 { PyErr_SetString(PyExc_TypeError,"drawf item must be integer"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
583 return -1; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
584 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
585 ((long*)(b->drawf))[i]=PyInt_AsLong(v); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
586 return 0; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
587 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
588 */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
589 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
590 static int drawf_ass_slice(PyDrawFObject *b,Py_ssize_t i,Py_ssize_t j,PyObject *v) |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
591 { PyErr_SetString(PyExc_IndexError,"drawf ass_slice not implemented"); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
592 return NULL; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
593 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
594 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
595 static PySequenceMethods drawf_as_sequence= |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
596 { (inquiry)drawf_len, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
597 (binaryfunc)drawf_concat, |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
598 (ssizeargfunc)drawf_repeat, |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
599 (ssizeargfunc)drawf_item, |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
600 (ssizessizeargfunc)drawf_slice, |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
601 (ssizeobjargproc)drawf_ass_item, |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
20652
diff
changeset
|
602 (ssizessizeobjargproc)drawf_ass_slice, |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
603 }; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
604 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
605 static PyObject *PyDrawF_GetAttr(PyDrawFObject *s,char *name) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
606 { |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
607 if (!strcmp(name, "size")) return PyInt_FromLong((long)s->size); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
608 if (!strcmp(name, "start")) return PyInt_FromLong((long)s->drawf); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
609 if (!strcmp(name, "__members__")) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
610 { PyObject *list = PyList_New(2); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
611 if (list) |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
612 { PyList_SetItem(list, 0, PyString_FromString("size")); |
|
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
613 PyList_SetItem(list, 1, PyString_FromString("start")); |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
614 if (PyErr_Occurred()) { Py_DECREF(list);list = NULL;} |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
615 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
616 return list; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
617 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
618 return Py_FindMethod(PyDrawF_Methods, (PyObject*) s,name); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
619 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
620 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
621 static void PyDrawF_Dealloc(PyDrawFObject *b) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
622 { |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
623 if (b->drawf) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
624 ; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
625 else |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
626 PyMem_DEL(b->drawf); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
627 PyMem_DEL(b); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
628 } |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
629 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
630 static PyTypeObject PyDrawFType= |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
631 { PyObject_HEAD_INIT(&PyType_Type) |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
632 0, /*ob_size*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
633 "drawf", /*tp_name*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
634 sizeof(PyDrawFObject), /*tp_size*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
635 0, /*tp_itemsize*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
636 /* methods */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
637 (destructor)PyDrawF_Dealloc, /*tp_dealloc*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
638 0, /*tp_print*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
639 (getattrfunc)PyDrawF_GetAttr, /*tp_getattr*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
640 0, /*tp_setattr*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
641 0, /*tp_compare*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
642 0, /*tp_repr*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
643 0, /*tp_as_number*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
644 &drawf_as_sequence, /*tp_as_sequence*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
645 0, /*tp_as_mapping*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
646 0, /*tp_hash*/ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
647 }; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
648 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
649 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
650 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
651 static PyMethodDef DrawFMethods[]= |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
652 { |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
653 { "load",DrawF_Load,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
654 { "new",DrawF_New,1}, |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
655 { NULL,NULL} /* Sentinel */ |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
656 }; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
657 |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
658 void initdrawf() |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
659 { PyObject *m, *d; |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
660 m = Py_InitModule("drawf", DrawFMethods); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
661 d = PyModule_GetDict(m); |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
662 DrawFError=PyString_FromString("drawf.error"); |
|
16941
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
663 PyDict_SetItemString(d,"error",DrawFError); |
|
a015aed3a1ac
RISCOS files by dschwertberger
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
664 } |
