comparison src/xfaces.c @ 46370:40db0673e6f0

Most uses of XSTRING combined with STRING_BYTES or indirection changed to SCHARS, SBYTES, STRING_INTERVALS, SREF, SDATA; explicit size_byte references left unchanged for now.
author Ken Raeburn <raeburn@raeburn.org>
date Mon, 15 Jul 2002 00:00:41 +0000
parents 1fb8f75062c6
children d6b51ec01987
comparison
equal deleted inserted replaced
46369:dd1d3b1d0053 46370:40db0673e6f0
288 #define STRDUPA(S) strcpy ((char *) alloca (strlen ((S)) + 1), (S)) 288 #define STRDUPA(S) strcpy ((char *) alloca (strlen ((S)) + 1), (S))
289 289
290 /* Make a copy of the contents of Lisp string S on the stack using 290 /* Make a copy of the contents of Lisp string S on the stack using
291 alloca. Value is a pointer to the copy. */ 291 alloca. Value is a pointer to the copy. */
292 292
293 #define LSTRDUPA(S) STRDUPA (XSTRING ((S))->data) 293 #define LSTRDUPA(S) STRDUPA (SDATA ((S)))
294 294
295 /* Size of hash table of realized faces in face caches (should be a 295 /* Size of hash table of realized faces in face caches (should be a
296 prime number). */ 296 prime number). */
297 297
298 #define FACE_CACHE_BUCKETS_SIZE 1001 298 #define FACE_CACHE_BUCKETS_SIZE 1001
1144 1144
1145 if (NATNUMP (width) && NATNUMP (height) && STRINGP (data)) 1145 if (NATNUMP (width) && NATNUMP (height) && STRINGP (data))
1146 { 1146 {
1147 int bytes_per_row = ((XFASTINT (width) + BITS_PER_CHAR - 1) 1147 int bytes_per_row = ((XFASTINT (width) + BITS_PER_CHAR - 1)
1148 / BITS_PER_CHAR); 1148 / BITS_PER_CHAR);
1149 if (STRING_BYTES (XSTRING (data)) >= bytes_per_row * XINT (height)) 1149 if (SBYTES (data) >= bytes_per_row * XINT (height))
1150 pixmap_p = 1; 1150 pixmap_p = 1;
1151 } 1151 }
1152 } 1152 }
1153 1153
1154 return pixmap_p ? Qt : Qnil; 1154 return pixmap_p ? Qt : Qnil;
1188 1188
1189 w = XINT (Fcar (name)); 1189 w = XINT (Fcar (name));
1190 h = XINT (Fcar (Fcdr (name))); 1190 h = XINT (Fcar (Fcdr (name)));
1191 bits = Fcar (Fcdr (Fcdr (name))); 1191 bits = Fcar (Fcdr (Fcdr (name)));
1192 1192
1193 bitmap_id = x_create_bitmap_from_data (f, XSTRING (bits)->data, 1193 bitmap_id = x_create_bitmap_from_data (f, SDATA (bits),
1194 w, h); 1194 w, h);
1195 } 1195 }
1196 else 1196 else
1197 { 1197 {
1198 /* It must be a string -- a file name. */ 1198 /* It must be a string -- a file name. */
1567 struct frame *f; 1567 struct frame *f;
1568 1568
1569 CHECK_FRAME (frame); 1569 CHECK_FRAME (frame);
1570 CHECK_STRING (color); 1570 CHECK_STRING (color);
1571 f = XFRAME (frame); 1571 f = XFRAME (frame);
1572 return face_color_gray_p (f, XSTRING (color)->data) ? Qt : Qnil; 1572 return face_color_gray_p (f, SDATA (color)) ? Qt : Qnil;
1573 } 1573 }
1574 1574
1575 1575
1576 DEFUN ("color-supported-p", Fcolor_supported_p, 1576 DEFUN ("color-supported-p", Fcolor_supported_p,
1577 Scolor_supported_p, 2, 3, 0, 1577 Scolor_supported_p, 2, 3, 0,
1585 struct frame *f; 1585 struct frame *f;
1586 1586
1587 CHECK_FRAME (frame); 1587 CHECK_FRAME (frame);
1588 CHECK_STRING (color); 1588 CHECK_STRING (color);
1589 f = XFRAME (frame); 1589 f = XFRAME (frame);
1590 if (face_color_supported_p (f, XSTRING (color)->data, !NILP (background_p))) 1590 if (face_color_supported_p (f, SDATA (color), !NILP (background_p)))
1591 return Qt; 1591 return Qt;
1592 return Qnil; 1592 return Qnil;
1593 } 1593 }
1594 1594
1595 1595
1619 || target_index == LFACE_STRIKE_THROUGH_INDEX 1619 || target_index == LFACE_STRIKE_THROUGH_INDEX
1620 || target_index == LFACE_BOX_INDEX); 1620 || target_index == LFACE_BOX_INDEX);
1621 1621
1622 /* if the color map is full, defined_color will return a best match 1622 /* if the color map is full, defined_color will return a best match
1623 to the values in an existing cell. */ 1623 to the values in an existing cell. */
1624 if (!defined_color (f, XSTRING (name)->data, &color, 1)) 1624 if (!defined_color (f, SDATA (name), &color, 1))
1625 { 1625 {
1626 add_to_log ("Unable to load color \"%s\"", name, Qnil); 1626 add_to_log ("Unable to load color \"%s\"", name, Qnil);
1627 1627
1628 switch (target_index) 1628 switch (target_index)
1629 { 1629 {
1699 1699
1700 /* Check for support for foreground, not for background because 1700 /* Check for support for foreground, not for background because
1701 face_color_supported_p is smart enough to know that grays are 1701 face_color_supported_p is smart enough to know that grays are
1702 "supported" as background because we are supposed to use stipple 1702 "supported" as background because we are supposed to use stipple
1703 for them. */ 1703 for them. */
1704 if (!face_color_supported_p (f, XSTRING (bg)->data, 0) 1704 if (!face_color_supported_p (f, SDATA (bg), 0)
1705 && !NILP (Fbitmap_spec_p (Vface_default_stipple))) 1705 && !NILP (Fbitmap_spec_p (Vface_default_stipple)))
1706 { 1706 {
1707 x_destroy_bitmap (f, face->stipple); 1707 x_destroy_bitmap (f, face->stipple);
1708 face->stipple = load_pixmap (f, Vface_default_stipple, 1708 face->stipple = load_pixmap (f, Vface_default_stipple,
1709 &face->pixmap_w, &face->pixmap_h); 1709 &face->pixmap_w, &face->pixmap_h);
2474 split them into fields. */ 2474 split them into fields. */
2475 n = nignored = 0; 2475 n = nignored = 0;
2476 for (tem = lfonts; CONSP (tem) && n < nfonts; tem = XCDR (tem)) 2476 for (tem = lfonts; CONSP (tem) && n < nfonts; tem = XCDR (tem))
2477 { 2477 {
2478 Lisp_Object elt, tail; 2478 Lisp_Object elt, tail;
2479 char *name = XSTRING (XCAR (tem))->data; 2479 char *name = SDATA (XCAR (tem));
2480 2480
2481 /* Ignore fonts matching a pattern from face-ignored-fonts. */ 2481 /* Ignore fonts matching a pattern from face-ignored-fonts. */
2482 for (tail = Vface_ignored_fonts; CONSP (tail); tail = XCDR (tail)) 2482 for (tail = Vface_ignored_fonts; CONSP (tail); tail = XCDR (tail))
2483 { 2483 {
2484 elt = XCAR (tail); 2484 elt = XCAR (tail);
2518 while (CONSP (list)) 2518 while (CONSP (list))
2519 { 2519 {
2520 Lisp_Object entry = XCAR (list); 2520 Lisp_Object entry = XCAR (list);
2521 if (CONSP (entry) 2521 if (CONSP (entry)
2522 && STRINGP (XCAR (entry)) 2522 && STRINGP (XCAR (entry))
2523 && strcmp (XSTRING (XCAR (entry))->data, pattern) == 0) 2523 && strcmp (SDATA (XCAR (entry)), pattern) == 0)
2524 break; 2524 break;
2525 list = XCDR (list); 2525 list = XCDR (list);
2526 } 2526 }
2527 2527
2528 if (CONSP (list)) 2528 if (CONSP (list))
2534 /* If list is screwed up, give up. */ 2534 /* If list is screwed up, give up. */
2535 && (name = XCAR (patterns), 2535 && (name = XCAR (patterns),
2536 STRINGP (name)) 2536 STRINGP (name))
2537 /* Ignore patterns equal to PATTERN because we tried that 2537 /* Ignore patterns equal to PATTERN because we tried that
2538 already with no success. */ 2538 already with no success. */
2539 && (strcmp (XSTRING (name)->data, pattern) == 0 2539 && (strcmp (SDATA (name), pattern) == 0
2540 || (n = x_face_list_fonts (f, XSTRING (name)->data, 2540 || (n = x_face_list_fonts (f, SDATA (name),
2541 fonts, nfonts, 0), 2541 fonts, nfonts, 0),
2542 n == 0))) 2542 n == 0)))
2543 patterns = XCDR (patterns); 2543 patterns = XCDR (patterns);
2544 } 2544 }
2545 } 2545 }
2645 { 2645 {
2646 char *pattern_str, *family_str, *registry_str; 2646 char *pattern_str, *family_str, *registry_str;
2647 2647
2648 if (NILP (pattern)) 2648 if (NILP (pattern))
2649 { 2649 {
2650 family_str = (NILP (family) ? "*" : (char *) XSTRING (family)->data); 2650 family_str = (NILP (family) ? "*" : (char *) SDATA (family));
2651 registry_str = (NILP (registry) ? "*" : (char *) XSTRING (registry)->data); 2651 registry_str = (NILP (registry) ? "*" : (char *) SDATA (registry));
2652 2652
2653 pattern_str = (char *) alloca (strlen (family_str) 2653 pattern_str = (char *) alloca (strlen (family_str)
2654 + strlen (registry_str) 2654 + strlen (registry_str)
2655 + 10); 2655 + 10);
2656 strcpy (pattern_str, index (family_str, '-') ? "-" : "-*-"); 2656 strcpy (pattern_str, index (family_str, '-') ? "-" : "-*-");
2664 else 2664 else
2665 strcat (pattern_str, "*-*"); 2665 strcat (pattern_str, "*-*");
2666 } 2666 }
2667 } 2667 }
2668 else 2668 else
2669 pattern_str = (char *) XSTRING (pattern)->data; 2669 pattern_str = (char *) SDATA (pattern);
2670 2670
2671 return sorted_font_list (f, pattern_str, cmp_font_names, fonts); 2671 return sorted_font_list (f, pattern_str, cmp_font_names, fonts);
2672 } 2672 }
2673 2673
2674 2674
3085 Lisp_Object face_name; 3085 Lisp_Object face_name;
3086 { 3086 {
3087 Lisp_Object aliased; 3087 Lisp_Object aliased;
3088 3088
3089 if (STRINGP (face_name)) 3089 if (STRINGP (face_name))
3090 face_name = intern (XSTRING (face_name)->data); 3090 face_name = intern (SDATA (face_name));
3091 3091
3092 while (SYMBOLP (face_name)) 3092 while (SYMBOLP (face_name))
3093 { 3093 {
3094 aliased = Fget (face_name, Qface_alias); 3094 aliased = Fget (face_name, Qface_alias);
3095 if (NILP (aliased)) 3095 if (NILP (aliased))
3208 struct font_name font; 3208 struct font_name font;
3209 char *buffer; 3209 char *buffer;
3210 int pt; 3210 int pt;
3211 int have_xlfd_p; 3211 int have_xlfd_p;
3212 int fontset; 3212 int fontset;
3213 char *font_name = XSTRING (fontname)->data; 3213 char *font_name = SDATA (fontname);
3214 struct font_info *font_info; 3214 struct font_info *font_info;
3215 3215
3216 /* If FONTNAME is actually a fontset name, get ASCII font name of it. */ 3216 /* If FONTNAME is actually a fontset name, get ASCII font name of it. */
3217 fontset = fs_query_fontset (fontname, 0); 3217 fontset = fs_query_fontset (fontname, 0);
3218 if (fontset >= 0) 3218 if (fontset >= 0)
3219 font_name = XSTRING (fontset_ascii (fontset))->data; 3219 font_name = SDATA (fontset_ascii (fontset));
3220 3220
3221 /* Check if FONT_NAME is surely available on the system. Usually 3221 /* Check if FONT_NAME is surely available on the system. Usually
3222 FONT_NAME is already cached for the frame F and FS_LOAD_FONT 3222 FONT_NAME is already cached for the frame F and FS_LOAD_FONT
3223 returns quickly. But, even if FONT_NAME is not yet cached, 3223 returns quickly. But, even if FONT_NAME is not yet cached,
3224 caching it now is not futail because we anyway load the font 3224 caching it now is not futail because we anyway load the font
3520 } 3520 }
3521 else 3521 else
3522 add_to_log ("Invalid face color", color_name, Qnil); 3522 add_to_log ("Invalid face color", color_name, Qnil);
3523 } 3523 }
3524 else if (SYMBOLP (first) 3524 else if (SYMBOLP (first)
3525 && *XSTRING (SYMBOL_NAME (first))->data == ':') 3525 && *SDATA (SYMBOL_NAME (first)) == ':')
3526 { 3526 {
3527 /* Assume this is the property list form. */ 3527 /* Assume this is the property list form. */
3528 while (CONSP (prop) && CONSP (XCDR (prop))) 3528 while (CONSP (prop) && CONSP (XCDR (prop)))
3529 { 3529 {
3530 Lisp_Object keyword = XCAR (prop); 3530 Lisp_Object keyword = XCAR (prop);
3902 if (EQ (attr, QCfamily)) 3902 if (EQ (attr, QCfamily))
3903 { 3903 {
3904 if (!UNSPECIFIEDP (value)) 3904 if (!UNSPECIFIEDP (value))
3905 { 3905 {
3906 CHECK_STRING (value); 3906 CHECK_STRING (value);
3907 if (XSTRING (value)->size == 0) 3907 if (SCHARS (value) == 0)
3908 signal_error ("Invalid face family", value); 3908 signal_error ("Invalid face family", value);
3909 } 3909 }
3910 old_value = LFACE_FAMILY (lface); 3910 old_value = LFACE_FAMILY (lface);
3911 LFACE_FAMILY (lface) = value; 3911 LFACE_FAMILY (lface) = value;
3912 font_related_attr_p = 1; 3912 font_related_attr_p = 1;
3962 if ((SYMBOLP (value) 3962 if ((SYMBOLP (value)
3963 && !EQ (value, Qt) 3963 && !EQ (value, Qt)
3964 && !EQ (value, Qnil)) 3964 && !EQ (value, Qnil))
3965 /* Underline color. */ 3965 /* Underline color. */
3966 || (STRINGP (value) 3966 || (STRINGP (value)
3967 && XSTRING (value)->size == 0)) 3967 && SCHARS (value) == 0))
3968 signal_error ("Invalid face underline", value); 3968 signal_error ("Invalid face underline", value);
3969 3969
3970 old_value = LFACE_UNDERLINE (lface); 3970 old_value = LFACE_UNDERLINE (lface);
3971 LFACE_UNDERLINE (lface) = value; 3971 LFACE_UNDERLINE (lface) = value;
3972 } 3972 }
3976 if ((SYMBOLP (value) 3976 if ((SYMBOLP (value)
3977 && !EQ (value, Qt) 3977 && !EQ (value, Qt)
3978 && !EQ (value, Qnil)) 3978 && !EQ (value, Qnil))
3979 /* Overline color. */ 3979 /* Overline color. */
3980 || (STRINGP (value) 3980 || (STRINGP (value)
3981 && XSTRING (value)->size == 0)) 3981 && SCHARS (value) == 0))
3982 signal_error ("Invalid face overline", value); 3982 signal_error ("Invalid face overline", value);
3983 3983
3984 old_value = LFACE_OVERLINE (lface); 3984 old_value = LFACE_OVERLINE (lface);
3985 LFACE_OVERLINE (lface) = value; 3985 LFACE_OVERLINE (lface) = value;
3986 } 3986 }
3990 if ((SYMBOLP (value) 3990 if ((SYMBOLP (value)
3991 && !EQ (value, Qt) 3991 && !EQ (value, Qt)
3992 && !EQ (value, Qnil)) 3992 && !EQ (value, Qnil))
3993 /* Strike-through color. */ 3993 /* Strike-through color. */
3994 || (STRINGP (value) 3994 || (STRINGP (value)
3995 && XSTRING (value)->size == 0)) 3995 && SCHARS (value) == 0))
3996 signal_error ("Invalid face strike-through", value); 3996 signal_error ("Invalid face strike-through", value);
3997 3997
3998 old_value = LFACE_STRIKE_THROUGH (lface); 3998 old_value = LFACE_STRIKE_THROUGH (lface);
3999 LFACE_STRIKE_THROUGH (lface) = value; 3999 LFACE_STRIKE_THROUGH (lface) = value;
4000 } 4000 }
4012 else if (NILP (value)) 4012 else if (NILP (value))
4013 valid_p = 1; 4013 valid_p = 1;
4014 else if (INTEGERP (value)) 4014 else if (INTEGERP (value))
4015 valid_p = XINT (value) != 0; 4015 valid_p = XINT (value) != 0;
4016 else if (STRINGP (value)) 4016 else if (STRINGP (value))
4017 valid_p = XSTRING (value)->size > 0; 4017 valid_p = SCHARS (value) > 0;
4018 else if (CONSP (value)) 4018 else if (CONSP (value))
4019 { 4019 {
4020 Lisp_Object tem; 4020 Lisp_Object tem;
4021 4021
4022 tem = value; 4022 tem = value;
4036 if (!INTEGERP (v) || XINT (v) == 0) 4036 if (!INTEGERP (v) || XINT (v) == 0)
4037 break; 4037 break;
4038 } 4038 }
4039 else if (EQ (k, QCcolor)) 4039 else if (EQ (k, QCcolor))
4040 { 4040 {
4041 if (!STRINGP (v) || XSTRING (v)->size == 0) 4041 if (!STRINGP (v) || SCHARS (v) == 0)
4042 break; 4042 break;
4043 } 4043 }
4044 else if (EQ (k, QCstyle)) 4044 else if (EQ (k, QCstyle))
4045 { 4045 {
4046 if (!EQ (v, Qpressed_button) && !EQ (v, Qreleased_button)) 4046 if (!EQ (v, Qpressed_button) && !EQ (v, Qreleased_button))
4079 { 4079 {
4080 /* Don't check for valid color names here because it depends 4080 /* Don't check for valid color names here because it depends
4081 on the frame (display) whether the color will be valid 4081 on the frame (display) whether the color will be valid
4082 when the face is realized. */ 4082 when the face is realized. */
4083 CHECK_STRING (value); 4083 CHECK_STRING (value);
4084 if (XSTRING (value)->size == 0) 4084 if (SCHARS (value) == 0)
4085 signal_error ("Empty foreground color value", value); 4085 signal_error ("Empty foreground color value", value);
4086 } 4086 }
4087 old_value = LFACE_FOREGROUND (lface); 4087 old_value = LFACE_FOREGROUND (lface);
4088 LFACE_FOREGROUND (lface) = value; 4088 LFACE_FOREGROUND (lface) = value;
4089 } 4089 }
4093 { 4093 {
4094 /* Don't check for valid color names here because it depends 4094 /* Don't check for valid color names here because it depends
4095 on the frame (display) whether the color will be valid 4095 on the frame (display) whether the color will be valid
4096 when the face is realized. */ 4096 when the face is realized. */
4097 CHECK_STRING (value); 4097 CHECK_STRING (value);
4098 if (XSTRING (value)->size == 0) 4098 if (SCHARS (value) == 0)
4099 signal_error ("Empty background color value", value); 4099 signal_error ("Empty background color value", value);
4100 } 4100 }
4101 old_value = LFACE_BACKGROUND (lface); 4101 old_value = LFACE_BACKGROUND (lface);
4102 LFACE_BACKGROUND (lface) = value; 4102 LFACE_BACKGROUND (lface) = value;
4103 } 4103 }
4443 { 4443 {
4444 Lisp_Object result = make_number (0); 4444 Lisp_Object result = make_number (0);
4445 4445
4446 xassert (STRINGP (value)); 4446 xassert (STRINGP (value));
4447 4447
4448 if (xstricmp (XSTRING (value)->data, "on") == 0 4448 if (xstricmp (SDATA (value), "on") == 0
4449 || xstricmp (XSTRING (value)->data, "true") == 0) 4449 || xstricmp (SDATA (value), "true") == 0)
4450 result = Qt; 4450 result = Qt;
4451 else if (xstricmp (XSTRING (value)->data, "off") == 0 4451 else if (xstricmp (SDATA (value), "off") == 0
4452 || xstricmp (XSTRING (value)->data, "false") == 0) 4452 || xstricmp (SDATA (value), "false") == 0)
4453 result = Qnil; 4453 result = Qnil;
4454 else if (xstricmp (XSTRING (value)->data, "unspecified") == 0) 4454 else if (xstricmp (SDATA (value), "unspecified") == 0)
4455 result = Qunspecified; 4455 result = Qunspecified;
4456 else if (signal_p) 4456 else if (signal_p)
4457 signal_error ("Invalid face attribute value from X resource", value); 4457 signal_error ("Invalid face attribute value from X resource", value);
4458 4458
4459 return result; 4459 return result;
4469 { 4469 {
4470 CHECK_SYMBOL (face); 4470 CHECK_SYMBOL (face);
4471 CHECK_SYMBOL (attr); 4471 CHECK_SYMBOL (attr);
4472 CHECK_STRING (value); 4472 CHECK_STRING (value);
4473 4473
4474 if (xstricmp (XSTRING (value)->data, "unspecified") == 0) 4474 if (xstricmp (SDATA (value), "unspecified") == 0)
4475 value = Qunspecified; 4475 value = Qunspecified;
4476 else if (EQ (attr, QCheight)) 4476 else if (EQ (attr, QCheight))
4477 { 4477 {
4478 value = Fstring_to_number (value, make_number (10)); 4478 value = Fstring_to_number (value, make_number (10));
4479 if (XINT (value) <= 0) 4479 if (XINT (value) <= 0)
4480 signal_error ("Invalid face height from X resource", value); 4480 signal_error ("Invalid face height from X resource", value);
4481 } 4481 }
4482 else if (EQ (attr, QCbold) || EQ (attr, QCitalic)) 4482 else if (EQ (attr, QCbold) || EQ (attr, QCitalic))
4483 value = face_boolean_x_resource_value (value, 1); 4483 value = face_boolean_x_resource_value (value, 1);
4484 else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth)) 4484 else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth))
4485 value = intern (XSTRING (value)->data); 4485 value = intern (SDATA (value));
4486 else if (EQ (attr, QCreverse_video) || EQ (attr, QCinverse_video)) 4486 else if (EQ (attr, QCreverse_video) || EQ (attr, QCinverse_video))
4487 value = face_boolean_x_resource_value (value, 1); 4487 value = face_boolean_x_resource_value (value, 1);
4488 else if (EQ (attr, QCunderline) 4488 else if (EQ (attr, QCunderline)
4489 || EQ (attr, QCoverline) 4489 || EQ (attr, QCoverline)
4490 || EQ (attr, QCstrike_through)) 4490 || EQ (attr, QCstrike_through))
4526 rdb != NULL)) 4526 rdb != NULL))
4527 { 4527 {
4528 char line[512]; 4528 char line[512];
4529 Lisp_Object lface = lface_from_face_name (f, Qmenu, 1); 4529 Lisp_Object lface = lface_from_face_name (f, Qmenu, 1);
4530 struct face *face = FACE_FROM_ID (f, MENU_FACE_ID); 4530 struct face *face = FACE_FROM_ID (f, MENU_FACE_ID);
4531 char *myname = XSTRING (Vx_resource_name)->data; 4531 char *myname = SDATA (Vx_resource_name);
4532 int changed_p = 0; 4532 int changed_p = 0;
4533 #ifdef USE_MOTIF 4533 #ifdef USE_MOTIF
4534 const char *popup_path = "popup_menu"; 4534 const char *popup_path = "popup_menu";
4535 #else 4535 #else
4536 const char *popup_path = "menu.popup"; 4536 const char *popup_path = "menu.popup";
4538 4538
4539 if (STRINGP (LFACE_FOREGROUND (lface))) 4539 if (STRINGP (LFACE_FOREGROUND (lface)))
4540 { 4540 {
4541 sprintf (line, "%s.%s*foreground: %s", 4541 sprintf (line, "%s.%s*foreground: %s",
4542 myname, popup_path, 4542 myname, popup_path,
4543 XSTRING (LFACE_FOREGROUND (lface))->data); 4543 SDATA (LFACE_FOREGROUND (lface)));
4544 XrmPutLineResource (&rdb, line); 4544 XrmPutLineResource (&rdb, line);
4545 sprintf (line, "%s.pane.menubar*foreground: %s", 4545 sprintf (line, "%s.pane.menubar*foreground: %s",
4546 myname, XSTRING (LFACE_FOREGROUND (lface))->data); 4546 myname, SDATA (LFACE_FOREGROUND (lface)));
4547 XrmPutLineResource (&rdb, line); 4547 XrmPutLineResource (&rdb, line);
4548 changed_p = 1; 4548 changed_p = 1;
4549 } 4549 }
4550 4550
4551 if (STRINGP (LFACE_BACKGROUND (lface))) 4551 if (STRINGP (LFACE_BACKGROUND (lface)))
4552 { 4552 {
4553 sprintf (line, "%s.%s*background: %s", 4553 sprintf (line, "%s.%s*background: %s",
4554 myname, popup_path, 4554 myname, popup_path,
4555 XSTRING (LFACE_BACKGROUND (lface))->data); 4555 SDATA (LFACE_BACKGROUND (lface)));
4556 XrmPutLineResource (&rdb, line); 4556 XrmPutLineResource (&rdb, line);
4557 sprintf (line, "%s.pane.menubar*background: %s", 4557 sprintf (line, "%s.pane.menubar*background: %s",
4558 myname, XSTRING (LFACE_BACKGROUND (lface))->data); 4558 myname, SDATA (LFACE_BACKGROUND (lface)));
4559 XrmPutLineResource (&rdb, line); 4559 XrmPutLineResource (&rdb, line);
4560 changed_p = 1; 4560 changed_p = 1;
4561 } 4561 }
4562 4562
4563 if (face->font_name 4563 if (face->font_name
4835 if (!EQ (a, b)) 4835 if (!EQ (a, b))
4836 { 4836 {
4837 switch (XTYPE (a)) 4837 switch (XTYPE (a))
4838 { 4838 {
4839 case Lisp_String: 4839 case Lisp_String:
4840 equal_p = ((STRING_BYTES (XSTRING (a)) 4840 equal_p = ((SBYTES (a)
4841 == STRING_BYTES (XSTRING (b))) 4841 == SBYTES (b))
4842 && bcmp (XSTRING (a)->data, XSTRING (b)->data, 4842 && bcmp (SDATA (a), SDATA (b),
4843 STRING_BYTES (XSTRING (a))) == 0); 4843 SBYTES (a)) == 0);
4844 break; 4844 break;
4845 4845
4846 case Lisp_Int: 4846 case Lisp_Int:
4847 case Lisp_Symbol: 4847 case Lisp_Symbol:
4848 equal_p = 0; 4848 equal_p = 0;
4940 Lisp_Object string; 4940 Lisp_Object string;
4941 { 4941 {
4942 unsigned char *s; 4942 unsigned char *s;
4943 unsigned hash = 0; 4943 unsigned hash = 0;
4944 xassert (STRINGP (string)); 4944 xassert (STRINGP (string));
4945 for (s = XSTRING (string)->data; *s; ++s) 4945 for (s = SDATA (string); *s; ++s)
4946 hash = (hash << 1) ^ tolower (*s); 4946 hash = (hash << 1) ^ tolower (*s);
4947 return hash; 4947 return hash;
4948 } 4948 }
4949 4949
4950 4950
4973 lface_same_font_attributes_p (lface1, lface2) 4973 lface_same_font_attributes_p (lface1, lface2)
4974 Lisp_Object *lface1, *lface2; 4974 Lisp_Object *lface1, *lface2;
4975 { 4975 {
4976 xassert (lface_fully_specified_p (lface1) 4976 xassert (lface_fully_specified_p (lface1)
4977 && lface_fully_specified_p (lface2)); 4977 && lface_fully_specified_p (lface2));
4978 return (xstricmp (XSTRING (lface1[LFACE_FAMILY_INDEX])->data, 4978 return (xstricmp (SDATA (lface1[LFACE_FAMILY_INDEX]),
4979 XSTRING (lface2[LFACE_FAMILY_INDEX])->data) == 0 4979 SDATA (lface2[LFACE_FAMILY_INDEX])) == 0
4980 && EQ (lface1[LFACE_HEIGHT_INDEX], lface2[LFACE_HEIGHT_INDEX]) 4980 && EQ (lface1[LFACE_HEIGHT_INDEX], lface2[LFACE_HEIGHT_INDEX])
4981 && EQ (lface1[LFACE_SWIDTH_INDEX], lface2[LFACE_SWIDTH_INDEX]) 4981 && EQ (lface1[LFACE_SWIDTH_INDEX], lface2[LFACE_SWIDTH_INDEX])
4982 && EQ (lface1[LFACE_AVGWIDTH_INDEX], lface2[LFACE_AVGWIDTH_INDEX]) 4982 && EQ (lface1[LFACE_AVGWIDTH_INDEX], lface2[LFACE_AVGWIDTH_INDEX])
4983 && EQ (lface1[LFACE_WEIGHT_INDEX], lface2[LFACE_WEIGHT_INDEX]) 4983 && EQ (lface1[LFACE_WEIGHT_INDEX], lface2[LFACE_WEIGHT_INDEX])
4984 && EQ (lface1[LFACE_SLANT_INDEX], lface2[LFACE_SLANT_INDEX]) 4984 && EQ (lface1[LFACE_SLANT_INDEX], lface2[LFACE_SLANT_INDEX])
4985 && (EQ (lface1[LFACE_FONT_INDEX], lface2[LFACE_FONT_INDEX]) 4985 && (EQ (lface1[LFACE_FONT_INDEX], lface2[LFACE_FONT_INDEX])
4986 || (STRINGP (lface1[LFACE_FONT_INDEX]) 4986 || (STRINGP (lface1[LFACE_FONT_INDEX])
4987 && STRINGP (lface2[LFACE_FONT_INDEX]) 4987 && STRINGP (lface2[LFACE_FONT_INDEX])
4988 && xstricmp (XSTRING (lface1[LFACE_FONT_INDEX])->data, 4988 && xstricmp (SDATA (lface1[LFACE_FONT_INDEX]),
4989 XSTRING (lface2[LFACE_FONT_INDEX])->data)))); 4989 SDATA (lface2[LFACE_FONT_INDEX])))));
4990 } 4990 }
4991 4991
4992 4992
4993 4993
4994 /*********************************************************************** 4994 /***********************************************************************
5139 CHECK_LIVE_FRAME (frame); 5139 CHECK_LIVE_FRAME (frame);
5140 f = XFRAME (frame); 5140 f = XFRAME (frame);
5141 5141
5142 if ((CONSP (color1) && !parse_rgb_list (color1, &cdef1)) 5142 if ((CONSP (color1) && !parse_rgb_list (color1, &cdef1))
5143 || !STRINGP (color1) 5143 || !STRINGP (color1)
5144 || !defined_color (f, XSTRING (color1)->data, &cdef1, 0)) 5144 || !defined_color (f, SDATA (color1), &cdef1, 0))
5145 signal_error ("Invalid color", color1); 5145 signal_error ("Invalid color", color1);
5146 if ((CONSP (color2) && !parse_rgb_list (color2, &cdef2)) 5146 if ((CONSP (color2) && !parse_rgb_list (color2, &cdef2))
5147 || !STRINGP (color2) 5147 || !STRINGP (color2)
5148 || !defined_color (f, XSTRING (color2)->data, &cdef2, 0)) 5148 || !defined_color (f, SDATA (color2), &cdef2, 0))
5149 signal_error ("Invalid color", color2); 5149 signal_error ("Invalid color", color2);
5150 5150
5151 return make_number (color_distance (&cdef1, &cdef2)); 5151 return make_number (color_distance (&cdef1, &cdef2));
5152 } 5152 }
5153 5153
6345 exactly, Emacs looks for ones with the same registry as the 6345 exactly, Emacs looks for ones with the same registry as the
6346 default font. On the Mac, this is mac-roman, which does not work 6346 default font. On the Mac, this is mac-roman, which does not work
6347 if the family is -etl-fixed, e.g. The following widens the 6347 if the family is -etl-fixed, e.g. The following widens the
6348 choices and fixes that problem. */ 6348 choices and fixes that problem. */
6349 if (nfonts == 0 && STRINGP (face_family) && STRINGP (registry) 6349 if (nfonts == 0 && STRINGP (face_family) && STRINGP (registry)
6350 && xstricmp (XSTRING (registry)->data, "mac-roman") == 0) 6350 && xstricmp (SDATA (registry), "mac-roman") == 0)
6351 nfonts = try_alternative_families (f, face_family, Qnil, fonts); 6351 nfonts = try_alternative_families (f, face_family, Qnil, fonts);
6352 #endif 6352 #endif
6353 6353
6354 if (nfonts == 0 && !NILP (family)) 6354 if (nfonts == 0 && !NILP (family))
6355 nfonts = try_alternative_families (f, family, registry, fonts); 6355 nfonts = try_alternative_families (f, family, registry, fonts);
6419 return NULL; 6419 return NULL;
6420 } 6420 }
6421 6421
6422 /* If what we got is a name pattern, return it. */ 6422 /* If what we got is a name pattern, return it. */
6423 if (STRINGP (pattern)) 6423 if (STRINGP (pattern))
6424 return xstrdup (XSTRING (pattern)->data); 6424 return xstrdup (SDATA (pattern));
6425 6425
6426 /* Get a list of fonts matching that pattern and choose the 6426 /* Get a list of fonts matching that pattern and choose the
6427 best match for the specified face attributes from it. */ 6427 best match for the specified face attributes from it. */
6428 nfonts = try_font_list (f, attrs, XCAR (pattern), XCDR (pattern), &fonts); 6428 nfonts = try_font_list (f, attrs, XCAR (pattern), XCDR (pattern), &fonts);
6429 width_ratio = (SINGLE_BYTE_CHAR_P (c) 6429 width_ratio = (SINGLE_BYTE_CHAR_P (c)
6925 6925
6926 XSETFRAME (frame, f); 6926 XSETFRAME (frame, f);
6927 color = face->lface[idx]; 6927 color = face->lface[idx];
6928 6928
6929 if (STRINGP (color) 6929 if (STRINGP (color)
6930 && XSTRING (color)->size 6930 && SCHARS (color)
6931 && CONSP (Vtty_defined_color_alist) 6931 && CONSP (Vtty_defined_color_alist)
6932 && (def = assq_no_quit (color, call1 (Qtty_color_alist, frame)), 6932 && (def = assq_no_quit (color, call1 (Qtty_color_alist, frame)),
6933 CONSP (def))) 6933 CONSP (def)))
6934 { 6934 {
6935 /* Associations in tty-defined-color-alist are of the form 6935 /* Associations in tty-defined-color-alist are of the form
7275 is nil if face is constant all the way to the end of the string. 7275 is nil if face is constant all the way to the end of the string.
7276 Otherwise it is a string position where to check faces next. 7276 Otherwise it is a string position where to check faces next.
7277 Limit is the maximum position up to which to check for property 7277 Limit is the maximum position up to which to check for property
7278 changes in Fnext_single_property_change. Strings are usually 7278 changes in Fnext_single_property_change. Strings are usually
7279 short, so set the limit to the end of the string. */ 7279 short, so set the limit to the end of the string. */
7280 XSETFASTINT (limit, XSTRING (string)->size); 7280 XSETFASTINT (limit, SCHARS (string));
7281 end = Fnext_single_property_change (position, prop_name, string, limit); 7281 end = Fnext_single_property_change (position, prop_name, string, limit);
7282 if (INTEGERP (end)) 7282 if (INTEGERP (end))
7283 *endptr = XFASTINT (end); 7283 *endptr = XFASTINT (end);
7284 else 7284 else
7285 *endptr = -1; 7285 *endptr = -1;
7343 #ifdef HAVE_X_WINDOWS 7343 #ifdef HAVE_X_WINDOWS
7344 fprintf (stderr, "gc: %d\n", (int) face->gc); 7344 fprintf (stderr, "gc: %d\n", (int) face->gc);
7345 #endif 7345 #endif
7346 fprintf (stderr, "foreground: 0x%lx (%s)\n", 7346 fprintf (stderr, "foreground: 0x%lx (%s)\n",
7347 face->foreground, 7347 face->foreground,
7348 XSTRING (face->lface[LFACE_FOREGROUND_INDEX])->data); 7348 SDATA (face->lface[LFACE_FOREGROUND_INDEX]));
7349 fprintf (stderr, "background: 0x%lx (%s)\n", 7349 fprintf (stderr, "background: 0x%lx (%s)\n",
7350 face->background, 7350 face->background,
7351 XSTRING (face->lface[LFACE_BACKGROUND_INDEX])->data); 7351 SDATA (face->lface[LFACE_BACKGROUND_INDEX]));
7352 fprintf (stderr, "font_name: %s (%s)\n", 7352 fprintf (stderr, "font_name: %s (%s)\n",
7353 face->font_name, 7353 face->font_name,
7354 XSTRING (face->lface[LFACE_FAMILY_INDEX])->data); 7354 SDATA (face->lface[LFACE_FAMILY_INDEX]));
7355 #ifdef HAVE_X_WINDOWS 7355 #ifdef HAVE_X_WINDOWS
7356 fprintf (stderr, "font = %p\n", face->font); 7356 fprintf (stderr, "font = %p\n", face->font);
7357 #endif 7357 #endif
7358 fprintf (stderr, "font_info_id = %d\n", face->font_info_id); 7358 fprintf (stderr, "font_info_id = %d\n", face->font_info_id);
7359 fprintf (stderr, "fontset: %d\n", face->fontset); 7359 fprintf (stderr, "fontset: %d\n", face->fontset);
7360 fprintf (stderr, "underline: %d (%s)\n", 7360 fprintf (stderr, "underline: %d (%s)\n",
7361 face->underline_p, 7361 face->underline_p,
7362 XSTRING (Fsymbol_name (face->lface[LFACE_UNDERLINE_INDEX]))->data); 7362 SDATA (Fsymbol_name (face->lface[LFACE_UNDERLINE_INDEX])));
7363 fprintf (stderr, "hash: %d\n", face->hash); 7363 fprintf (stderr, "hash: %d\n", face->hash);
7364 fprintf (stderr, "charset: %d\n", face->charset); 7364 fprintf (stderr, "charset: %d\n", face->charset);
7365 } 7365 }
7366 7366
7367 7367