annotate Modules/fmmodule.c @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 65d2d8e67da3
children d36250aefb82
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /***********************************************************
2061
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
3 The Netherlands.
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
8 documentation for any purpose and without fee is hereby granted,
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
10 both that copyright notice and this permission notice appear in
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
15 permission.
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ******************************************************************/
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 /* Font Manager module */
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #include "allobjects.h"
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 #include "modsupport.h"
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 #include <gl.h>
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 #include <device.h>
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 #include <fmclient.h>
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 /* Font Handle object implementation */
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 typedef struct {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 OB_HEAD
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 fmfonthandle fh_fh;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 } fhobject;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
50 staticforward typeobject Fhtype;
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 #define is_fhobject(v) ((v)->ob_type == &Fhtype)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 newfhobject(fh)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 fmfonthandle fh;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 fhobject *fhp;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 if (fh == NULL) {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 err_setstr(RuntimeError, "error creating new font handle");
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 fhp = NEWOBJ(fhobject, &Fhtype);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 if (fhp == NULL)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 fhp->fh_fh = fh;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 return (object *)fhp;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 /* Font Handle methods */
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 fh_scalefont(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 fhobject *self;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 object *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 double size;
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1252
diff changeset
78 if (!getargs(args, "d", &size))
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 return newfhobject(fmscalefont(self->fh_fh, size));
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 /* XXX fmmakefont */
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
84
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 fh_setfont(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 fhobject *self;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 object *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 if (!getnoarg(args))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 fmsetfont(self->fh_fh);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 INCREF(None);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 return None;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 fh_getfontname(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 fhobject *self;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 object *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 char fontname[256];
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 int len;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 if (!getnoarg(args))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 len = fmgetfontname(self->fh_fh, sizeof fontname, fontname);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 if (len < 0) {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 err_setstr(RuntimeError, "error in fmgetfontname");
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 return newsizedstringobject(fontname, len);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 fh_getcomment(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 fhobject *self;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 object *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 char comment[256];
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 int len;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 if (!getnoarg(args))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 len = fmgetcomment(self->fh_fh, sizeof comment, comment);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 if (len < 0) {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 err_setstr(RuntimeError, "error in fmgetcomment");
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 return newsizedstringobject(comment, len);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
130
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 fh_getfontinfo(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 fhobject *self;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 object *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 fmfontinfo info;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 object *v;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 if (!getnoarg(args))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 if (fmgetfontinfo(self->fh_fh, &info) < 0) {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 err_setstr(RuntimeError, "error in fmgetfontinfo");
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 }
1252
c4cd0d9d8281 * Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
144 return mkvalue("(llllllll)",
c4cd0d9d8281 * Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
145 info.printermatched,
c4cd0d9d8281 * Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
146 info.fixed_width,
c4cd0d9d8281 * Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
147 info.xorig,
c4cd0d9d8281 * Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
148 info.yorig,
c4cd0d9d8281 * Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
149 info.xsize,
c4cd0d9d8281 * Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
150 info.ysize,
c4cd0d9d8281 * Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
151 info.height,
c4cd0d9d8281 * Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
152 info.nglyphs);
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
154
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 #if 0
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 fh_getwholemetrics(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 fhobject *self;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 object *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 #endif
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
163
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 fh_getstrwidth(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 fhobject *self;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 object *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 {
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 164
diff changeset
169 char *str;
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 if (!getstrarg(args, &str))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 return NULL;
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 164
diff changeset
172 return newintobject(fmgetstrwidth(self->fh_fh, str));
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
174
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 static struct methodlist fh_methods[] = {
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
176 {"scalefont", (method)fh_scalefont},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
177 {"setfont", (method)fh_setfont},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
178 {"getfontname", (method)fh_getfontname},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
179 {"getcomment", (method)fh_getcomment},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
180 {"getfontinfo", (method)fh_getfontinfo},
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 #if 0
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
182 {"getwholemetrics", (method)fh_getwholemetrics},
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 #endif
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
184 {"getstrwidth", (method)fh_getstrwidth},
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 {NULL, NULL} /* sentinel */
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 };
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
187
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 fh_getattr(fhp, name)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 fhobject *fhp;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 char *name;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 return findmethod(fh_methods, (object *)fhp, name);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
195
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 static void
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 fh_dealloc(fhp)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 fhobject *fhp;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 fmfreefont(fhp->fh_fh);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 DEL(fhp);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
203
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 static typeobject Fhtype = {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 OB_HEAD_INIT(&Typetype)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
206 0, /*ob_size*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
207 "font handle", /*tp_name*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
208 sizeof(fhobject), /*tp_size*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
209 0, /*tp_itemsize*/
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 /* methods */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
211 (destructor)fh_dealloc, /*tp_dealloc*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
212 0, /*tp_print*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
213 (getattrfunc)fh_getattr, /*tp_getattr*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
214 0, /*tp_setattr*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
215 0, /*tp_compare*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1313
diff changeset
216 0, /*tp_repr*/
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 };
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
218
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
219
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 /* Font Manager functions */
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
221
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 fm_init(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 object *self, *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 if (!getnoarg(args))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 fminit();
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 INCREF(None);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 return None;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
232
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 fm_findfont(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 object *self, *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 {
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 164
diff changeset
237 char *str;
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 if (!getstrarg(args, &str))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
239 return NULL;
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 164
diff changeset
240 return newfhobject(fmfindfont(str));
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
242
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 fm_prstr(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 object *self, *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 {
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 164
diff changeset
247 char *str;
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
248 if (!getstrarg(args, &str))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 return NULL;
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 164
diff changeset
250 fmprstr(str);
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 INCREF(None);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
252 return None;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
254
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 /* XXX This uses a global variable as temporary! Not re-entrant! */
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
256
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 static object *fontlist;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
258
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 static void
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 clientproc(fontname)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 char *fontname;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 int err;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 object *v;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 if (fontlist == NULL)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 return;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 v = newstringobject(fontname);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 if (v == NULL)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 err = -1;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 else {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
271 err = addlistitem(fontlist, v);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 DECREF(v);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
273 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 if (err != 0) {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 DECREF(fontlist);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 fontlist = NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
277 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
279
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 fm_enumerate(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 object *self, *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 object *res;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 if (!getnoarg(args))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
286 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 fontlist = newlistobject(0);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 if (fontlist == NULL)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
289 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
290 fmenumerate(clientproc);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
291 res = fontlist;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 fontlist = NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 return res;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
295
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
297 fm_setpath(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 object *self, *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 {
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 164
diff changeset
300 char *str;
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 if (!getstrarg(args, &str))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 return NULL;
643
02d3f161b7f5 Use getargs() function.
Guido van Rossum <guido@python.org>
parents: 164
diff changeset
303 fmsetpath(str);
164
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
304 INCREF(None);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 return None;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
307
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 static object *
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
309 fm_fontpath(self, args)
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 object *self, *args;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 if (!getnoarg(args))
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 return NULL;
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 return newstringobject(fmfontpath());
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 }
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
316
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 static struct methodlist fm_methods[] = {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 {"init", fm_init},
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 {"findfont", fm_findfont},
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 {"enumerate", fm_enumerate},
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
321 {"prstr", fm_prstr},
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
322 {"setpath", fm_setpath},
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
323 {"fontpath", fm_fontpath},
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
324 {NULL, NULL} /* sentinel */
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
325 };
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
326
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
327
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
328 void
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
329 initfm()
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
330 {
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
331 initmodule("fm", fm_methods);
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
332 fminit();
7ce91cfb7ac4 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
333 }