+ XSetWMProperties(xw.dpy, xw.win, NULL, NULL, NULL, 0, &size, &wm, &class);
+}
+
+XFontSet
+xinitfont(char *fontstr) {
+ XFontSet set;
+ char *def, **missing;
+ int n;
+
+ missing = NULL;
+ set = XCreateFontSet(xw.dpy, fontstr, &missing, &n, &def);
+ if(missing) {
+ while(n--)
+ fprintf(stderr, "st: missing fontset: %s\n", missing[n]);
+ XFreeStringList(missing);
+ }
+ return set;
+}
+
+void
+xgetfontinfo(XFontSet set, int *ascent, int *descent, short *lbearing, short *rbearing) {
+ XFontStruct **xfonts;
+ char **font_names;
+ int i, n;
+
+ *ascent = *descent = *lbearing = *rbearing = 0;
+ n = XFontsOfFontSet(set, &xfonts, &font_names);
+ for(i = 0; i < n; i++) {
+ *ascent = MAX(*ascent, (*xfonts)->ascent);
+ *descent = MAX(*descent, (*xfonts)->descent);
+ *lbearing = MAX(*lbearing, (*xfonts)->min_bounds.lbearing);
+ *rbearing = MAX(*rbearing, (*xfonts)->max_bounds.rbearing);
+ xfonts++;
+ }
+}
+
+void
+initfonts(char *fontstr, char *bfontstr) {
+ if((dc.font.set = xinitfont(fontstr)) == NULL ||
+ (dc.bfont.set = xinitfont(bfontstr)) == NULL)
+ die("Can't load font %s\n", dc.font.set ? BOLDFONT : FONT);
+ xgetfontinfo(dc.font.set, &dc.font.ascent, &dc.font.descent,
+ &dc.font.lbearing, &dc.font.rbearing);
+ xgetfontinfo(dc.bfont.set, &dc.bfont.ascent, &dc.bfont.descent,
+ &dc.bfont.lbearing, &dc.bfont.rbearing);