From d04a2836141d7449da059ff730f1f21168ea6714 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 5 Sep 2013 06:17:39 -0400 Subject: [PATCH 001/321] Auto-commit of generated files. --- autogen/configure | 112 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/autogen/configure b/autogen/configure index 61c03785f61..7fe40f5bd51 100755 --- a/autogen/configure +++ b/autogen/configure @@ -10340,6 +10340,118 @@ fi ## $window_system is now set to the window system we will ## ultimately use. +if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then + # Too many warnings for now. + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-unused-variable" >&5 +$as_echo_n "checking whether C compiler handles -Wno-unused-variable... " >&6; } +if test "${gl_cv_warn_c__Wno_unused_variable+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-variable" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_unused_variable=yes +else + gl_cv_warn_c__Wno_unused_variable=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_unused_variable" >&5 +$as_echo "$gl_cv_warn_c__Wno_unused_variable" >&6; } +if test "x$gl_cv_warn_c__Wno_unused_variable" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-unused-variable" +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-unused-but-set-variable" >&5 +$as_echo_n "checking whether C compiler handles -Wno-unused-but-set-variable... " >&6; } +if test "${gl_cv_warn_c__Wno_unused_but_set_variable+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-but-set-variable" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_unused_but_set_variable=yes +else + gl_cv_warn_c__Wno_unused_but_set_variable=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_unused_but_set_variable" >&5 +$as_echo "$gl_cv_warn_c__Wno_unused_but_set_variable" >&6; } +if test "x$gl_cv_warn_c__Wno_unused_but_set_variable" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-unused-but-set-variable" +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-unused-but-set-parameter" >&5 +$as_echo_n "checking whether C compiler handles -Wno-unused-but-set-parameter... " >&6; } +if test "${gl_cv_warn_c__Wno_unused_but_set_parameter+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-but-set-parameter" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_unused_but_set_parameter=yes +else + gl_cv_warn_c__Wno_unused_but_set_parameter=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_unused_but_set_parameter" >&5 +$as_echo "$gl_cv_warn_c__Wno_unused_but_set_parameter" >&6; } +if test "x$gl_cv_warn_c__Wno_unused_but_set_parameter" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-unused-but-set-parameter" +fi + + +fi + term_header= HAVE_X_WINDOWS=no HAVE_X11=no From 6aed5dccd0b87e6c32345b4914dcb50eea399327 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 5 Sep 2013 06:21:43 -0400 Subject: [PATCH 002/321] Auto-commit of loaddefs files. --- lisp/dired.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/dired.el b/lisp/dired.el index f830623a255..b9f974234fb 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -4352,7 +4352,7 @@ instead. ;;;*** -;;;### (autoloads nil "dired-x" "dired-x.el" "1419d865898f84c17f172320e578380c") +;;;### (autoloads nil "dired-x" "dired-x.el" "130484d4c94bb9929c210774f9e475f5") ;;; Generated autoloads from dired-x.el (autoload 'dired-jump "dired-x" "\ From 667383058ff503073f9e094ab3c88280748857ef Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Thu, 5 Sep 2013 16:08:50 +0400 Subject: [PATCH 003/321] * fontset.c, window.c, xdisp.c (toplevel): Use TERM_HEADER. * xfaces.c (toplevel) [HAVE_X_WINDOWS]: Do not include xterm.h twice. --- src/ChangeLog | 5 +++++ src/fontset.c | 13 +++---------- src/window.c | 13 +++---------- src/xdisp.c | 16 +++------------- src/xfaces.c | 3 --- 5 files changed, 14 insertions(+), 36 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3ef8bee2f0b..d4a7abefd57 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-05 Dmitry Antipov + + * fontset.c, window.c, xdisp.c (toplevel): Use TERM_HEADER. + * xfaces.c (toplevel) [HAVE_X_WINDOWS]: Do not include xterm.h twice. + 2013-09-05 Dmitry Antipov Make --without-x compatible with --enable-gcc-warnings. diff --git a/src/fontset.c b/src/fontset.c index a6277b050d5..797d51ac0a7 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -39,17 +39,10 @@ along with GNU Emacs. If not, see . */ #include "intervals.h" #include "fontset.h" #include "window.h" -#ifdef HAVE_X_WINDOWS -#include "xterm.h" -#endif -#ifdef HAVE_NTGUI -#include "w32term.h" -#endif -#ifdef HAVE_NS -#include "nsterm.h" -#endif +#ifdef HAVE_WINDOW_SYSTEM +#include TERM_HEADER +#endif /* HAVE_WINDOW_SYSTEM */ #include "termhooks.h" - #include "font.h" /* FONTSET diff --git a/src/window.c b/src/window.c index ef96861dc71..d8a6976e090 100644 --- a/src/window.c +++ b/src/window.c @@ -39,19 +39,12 @@ along with GNU Emacs. If not, see . */ #include "blockinput.h" #include "intervals.h" #include "termhooks.h" /* For FRAME_TERMINAL. */ - -#ifdef HAVE_X_WINDOWS -#include "xterm.h" -#endif /* HAVE_X_WINDOWS */ -#ifdef HAVE_NTGUI -#include "w32term.h" -#endif +#ifdef HAVE_WINDOW_SYSTEM +#include TERM_HEADER +#endif /* HAVE_WINDOW_SYSTEM */ #ifdef MSDOS #include "msdos.h" #endif -#ifdef HAVE_NS -#include "nsterm.h" -#endif Lisp_Object Qwindowp, Qwindow_live_p; static Lisp_Object Qwindow_valid_p; diff --git a/src/xdisp.c b/src/xdisp.c index d68362576fa..c096fcd340f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -299,19 +299,9 @@ along with GNU Emacs. If not, see . */ #include "font.h" #include "fontset.h" #include "blockinput.h" - -#ifdef HAVE_X_WINDOWS -#include "xterm.h" -#endif -#ifdef HAVE_NTGUI -#include "w32term.h" -#endif -#ifdef HAVE_NS -#include "nsterm.h" -#endif -#ifdef USE_GTK -#include "gtkutil.h" -#endif +#ifdef HAVE_WINDOW_SYSTEM +#include TERM_HEADER +#endif /* HAVE_WINDOW_SYSTEM */ #ifndef FRAME_X_OUTPUT #define FRAME_X_OUTPUT(f) ((f)->output_data.x) diff --git a/src/xfaces.c b/src/xfaces.c index 0a117b83c15..e8cb7a70322 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -211,13 +211,10 @@ along with GNU Emacs. If not, see . */ #include "frame.h" #include "termhooks.h" -#ifdef HAVE_X_WINDOWS -#include "xterm.h" #ifdef USE_MOTIF #include #include #endif /* USE_MOTIF */ -#endif /* HAVE_X_WINDOWS */ #ifdef MSDOS #include "dosfns.h" From c828af56439a823c5292839e59943e5b1f033bf6 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 5 Sep 2013 08:33:37 -0400 Subject: [PATCH 004/321] Add missing ChangeLog entry. --- lisp/ChangeLog | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 527f363362f..cd41db8708a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -59,6 +59,30 @@ 2013-09-04 Stefan Monnier + * vc/vc-dispatcher.el (vc-run-delayed): New macro. + (vc-do-command, vc-set-async-update): + * vc/vc-mtn.el (vc-mtn-dir-status): + * vc/vc-hg.el (vc-hg-dir-status, vc-hg-dir-status-files) + (vc-hg-pull, vc-hg-merge-branch): + * vc/vc-git.el (vc-git-dir-status-goto-stage, vc-git-pull) + (vc-git-merge-branch): + * vc/vc-cvs.el (vc-cvs-print-log, vc-cvs-dir-status) + (vc-cvs-dir-status-files): + * vc/vc-bzr.el (vc-bzr-pull, vc-bzr-merge-branch, vc-bzr-dir-status) + (vc-bzr-dir-status-files): + * vc/vc-arch.el (vc-arch-dir-status): Use vc-run-delayed. + * vc/vc-annotate.el: Use lexical-binding. + (vc-annotate-display-select, vc-annotate): Use vc-run-delayed. + (vc-sentinel-movepoint): Declare. + (vc-annotate): Don't use `goto-line'. + * vc/vc.el (vc-diff-internal): Prefer a closure to `(lambda...). + (vc-diff-internal, vc-log-internal-common): Use vc-run-delayed. + (vc-sentinel-movepoint): Declare. + * vc/vc-svn.el: Use lexical-binding. + (vc-svn-dir-status, vc-svn-dir-status-files): Use vc-run-delayed. + * vc/vc-sccs.el: + * vc/vc-rcs.el: Use lexical-binding. + * autorevert.el (auto-revert-notify-handler): Explicitly ignore `deleted'. Don't drop errors silently. From 1f896cb7ede7d658797737574b2d6b00d128a592 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Thu, 5 Sep 2013 16:05:01 +0300 Subject: [PATCH 005/321] * lisp/progmodes/ruby-mode.el (ruby-font-lock-keywords): Move "Perl-ish keywords" below "here-doc beginnings". Fixes: debbugs:15270 --- lisp/ChangeLog | 5 +++++ lisp/progmodes/ruby-mode.el | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cd41db8708a..6929d80653e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-05 Dmitry Gutov + + * progmodes/ruby-mode.el (ruby-font-lock-keywords): Move "Perl-ish + keywords" below "here-doc beginnings" (Bug#15270). + 2013-09-05 Stefan Monnier * subr.el (pop): Use `car-safe'. diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index acc7738ae5c..0f868255589 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1862,11 +1862,11 @@ See `font-lock-syntax-table'.") "using") 'symbols)) 1 'font-lock-builtin-face) - ;; Perl-ish keywords - "\\_<\\(?:BEGIN\\|END\\)\\_>\\|^__END__$" ;; here-doc beginnings `(,ruby-here-doc-beg-re 0 (unless (ruby-singleton-class-p (match-beginning 0)) 'font-lock-string-face)) + ;; Perl-ish keywords + "\\_<\\(?:BEGIN\\|END\\)\\_>\\|^__END__$" ;; variables `(,(concat ruby-font-lock-keyword-beg-re "\\_<\\(nil\\|self\\|true\\|false\\)\\>") From b969582835bb7d6085a802322c77150fe559960e Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Thu, 5 Sep 2013 20:25:20 +0400 Subject: [PATCH 006/321] Cache current header and mode line height for each window. * window.h (struct window): New fields mode_line_height and header_line_height. * window.c (make_window): Initialize them. * dispextern.h (CURRENT_MODE_LINE_HEIGHT) (CURRENT_HEADER_LINE_HEIGHT): Use them. Adjust comment. (current_mode_line_height, current_header_line_height): Remove declaration. * xdisp.c (current_mode_line_height, current_header_line_height): Remove. (pos_visible_p, init_xdisp): Adjust user. (redisplay_window): Invalidate mode_line_height and header_line_height if current and desired matrices do not agree. --- src/ChangeLog | 16 ++++++++++++++++ src/dispextern.h | 43 +++++++++++++++++++++---------------------- src/window.c | 1 + src/window.h | 6 ++++++ src/xdisp.c | 16 ++++------------ 5 files changed, 48 insertions(+), 34 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index d4a7abefd57..898fbd8ab88 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,19 @@ +2013-09-05 Dmitry Antipov + + Cache current header and mode line height for each window. + * window.h (struct window): New fields mode_line_height + and header_line_height. + * window.c (make_window): Initialize them. + * dispextern.h (CURRENT_MODE_LINE_HEIGHT) + (CURRENT_HEADER_LINE_HEIGHT): Use them. Adjust comment. + (current_mode_line_height, current_header_line_height): + Remove declaration. + * xdisp.c (current_mode_line_height, current_header_line_height): + Remove. + (pos_visible_p, init_xdisp): Adjust user. + (redisplay_window): Invalidate mode_line_height and + header_line_height if current and desired matrices do not agree. + 2013-09-05 Dmitry Antipov * fontset.c, window.c, xdisp.c (toplevel): Use TERM_HEADER. diff --git a/src/dispextern.h b/src/dispextern.h index 947e50fa4dd..ebb07c1d37f 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1428,31 +1428,31 @@ struct glyph_string #define CURRENT_MODE_LINE_FACE_ID(W) \ (CURRENT_MODE_LINE_FACE_ID_3((W), XWINDOW (selected_window), (W))) -/* Return the current height of the mode line of window W. If not - known from current_mode_line_height, look at W's current glyph - matrix, or return a default based on the height of the font of the - face `mode-line'. */ +/* Return the current height of the mode line of window W. If not known + from W->mode_line_height, look at W's current glyph matrix, or return + a default based on the height of the font of the face `mode-line'. */ -#define CURRENT_MODE_LINE_HEIGHT(W) \ - (current_mode_line_height >= 0 \ - ? current_mode_line_height \ - : (MATRIX_MODE_LINE_HEIGHT ((W)->current_matrix) \ - ? MATRIX_MODE_LINE_HEIGHT ((W)->current_matrix) \ - : estimate_mode_line_height (XFRAME ((W)->frame), \ - CURRENT_MODE_LINE_FACE_ID (W)))) +#define CURRENT_MODE_LINE_HEIGHT(W) \ + (W->mode_line_height >= 0 \ + ? W->mode_line_height \ + : (W->mode_line_height \ + = (MATRIX_MODE_LINE_HEIGHT (W->current_matrix) \ + ? MATRIX_MODE_LINE_HEIGHT (W->current_matrix) \ + : estimate_mode_line_height \ + (XFRAME (W->frame), CURRENT_MODE_LINE_FACE_ID (W))))) -/* Return the current height of the header line of window W. If not - known from current_header_line_height, look at W's current glyph - matrix, or return an estimation based on the height of the font of - the face `header-line'. */ +/* Return the current height of the header line of window W. If not known + from W->header_line_height, look at W's current glyph matrix, or return + an estimation based on the height of the font of the face `header-line'. */ #define CURRENT_HEADER_LINE_HEIGHT(W) \ - (current_header_line_height >= 0 \ - ? current_header_line_height \ - : (MATRIX_HEADER_LINE_HEIGHT ((W)->current_matrix) \ - ? MATRIX_HEADER_LINE_HEIGHT ((W)->current_matrix) \ - : estimate_mode_line_height (XFRAME ((W)->frame), \ - HEADER_LINE_FACE_ID))) + (W->header_line_height >= 0 \ + ? W->header_line_height \ + : (W->header_line_height \ + = (MATRIX_HEADER_LINE_HEIGHT (W->current_matrix) \ + ? MATRIX_HEADER_LINE_HEIGHT (W->current_matrix) \ + : estimate_mode_line_height \ + (XFRAME (W->frame), HEADER_LINE_FACE_ID)))) /* Return the height of the desired mode line of window W. */ @@ -3201,7 +3201,6 @@ int frame_mode_line_height (struct frame *); extern Lisp_Object Qtool_bar; extern bool redisplaying_p; extern int help_echo_showing_p; -extern int current_mode_line_height, current_header_line_height; extern Lisp_Object help_echo_string, help_echo_window; extern Lisp_Object help_echo_object, previous_help_echo_string; extern ptrdiff_t help_echo_pos; diff --git a/src/window.c b/src/window.c index d8a6976e090..253e6233fc1 100644 --- a/src/window.c +++ b/src/window.c @@ -3419,6 +3419,7 @@ make_window (void) non-Lisp data, so do it only for slots which should not be zero. */ w->nrows_scale_factor = w->ncols_scale_factor = 1; w->left_fringe_width = w->right_fringe_width = -1; + w->mode_line_height = w->header_line_height = -1; w->phys_cursor_type = -1; w->phys_cursor_width = -1; w->scroll_bar_width = -1; diff --git a/src/window.h b/src/window.h index efe03737052..f5ae81149b3 100644 --- a/src/window.h +++ b/src/window.h @@ -264,6 +264,12 @@ struct window A value of -1 means use frame values. */ int scroll_bar_width; + /* Effective height of the mode line, or -1 if not known. */ + int mode_line_height; + + /* Effective height of the header line, or -1 if not known. */ + int header_line_height; + /* Z - the buffer position of the last glyph in the current matrix of W. Only valid if window_end_valid is nonzero. */ ptrdiff_t window_end_pos; diff --git a/src/xdisp.c b/src/xdisp.c index c096fcd340f..74491a40d74 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -573,12 +573,6 @@ static int last_height; int help_echo_showing_p; -/* If >= 0, computed, exact values of mode-line and header-line height - to use in the macros CURRENT_MODE_LINE_HEIGHT and - CURRENT_HEADER_LINE_HEIGHT. */ - -int current_mode_line_height, current_header_line_height; - /* The maximum distance to look ahead for text properties. Values that are too small let us call compute_char_face and similar functions too often which is expensive. Values that are too large @@ -1349,12 +1343,12 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y, /* Compute exact mode line heights. */ if (WINDOW_WANTS_MODELINE_P (w)) - current_mode_line_height + w->mode_line_height = display_mode_line (w, CURRENT_MODE_LINE_FACE_ID (w), BVAR (current_buffer, mode_line_format)); if (WINDOW_WANTS_HEADER_LINE_P (w)) - current_header_line_height + w->header_line_height = display_mode_line (w, HEADER_LINE_FACE_ID, BVAR (current_buffer, header_line_format)); @@ -1647,8 +1641,6 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y, if (old_buffer) set_buffer_internal_1 (old_buffer); - current_header_line_height = current_mode_line_height = -1; - if (visible_p && w->hscroll > 0) *x -= window_hscroll_limited (w, WINDOW_XFRAME (w)) @@ -16107,6 +16099,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p) && CURRENT_MODE_LINE_HEIGHT (w) != DESIRED_MODE_LINE_HEIGHT (w)) { fonts_changed_p = 1; + w->mode_line_height = -1; MATRIX_MODE_LINE_ROW (w->current_matrix)->height = DESIRED_MODE_LINE_HEIGHT (w); } @@ -16117,6 +16110,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p) && CURRENT_HEADER_LINE_HEIGHT (w) != DESIRED_HEADER_LINE_HEIGHT (w)) { fonts_changed_p = 1; + w->header_line_height = -1; MATRIX_HEADER_LINE_ROW (w->current_matrix)->height = DESIRED_HEADER_LINE_HEIGHT (w); } @@ -29686,8 +29680,6 @@ Its value should be an ASCII acronym string, `hex-code', `empty-box', or void init_xdisp (void) { - current_header_line_height = current_mode_line_height = -1; - CHARPOS (this_line_start_pos) = 0; if (!noninteractive) From 397853249c7edc25dac2f6f2b9705fedb706916a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 5 Sep 2013 21:38:45 -0400 Subject: [PATCH 007/321] * lisp/replace.el (replace-string): Doc fix re start/end. Fixes: debbugs:15275 --- lisp/ChangeLog | 4 ++++ lisp/replace.el | 9 +++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6929d80653e..cfee5834fe3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-06 Glenn Morris + + * replace.el (replace-string): Doc fix re start/end. (Bug#15275) + 2013-09-05 Dmitry Gutov * progmodes/ruby-mode.el (ruby-font-lock-keywords): Move "Perl-ish diff --git a/lisp/replace.el b/lisp/replace.el index 5e44677b0f8..abb59a674e3 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -490,12 +490,13 @@ If `replace-lax-whitespace' is non-nil, a space or spaces in the string to be replaced will match a sequence of whitespace chars defined by the regexp in `search-whitespace-regexp'. -In Transient Mark mode, if the mark is active, operate on the contents -of the region. Otherwise, operate from point to the end of the buffer. - Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace only matches surrounded by word boundaries. -Fourth and fifth arg START and END specify the region to operate on. + +Operates on the region between START and END (if both are nil, from point +to the end of the buffer). Interactively, if Transient Mark mode is +enabled and the mark is active, operates on the contents of the region; +otherwise from point to the end of the buffer. Use \\\\[next-history-element] \ to pull the last incremental search string to the minibuffer From bd0443bb8799b908cefd0b11c86db6115180850d Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 6 Sep 2013 11:00:29 +0400 Subject: [PATCH 008/321] Attempt to make redisplay more selective when changing fonts. * frame.h (struct frame): New bitfield fonts_changed. * dispextern.h (fonts_changed_p, adjust_glyphs): Remove declaration. (adjust_frame_glyphs): Add prototype. * dispnew.c (fonts_changed_p): Remove. (adjust_glyphs): Remove becase we do not adjust matrices on all frames at once any more. (adjust_frame_glyphs): Block and unblock input here. (adjust_glyph_matrix): Use fonts_changed. (change_frame_size_1): Use adjust_frame_glyphs. * font.c (font_open_entity): Use fonts_changed. * frame.c (set_menu_bar_lines, Fmake_terminal_frame): * w32fns.c (x_set_menu_bar_lines, x_set_tool_bar_lines, Fx_show_tip): * window.c (Fdelete_other_windows_internal, Fwindow_resize_apply) (Fsplit_window_internal, Fdelete_window_internal, grow_mini_window) (shrink_mini_window, Fresize_mini_window_internal) (window_scroll_pixel_based, Fset_window_configuration) (apply_window_adjustment, Fset_window_vscroll): * xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines, Fx_show_tip): Use adjust_frame_glyphs. * xdisp.c (redisplay_tool_bar, redisplay_window, try_window) (try_window_reusing_current_matrix, try_window_id, display_line) (IT_EXPAND_MATRIX_WIDTH): Use fonts_changed. (redisplay_internal): Consider fonts_changed and adjust frame matrices for each frame only if the frame is visible. If font has been changed on some frame during full redisplay, retry only visible frames where the font has been actually changed. --- src/ChangeLog | 30 ++++++++++++++++ src/dispextern.h | 8 +---- src/dispnew.c | 45 +++++------------------- src/font.c | 6 ++-- src/frame.c | 4 +-- src/frame.h | 4 +++ src/w32fns.c | 8 ++--- src/window.c | 22 ++++++------ src/xdisp.c | 90 +++++++++++++++++++++++------------------------- src/xfns.c | 8 ++--- 10 files changed, 111 insertions(+), 114 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 898fbd8ab88..00cde7461c4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,33 @@ +2013-09-06 Dmitry Antipov + + Attempt to make redisplay more selective when changing fonts. + * frame.h (struct frame): New bitfield fonts_changed. + * dispextern.h (fonts_changed_p, adjust_glyphs): Remove declaration. + (adjust_frame_glyphs): Add prototype. + * dispnew.c (fonts_changed_p): Remove. + (adjust_glyphs): Remove becase we do not + adjust matrices on all frames at once any more. + (adjust_frame_glyphs): Block and unblock input here. + (adjust_glyph_matrix): Use fonts_changed. + (change_frame_size_1): Use adjust_frame_glyphs. + * font.c (font_open_entity): Use fonts_changed. + * frame.c (set_menu_bar_lines, Fmake_terminal_frame): + * w32fns.c (x_set_menu_bar_lines, x_set_tool_bar_lines, Fx_show_tip): + * window.c (Fdelete_other_windows_internal, Fwindow_resize_apply) + (Fsplit_window_internal, Fdelete_window_internal, grow_mini_window) + (shrink_mini_window, Fresize_mini_window_internal) + (window_scroll_pixel_based, Fset_window_configuration) + (apply_window_adjustment, Fset_window_vscroll): + * xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines, Fx_show_tip): + Use adjust_frame_glyphs. + * xdisp.c (redisplay_tool_bar, redisplay_window, try_window) + (try_window_reusing_current_matrix, try_window_id, display_line) + (IT_EXPAND_MATRIX_WIDTH): Use fonts_changed. + (redisplay_internal): Consider fonts_changed and adjust frame + matrices for each frame only if the frame is visible. If font + has been changed on some frame during full redisplay, retry + only visible frames where the font has been actually changed. + 2013-09-05 Dmitry Antipov Cache current header and mode line height for each window. diff --git a/src/dispextern.h b/src/dispextern.h index ebb07c1d37f..864229e1d04 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1195,12 +1195,6 @@ struct glyph_row *matrix_row (struct glyph_matrix *, int); ((ROW)->phys_height - (ROW)->phys_ascent \ > (ROW)->height - (ROW)->ascent) -/* True means that fonts have been loaded since the last glyph - matrix adjustments. The function redisplay_internal adjusts glyph - matrices when this flag is true. */ - -extern bool fonts_changed_p; - /* A glyph for a space. */ extern struct glyph space_glyph; @@ -3454,7 +3448,7 @@ extern void cancel_line (int, struct frame *); extern void init_desired_glyphs (struct frame *); extern bool update_frame (struct frame *, bool, bool); extern void bitch_at_user (void); -void adjust_glyphs (struct frame *); +extern void adjust_frame_glyphs (struct frame *); void free_glyphs (struct frame *); void free_window_matrices (struct window *); void check_glyph_memory (void); diff --git a/src/dispnew.c b/src/dispnew.c index 1d7cad13e6d..00abf65248c 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -77,7 +77,6 @@ struct dim static void update_frame_line (struct frame *, int); static int required_matrix_height (struct window *); static int required_matrix_width (struct window *); -static void adjust_frame_glyphs (struct frame *); static void change_frame_size_1 (struct frame *, int, int, bool, bool, bool); static void increment_row_positions (struct glyph_row *, ptrdiff_t, ptrdiff_t); static void fill_up_frame_row_with_spaces (struct glyph_row *, int); @@ -152,16 +151,6 @@ static int glyph_pool_count; static struct frame *frame_matrix_frame; -/* True means that fonts have been loaded since the last glyph - matrix adjustments. Redisplay must stop, and glyph matrices must - be adjusted when this flag becomes true during display. The - reason fonts can be loaded so late is that fonts of fontsets are - loaded on demand. Another reason is that a line contains many - characters displayed by zero width or very narrow glyphs of - variable-width fonts. */ - -bool fonts_changed_p; - /* Convert vpos and hpos from frame to window and vice versa. This may only be used for terminal frames. */ @@ -433,7 +422,7 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y || right != matrix->right_margin_glyphs); if (!marginal_areas_changed_p - && !fonts_changed_p + && !XFRAME (w->frame)->fonts_changed && !header_line_changed_p && matrix->window_left_col == WINDOW_LEFT_EDGE_COL (w) && matrix->window_top_line == WINDOW_TOP_EDGE_LINE (w) @@ -1799,37 +1788,17 @@ allocate_matrices_for_window_redisplay (struct window *w) } } - -/* Re-allocate/ re-compute glyph matrices on frame F. If F is null, - do it for all frames; otherwise do it just for the given frame. - This function must be called when a new frame is created, its size - changes, or its window configuration changes. */ +/* Allocate/reallocate glyph matrices of a single frame F. + This function must be called when a new frame is created, + its size changes, or its window configuration changes. */ void -adjust_glyphs (struct frame *f) +adjust_frame_glyphs (struct frame *f) { /* Block input so that expose events and other events that access glyph matrices are not processed while we are changing them. */ block_input (); - if (f) - adjust_frame_glyphs (f); - else - { - Lisp_Object tail, lisp_frame; - - FOR_EACH_FRAME (tail, lisp_frame) - adjust_frame_glyphs (XFRAME (lisp_frame)); - } - - unblock_input (); -} - -/* Allocate/reallocate glyph matrices of a single frame F. */ - -static void -adjust_frame_glyphs (struct frame *f) -{ if (FRAME_WINDOW_P (f)) adjust_frame_glyphs_for_window_redisplay (f); else @@ -1839,6 +1808,8 @@ adjust_frame_glyphs (struct frame *f) adjust_decode_mode_spec_buffer (f); f->glyphs_initialized_p = 1; + + unblock_input (); } /* Return true if any window in the tree has nonzero window margins. See @@ -5546,7 +5517,7 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth, w->cursor.vpos = w->cursor.y = 0; } - adjust_glyphs (f); + adjust_frame_glyphs (f); calculate_costs (f); SET_FRAME_GARBAGED (f); f->resized_p = 1; diff --git a/src/font.c b/src/font.c index 49398e1b876..2606a25dff8 100644 --- a/src/font.c +++ b/src/font.c @@ -2866,14 +2866,14 @@ font_open_entity (struct frame *f, Lisp_Object entity, int pixel_size) { FRAME_SMALLEST_CHAR_WIDTH (f) = min_width; FRAME_SMALLEST_FONT_HEIGHT (f) = height; - fonts_changed_p = 1; + f->fonts_changed = 1; } else { if (FRAME_SMALLEST_CHAR_WIDTH (f) > min_width) - FRAME_SMALLEST_CHAR_WIDTH (f) = min_width, fonts_changed_p = 1; + FRAME_SMALLEST_CHAR_WIDTH (f) = min_width, f->fonts_changed = 1; if (FRAME_SMALLEST_FONT_HEIGHT (f) > height) - FRAME_SMALLEST_FONT_HEIGHT (f) = height, fonts_changed_p = 1; + FRAME_SMALLEST_FONT_HEIGHT (f) = height, f->fonts_changed = 1; } #endif diff --git a/src/frame.c b/src/frame.c index b4638ed53c8..0f1560df157 100644 --- a/src/frame.c +++ b/src/frame.c @@ -224,7 +224,7 @@ set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) FRAME_WINDOW_SIZES_CHANGED (f) = 1; FRAME_MENU_BAR_LINES (f) = nlines; set_menu_bar_lines_1 (f->root_window, nlines - olines); - adjust_glyphs (f); + adjust_frame_glyphs (f); } } @@ -712,7 +712,7 @@ affects all frames on the same terminal device. */) change_frame_size (f, height, width, 0, 0, 0); } - adjust_glyphs (f); + adjust_frame_glyphs (f); calculate_costs (f); XSETFRAME (frame, f); diff --git a/src/frame.h b/src/frame.h index 17b6089120a..3c7499ea814 100644 --- a/src/frame.h +++ b/src/frame.h @@ -210,6 +210,10 @@ struct frame unsigned external_tool_bar : 1; #endif + /* Nonzero means that fonts have been loaded since the last glyph + matrix adjustments. */ + unsigned fonts_changed : 1; + /* Margin at the top of the frame. Used to display the tool-bar. */ int tool_bar_lines; diff --git a/src/w32fns.c b/src/w32fns.c index b8c445a3a36..58c63d959ef 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -1637,7 +1637,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) x_set_window_size (f, 0, FRAME_COLS (f), FRAME_LINES (f)); do_pending_window_change (0); } - adjust_glyphs (f); + adjust_frame_glyphs (f); } @@ -1679,7 +1679,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) FRAME_TOOL_BAR_LINES (f) = nlines; resize_frame_windows (f, FRAME_LINES (f), 0); - adjust_glyphs (f); + adjust_frame_glyphs (f); /* We also have to make sure that the internal border at the top of the frame, below the menu bar or tool bar, is redrawn when the @@ -6059,7 +6059,7 @@ Text larger than the specified size is clipped. */) } FRAME_TOTAL_COLS (f) = WINDOW_TOTAL_COLS (w); - adjust_glyphs (f); + adjust_frame_glyphs (f); w->pseudo_window_p = 1; /* Display the tooltip text in a temporary buffer. */ @@ -6128,7 +6128,7 @@ Text larger than the specified size is clipped. */) width /= WINDOW_FRAME_COLUMN_WIDTH (w); w->total_cols = width; FRAME_TOTAL_COLS (f) = width; - adjust_glyphs (f); + adjust_frame_glyphs (f); w->pseudo_window_p = 1; clear_glyph_matrix (w->desired_matrix); clear_glyph_matrix (w->current_matrix); diff --git a/src/window.c b/src/window.c index 253e6233fc1..6a52ed7e166 100644 --- a/src/window.c +++ b/src/window.c @@ -2945,7 +2945,7 @@ window-start value is reasonable when this function is called. */) } } - adjust_glyphs (f); + adjust_frame_glyphs (f); unblock_input (); run_window_configuration_change_hook (f); @@ -3645,7 +3645,7 @@ be applied on the Elisp level. */) windows_or_buffers_changed++; FRAME_WINDOW_SIZES_CHANGED (f) = 1; - adjust_glyphs (f); + adjust_frame_glyphs (f); unblock_input (); run_window_configuration_change_hook (f); @@ -3915,7 +3915,7 @@ set correctly. See the code of `split-window' for how this is done. */) block_input (); window_resize_apply (p, horflag); - adjust_glyphs (f); + adjust_frame_glyphs (f); /* Set buffer of NEW to buffer of reference window. Don't run any hooks. */ set_window_buffer (new, r->contents, 0, 1); @@ -4044,7 +4044,7 @@ Signal an error when WINDOW is the only window on its frame. */) recombine_windows (sibling); } - adjust_glyphs (f); + adjust_frame_glyphs (f); if (!WINDOW_LIVE_P (FRAME_SELECTED_WINDOW (f))) /* We deleted the frame's selected window. */ @@ -4131,7 +4131,7 @@ grow_mini_window (struct window *w, int delta) w->total_lines -= XINT (value); /* Enforce full redisplay. FIXME: make it more selective. */ windows_or_buffers_changed++; - adjust_glyphs (f); + adjust_frame_glyphs (f); unblock_input (); } } @@ -4165,7 +4165,7 @@ shrink_mini_window (struct window *w) w->total_lines = 1; /* Enforce full redisplay. FIXME: make it more selective. */ windows_or_buffers_changed++; - adjust_glyphs (f); + adjust_frame_glyphs (f); unblock_input (); } /* If the above failed for whatever strange reason we must make a @@ -4206,7 +4206,7 @@ DEFUN ("resize-mini-window-internal", Fresize_mini_window_internal, Sresize_mini windows_or_buffers_changed++; FRAME_WINDOW_SIZES_CHANGED (f) = 1; - adjust_glyphs (f); + adjust_frame_glyphs (f); unblock_input (); run_window_configuration_change_hook (f); @@ -4477,7 +4477,7 @@ window_scroll_pixel_based (Lisp_Object window, int n, bool whole, int noerror) visible. */ w->vscroll = (it.last_visible_y - it.current_y + it.max_ascent + it.max_descent); - adjust_glyphs (it.f); + adjust_frame_glyphs (it.f); } else { @@ -5754,7 +5754,7 @@ the return value is nil. Otherwise the value is t. */) ++n; } - adjust_glyphs (f); + adjust_frame_glyphs (f); unblock_input (); /* Scan dead buffer windows. */ @@ -6083,7 +6083,7 @@ apply_window_adjustment (struct window *w) clear_glyph_matrix (w->current_matrix); w->window_end_valid = 0; windows_or_buffers_changed++; - adjust_glyphs (XFRAME (WINDOW_FRAME (w))); + adjust_frame_glyphs (XFRAME (WINDOW_FRAME (w))); } @@ -6349,7 +6349,7 @@ If PIXELS-P is non-nil, the return value is VSCROLL. */) /* Adjust glyph matrix of the frame if the virtual display area becomes larger than before. */ if (w->vscroll < 0 && w->vscroll < old_dy) - adjust_glyphs (f); + adjust_frame_glyphs (f); /* Prevent redisplay shortcuts. */ XBUFFER (w->contents)->prevent_redisplay_optimizations_p = 1; diff --git a/src/xdisp.c b/src/xdisp.c index 74491a40d74..36f7f1e503e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11985,7 +11985,7 @@ redisplay_tool_bar (struct frame *f) if (WINDOW_TOTAL_LINES (w) != old_height) { clear_glyph_matrix (w->desired_matrix); - fonts_changed_p = 1; + f->fonts_changed = 1; return 1; } } @@ -12086,7 +12086,7 @@ redisplay_tool_bar (struct frame *f) { clear_glyph_matrix (w->desired_matrix); f->n_tool_bar_rows = nrows; - fonts_changed_p = 1; + f->fonts_changed = 1; return 1; } } @@ -12972,15 +12972,6 @@ redisplay_internal (void) last_glyphless_glyph_frame = NULL; last_glyphless_glyph_face_id = (1 << FACE_ID_BITS); - /* If new fonts have been loaded that make a glyph matrix adjustment - necessary, do it. */ - if (fonts_changed_p) - { - adjust_glyphs (NULL); - ++windows_or_buffers_changed; - fonts_changed_p = 0; - } - /* If face_change_count is non-zero, init_iterator will free all realized faces, which includes the faces referenced from current matrices. So, we can't reuse current matrices in this case. */ @@ -13011,7 +13002,15 @@ redisplay_internal (void) struct frame *f = XFRAME (frame); if (FRAME_VISIBLE_P (f)) - ++number_of_visible_frames; + { + ++number_of_visible_frames; + /* Adjust matrices for visible frames only. */ + if (f->fonts_changed) + { + adjust_frame_glyphs (f); + f->fonts_changed = 0; + } + } clear_desired_matrices (f); } @@ -13095,9 +13094,7 @@ redisplay_internal (void) if (!display_last_displayed_message_p) message_cleared_p = 0; - if (fonts_changed_p) - goto retry; - else if (window_height_changed_p) + if (window_height_changed_p) { consider_all_windows_p = 1; ++update_mode_lines; @@ -13372,6 +13369,8 @@ redisplay_internal (void) && !EQ (FRAME_TTY (f)->top_frame, frame)) continue; + retry_frame: + if (FRAME_WINDOW_P (f) || FRAME_TERMCAP_P (f) || f == sf) { /* Mark all the scroll bars to be removed; we'll redeem @@ -13391,20 +13390,22 @@ redisplay_internal (void) if (FRAME_TERMINAL (f)->judge_scroll_bars_hook) FRAME_TERMINAL (f)->judge_scroll_bars_hook (f); - /* If fonts changed, display again. */ - /* ??? rms: I suspect it is a mistake to jump all the way - back to retry here. It should just retry this frame. */ - if (fonts_changed_p) - goto retry; - if (FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f)) { + /* If fonts changed on visible frame, display again. */ + if (f->fonts_changed) + { + adjust_frame_glyphs (f); + f->fonts_changed = 0; + goto retry_frame; + } + /* See if we have to hscroll. */ if (!f->already_hscrolled_p) { f->already_hscrolled_p = 1; if (hscroll_windows (f->root_window)) - goto retry; + goto retry_frame; } /* Prevent various kinds of signals during display @@ -13462,7 +13463,7 @@ redisplay_internal (void) update: /* If fonts changed, display again. */ - if (fonts_changed_p) + if (sf->fonts_changed) goto retry; /* Prevent various kinds of signals during display update. @@ -15322,9 +15323,8 @@ set_vertical_scroll_bar (struct window *w) /* Redisplay leaf window WINDOW. JUST_THIS_ONE_P non-zero means only selected_window is redisplayed. - We can return without actually redisplaying the window if - fonts_changed_p. In that case, redisplay_internal will - retry. */ + We can return without actually redisplaying the window if fonts has been + changed on window's frame. In that case, redisplay_internal will retry. */ static void redisplay_window (Lisp_Object window, int just_this_one_p) @@ -15709,7 +15709,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p) debug_method_add (w, "try_window_id %d", tem); #endif - if (fonts_changed_p) + if (f->fonts_changed) goto need_larger_matrices; if (tem > 0) goto done; @@ -15779,12 +15779,12 @@ redisplay_window (Lisp_Object window, int just_this_one_p) IF_DEBUG (debug_method_add (w, "1")); if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS) < 0) /* -1 means we need to scroll. - 0 means we need new matrices, but fonts_changed_p + 0 means we need new matrices, but fonts_changed is set in that case, so we will detect it below. */ goto try_to_scroll; } - if (fonts_changed_p) + if (f->fonts_changed) goto need_larger_matrices; if (w->cursor.vpos >= 0) @@ -15985,7 +15985,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p) /* If new fonts have been loaded (due to fontsets), give up. We have to start a new redisplay since we need to re-adjust glyph matrices. */ - if (fonts_changed_p) + if (f->fonts_changed) goto need_larger_matrices; /* If cursor did not appear assume that the middle of the window is @@ -16098,7 +16098,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p) if (WINDOW_WANTS_MODELINE_P (w) && CURRENT_MODE_LINE_HEIGHT (w) != DESIRED_MODE_LINE_HEIGHT (w)) { - fonts_changed_p = 1; + f->fonts_changed = 1; w->mode_line_height = -1; MATRIX_MODE_LINE_ROW (w->current_matrix)->height = DESIRED_MODE_LINE_HEIGHT (w); @@ -16109,13 +16109,13 @@ redisplay_window (Lisp_Object window, int just_this_one_p) if (WINDOW_WANTS_HEADER_LINE_P (w) && CURRENT_HEADER_LINE_HEIGHT (w) != DESIRED_HEADER_LINE_HEIGHT (w)) { - fonts_changed_p = 1; + f->fonts_changed = 1; w->header_line_height = -1; MATRIX_HEADER_LINE_ROW (w->current_matrix)->height = DESIRED_HEADER_LINE_HEIGHT (w); } - if (fonts_changed_p) + if (f->fonts_changed) goto need_larger_matrices; } @@ -16180,8 +16180,8 @@ redisplay_window (Lisp_Object window, int just_this_one_p) } #endif /* HAVE_WINDOW_SYSTEM */ - /* We go to this label, with fonts_changed_p set, - if it is necessary to try again using larger glyph matrices. + /* We go to this label, with fonts_changed set, if it is + necessary to try again using larger glyph matrices. We have to redeem the scroll bar even in this case, because the loop in redisplay_internal expects that. */ need_larger_matrices: @@ -16253,7 +16253,7 @@ try_window (Lisp_Object window, struct text_pos pos, int flags) { if (display_line (&it)) last_text_row = it.glyph_row - 1; - if (fonts_changed_p && !(flags & TRY_WINDOW_IGNORE_FONTS_CHANGE)) + if (f->fonts_changed && !(flags & TRY_WINDOW_IGNORE_FONTS_CHANGE)) return 0; } @@ -16399,8 +16399,7 @@ try_window_reusing_current_matrix (struct window *w) w->cursor.vpos = -1; last_text_row = last_reused_text_row = NULL; - while (it.current_y < it.last_visible_y - && !fonts_changed_p) + while (it.current_y < it.last_visible_y && !f->fonts_changed) { /* If we have reached into the characters in the START row, that means the line boundaries have changed. So we @@ -16611,7 +16610,7 @@ try_window_reusing_current_matrix (struct window *w) if (pt_row == NULL) w->cursor.vpos = -1; last_text_row = NULL; - while (it.current_y < it.last_visible_y && !fonts_changed_p) + while (it.current_y < it.last_visible_y && !f->fonts_changed) if (display_line (&it)) last_text_row = it.glyph_row - 1; @@ -17454,7 +17453,7 @@ try_window_id (struct window *w) last_text_row = NULL; overlay_arrow_seen = 0; while (it.current_y < it.last_visible_y - && !fonts_changed_p + && !f->fonts_changed && (first_unchanged_at_end_row == NULL || IT_CHARPOS (it) < stop_pos)) { @@ -17462,7 +17461,7 @@ try_window_id (struct window *w) last_text_row = it.glyph_row - 1; } - if (fonts_changed_p) + if (f->fonts_changed) return -1; @@ -17709,8 +17708,7 @@ try_window_id (struct window *w) /* Display the rest of the lines at the window end. */ it.glyph_row = MATRIX_ROW (desired_matrix, it.vpos); - while (it.current_y < it.last_visible_y - && !fonts_changed_p) + while (it.current_y < it.last_visible_y && !f->fonts_changed) { /* Is it always sure that the display agrees with lines in the current matrix? I don't think so, so we mark rows @@ -19246,7 +19244,7 @@ display_line (struct it *it) >= it->w->desired_matrix->nrows) { it->w->nrows_scale_factor++; - fonts_changed_p = 1; + it->f->fonts_changed = 1; return 0; } @@ -23974,12 +23972,12 @@ draw_glyphs (struct window *w, int x, struct glyph_row *row, #define IT_EXPAND_MATRIX_WIDTH(it, area) \ { \ - if (!fonts_changed_p \ + if (!it->f->fonts_changed \ && (it->glyph_row->glyphs[area] \ < it->glyph_row->glyphs[area + 1])) \ { \ it->w->ncols_scale_factor++; \ - fonts_changed_p = 1; \ + it->f->fonts_changed = 1; \ } \ } diff --git a/src/xfns.c b/src/xfns.c index b08fc76524c..4e8442dd3a3 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -1201,7 +1201,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix); } #endif /* not USE_X_TOOLKIT && not USE_GTK */ - adjust_glyphs (f); + adjust_frame_glyphs (f); run_window_configuration_change_hook (f); } @@ -1264,7 +1264,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) FRAME_TOOL_BAR_LINES (f) = nlines; resize_frame_windows (f, FRAME_LINES (f), 0); - adjust_glyphs (f); + adjust_frame_glyphs (f); /* We also have to make sure that the internal border at the top of the frame, below the menu bar or tool bar, is redrawn when the @@ -5486,7 +5486,7 @@ Text larger than the specified size is clipped. */) } FRAME_TOTAL_COLS (f) = w->total_cols; - adjust_glyphs (f); + adjust_frame_glyphs (f); w->pseudo_window_p = 1; /* Display the tooltip text in a temporary buffer. */ @@ -5554,7 +5554,7 @@ Text larger than the specified size is clipped. */) width /= WINDOW_FRAME_COLUMN_WIDTH (w); w->total_cols = width; FRAME_TOTAL_COLS (f) = width; - adjust_glyphs (f); + adjust_frame_glyphs (f); clear_glyph_matrix (w->desired_matrix); clear_glyph_matrix (w->current_matrix); try_window (FRAME_ROOT_WINDOW (f), pos, 0); From 8bda01d3a53b0a002ccd096afbdc1150bb3d1d86 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 6 Sep 2013 11:08:19 +0400 Subject: [PATCH 009/321] Fix ChangeLog typo. --- src/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 00cde7461c4..e7ac61b4fb4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -5,7 +5,7 @@ * dispextern.h (fonts_changed_p, adjust_glyphs): Remove declaration. (adjust_frame_glyphs): Add prototype. * dispnew.c (fonts_changed_p): Remove. - (adjust_glyphs): Remove becase we do not + (adjust_glyphs): Remove because we do not adjust matrices on all frames at once any more. (adjust_frame_glyphs): Block and unblock input here. (adjust_glyph_matrix): Use fonts_changed. From 1486fa3149caaf94f0fa88b91fa9fe6616c67ea1 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 6 Sep 2013 10:23:30 +0200 Subject: [PATCH 010/321] Remove URL syntax. * net/tramp.el (tramp-syntax, tramp-prefix-format) (tramp-postfix-method-format, tramp-prefix-ipv6-format) (tramp-postfix-ipv6-format, tramp-prefix-port-format) (tramp-postfix-host-format, tramp-file-name-regexp) (tramp-completion-file-name-regexp) (tramp-completion-dissect-file-name) (tramp-handle-substitute-in-file-name): Remove 'url case. (tramp-file-name-regexp-url) (tramp-completion-file-name-regexp-url): Remove constants. --- lisp/ChangeLog | 14 ++++++ lisp/net/tramp.el | 107 +++++++++------------------------------------- 2 files changed, 35 insertions(+), 86 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cfee5834fe3..03352a93e6f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,17 @@ +2013-09-06 Michael Albinus + + Remove URL syntax. + + * net/tramp.el (tramp-syntax, tramp-prefix-format) + (tramp-postfix-method-format, tramp-prefix-ipv6-format) + (tramp-postfix-ipv6-format, tramp-prefix-port-format) + (tramp-postfix-host-format, tramp-file-name-regexp) + (tramp-completion-file-name-regexp) + (tramp-completion-dissect-file-name) + (tramp-handle-substitute-in-file-name): Remove 'url case. + (tramp-file-name-regexp-url) + (tramp-completion-file-name-regexp-url): Remove constants. + 2013-09-06 Glenn Morris * replace.el (replace-string): Doc fix re start/end. (Bug#15275) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 6c3ae376dc3..727536b2e10 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -690,7 +690,7 @@ Useful for \"rsync\" like methods.") ;; Tramp only knows how to deal with `file-name-handler-alist', not ;; the other places. -;; Currently, we have the choice between 'ftp, 'sep, and 'url. +;; Currently, we have the choice between 'ftp and 'sep. ;;;###autoload (defcustom tramp-syntax (if (featurep 'xemacs) 'sep 'ftp) @@ -699,20 +699,15 @@ Useful for \"rsync\" like methods.") It can have the following values: 'ftp -- Ange-FTP respective EFS like syntax (GNU Emacs default) - 'sep -- Syntax as defined for XEmacs (not available yet for GNU Emacs) - 'url -- URL-like syntax." + 'sep -- Syntax as defined for XEmacs." :group 'tramp - :type (if (featurep 'xemacs) - '(choice (const :tag "EFS" ftp) - (const :tag "XEmacs" sep) - (const :tag "URL" url)) - '(choice (const :tag "Ange-FTP" ftp) - (const :tag "URL" url)))) + :version "24.4" + :type `(choice (const :tag ,(if (featurep 'xemacs) "EFS" "Ange-FTP") ftp) + (const :tag "XEmacs" sep))) (defconst tramp-prefix-format (cond ((equal tramp-syntax 'ftp) "/") ((equal tramp-syntax 'sep) "/[") - ((equal tramp-syntax 'url) "/") (t (error "Wrong `tramp-syntax' defined"))) "String matching the very beginning of Tramp file names. Used in `tramp-make-tramp-file-name'.") @@ -729,7 +724,6 @@ Should always start with \"^\". Derived from `tramp-prefix-format'.") (defconst tramp-postfix-method-format (cond ((equal tramp-syntax 'ftp) ":") ((equal tramp-syntax 'sep) "/") - ((equal tramp-syntax 'url) "://") (t (error "Wrong `tramp-syntax' defined"))) "String matching delimiter between method and user or host names. Used in `tramp-make-tramp-file-name'.") @@ -776,7 +770,6 @@ Derived from `tramp-postfix-user-format'.") (defconst tramp-prefix-ipv6-format (cond ((equal tramp-syntax 'ftp) "[") ((equal tramp-syntax 'sep) "") - ((equal tramp-syntax 'url) "[") (t (error "Wrong `tramp-syntax' defined"))) "String matching left hand side of IPv6 addresses. Used in `tramp-make-tramp-file-name'.") @@ -796,7 +789,6 @@ Derived from `tramp-prefix-ipv6-format'.") (defconst tramp-postfix-ipv6-format (cond ((equal tramp-syntax 'ftp) "]") ((equal tramp-syntax 'sep) "") - ((equal tramp-syntax 'url) "]") (t (error "Wrong `tramp-syntax' defined"))) "String matching right hand side of IPv6 addresses. Used in `tramp-make-tramp-file-name'.") @@ -809,7 +801,6 @@ Derived from `tramp-postfix-ipv6-format'.") (defconst tramp-prefix-port-format (cond ((equal tramp-syntax 'ftp) "#") ((equal tramp-syntax 'sep) "#") - ((equal tramp-syntax 'url) ":") (t (error "Wrong `tramp-syntax' defined"))) "String matching delimiter between host names and port numbers.") @@ -838,7 +829,6 @@ Derived from `tramp-postfix-hop-format'.") (defconst tramp-postfix-host-format (cond ((equal tramp-syntax 'ftp) ":") ((equal tramp-syntax 'sep) "]") - ((equal tramp-syntax 'url) "") (t (error "Wrong `tramp-syntax' defined"))) "String matching delimiter between host names and localnames. Used in `tramp-make-tramp-file-name'.") @@ -908,16 +898,10 @@ On W32 systems, the volume letter must be ignored.") XEmacs uses a separate filename syntax for Tramp and EFS. See `tramp-file-name-structure' for more explanations.") -;;;###autoload -(defconst tramp-file-name-regexp-url "\\`/[^/|:]+://" - "Value for `tramp-file-name-regexp' for URL-like remoting. -See `tramp-file-name-structure' for more explanations.") - ;;;###autoload (defconst tramp-file-name-regexp (cond ((equal tramp-syntax 'ftp) tramp-file-name-regexp-unified) ((equal tramp-syntax 'sep) tramp-file-name-regexp-separate) - ((equal tramp-syntax 'url) tramp-file-name-regexp-url) (t (error "Wrong `tramp-syntax' defined"))) "Regular expression matching file names handled by Tramp. This regexp should match Tramp file names but no other file names. @@ -951,17 +935,10 @@ On W32 systems, the volume letter must be ignored.") XEmacs uses a separate filename syntax for Tramp and EFS. See `tramp-file-name-structure' for more explanations.") -;;;###autoload -(defconst tramp-completion-file-name-regexp-url - "\\`/[^/:]+\\(:\\(/\\(/[^/]*\\)?\\)?\\)?\\'" - "Value for `tramp-completion-file-name-regexp' for URL-like remoting. -See `tramp-file-name-structure' for more explanations.") - ;;;###autoload (defconst tramp-completion-file-name-regexp (cond ((equal tramp-syntax 'ftp) tramp-completion-file-name-regexp-unified) ((equal tramp-syntax 'sep) tramp-completion-file-name-regexp-separate) - ((equal tramp-syntax 'url) tramp-completion-file-name-regexp-url) (t (error "Wrong `tramp-syntax' defined"))) "Regular expression matching file names handled by Tramp completion. This regexp should match partial Tramp file names only. @@ -2542,64 +2519,40 @@ They are collected by `tramp-completion-dissect-file-name1'." tramp-prefix-ipv6-regexp "\\(" tramp-completion-ipv6-regexp x-nil "\\)$") nil 1 2 nil)) - ;; "/method:user" "/[method/user" "/method://user" + ;; "/method:user" "/[method/user" (tramp-completion-file-name-structure7 (list (concat tramp-prefix-regexp "\\(" tramp-method-regexp "\\)" tramp-postfix-method-regexp "\\(" tramp-user-regexp x-nil "\\)$") 1 2 nil nil)) - ;; "/method:host" "/[method/host" "/method://host" + ;; "/method:host" "/[method/host" (tramp-completion-file-name-structure8 (list (concat tramp-prefix-regexp "\\(" tramp-method-regexp "\\)" tramp-postfix-method-regexp "\\(" tramp-host-regexp x-nil "\\)$") 1 nil 2 nil)) - ;; "/method:[ipv6" "/[method/ipv6" "/method://[ipv6" + ;; "/method:[ipv6" "/[method/ipv6" (tramp-completion-file-name-structure9 (list (concat tramp-prefix-regexp "\\(" tramp-method-regexp "\\)" tramp-postfix-method-regexp tramp-prefix-ipv6-regexp "\\(" tramp-completion-ipv6-regexp x-nil "\\)$") 1 nil 2 nil)) - ;; "/method:user@host" "/[method/user@host" "/method://user@host" + ;; "/method:user@host" "/[method/user@host" (tramp-completion-file-name-structure10 (list (concat tramp-prefix-regexp "\\(" tramp-method-regexp "\\)" tramp-postfix-method-regexp "\\(" tramp-user-regexp "\\)" tramp-postfix-user-regexp "\\(" tramp-host-regexp x-nil "\\)$") 1 2 3 nil)) - ;; "/method:user@[ipv6" "/[method/user@ipv6" "/method://user@[ipv6" + ;; "/method:user@[ipv6" "/[method/user@ipv6" (tramp-completion-file-name-structure11 (list (concat tramp-prefix-regexp "\\(" tramp-method-regexp "\\)" tramp-postfix-method-regexp "\\(" tramp-user-regexp "\\)" tramp-postfix-user-regexp tramp-prefix-ipv6-regexp "\\(" tramp-completion-ipv6-regexp x-nil "\\)$") - 1 2 3 nil)) - ;; "/method: "/method:/" - (tramp-completion-file-name-structure12 - (list - (if (equal tramp-syntax 'url) - (concat tramp-prefix-regexp - "\\(" tramp-method-regexp "\\)" - "\\(" (substring tramp-postfix-method-regexp 0 1) - "\\|" (substring tramp-postfix-method-regexp 1 2) "\\)" - "\\(" "\\)$") - ;; Should not match if not URL syntax. - (concat tramp-prefix-regexp "/$")) - 1 3 nil nil)) - ;; "/method: "/method:/" - (tramp-completion-file-name-structure13 - (list - (if (equal tramp-syntax 'url) - (concat tramp-prefix-regexp - "\\(" tramp-method-regexp "\\)" - "\\(" (substring tramp-postfix-method-regexp 0 1) - "\\|" (substring tramp-postfix-method-regexp 1 2) "\\)" - "\\(" "\\)$") - ;; Should not match if not URL syntax. - (concat tramp-prefix-regexp "/$")) - 1 nil 3 nil))) + 1 2 3 nil))) (mapc (lambda (structure) (add-to-list 'result @@ -2616,8 +2569,6 @@ They are collected by `tramp-completion-dissect-file-name1'." tramp-completion-file-name-structure9 tramp-completion-file-name-structure10 tramp-completion-file-name-structure11 - tramp-completion-file-name-structure12 - tramp-completion-file-name-structure13 tramp-file-name-structure)) (delq nil result))) @@ -3289,35 +3240,19 @@ User is always nil." (defun tramp-handle-substitute-in-file-name (filename) "Like `substitute-in-file-name' for Tramp files. -\"//\" and \"/~\" substitute only in the local filename part. -If the URL Tramp syntax is chosen, \"//\" as method delimiter and \"/~\" at -beginning of local filename are not substituted." +\"//\" and \"/~\" substitute only in the local filename part." ;; First, we must replace environment variables. (setq filename (tramp-replace-environment-variables filename)) (with-parsed-tramp-file-name filename nil - (if (equal tramp-syntax 'url) - ;; We need to check localname only. The other parts cannot contain - ;; "//" or "/~". - (if (and (> (length localname) 1) - (or (string-match "//" localname) - (string-match "/~" localname 1))) - (tramp-run-real-handler 'substitute-in-file-name (list filename)) - (tramp-make-tramp-file-name - (when method (substitute-in-file-name method)) - (when user (substitute-in-file-name user)) - (when host (substitute-in-file-name host)) - (when localname - (tramp-run-real-handler - 'substitute-in-file-name (list localname))))) - ;; Ignore in LOCALNAME everything before "//" or "/~". - (when (and (stringp localname) (string-match ".+?/\\(/\\|~\\)" localname)) - (setq filename - (concat (file-remote-p filename) - (replace-match "\\1" nil nil localname))) - ;; "/m:h:~" does not work for completion. We use "/m:h:~/". - (when (string-match "~$" filename) - (setq filename (concat filename "/")))) - (tramp-run-real-handler 'substitute-in-file-name (list filename))))) + ;; Ignore in LOCALNAME everything before "//" or "/~". + (when (and (stringp localname) (string-match ".+?/\\(/\\|~\\)" localname)) + (setq filename + (concat (file-remote-p filename) + (replace-match "\\1" nil nil localname))) + ;; "/m:h:~" does not work for completion. We use "/m:h:~/". + (when (string-match "~$" filename) + (setq filename (concat filename "/")))) + (tramp-run-real-handler 'substitute-in-file-name (list filename)))) (defun tramp-handle-unhandled-file-name-directory (_filename) "Like `unhandled-file-name-directory' for Tramp files." From 352d3beabbb6aada64c9fd1b946954164640b7f7 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 6 Sep 2013 10:24:00 +0200 Subject: [PATCH 011/321] Format long lines. --- lisp/net/tramp-gvfs.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index e70400af820..a1ead96eaea 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -1424,7 +1424,8 @@ It was \"a(say)\", but has changed to \"a{sv})\"." (string-match "^/?\\([^/]+\\)" localname) (list (tramp-gvfs-mount-spec-entry "type" "smb-share") (tramp-gvfs-mount-spec-entry "server" host) - (tramp-gvfs-mount-spec-entry "share" (match-string 1 localname)))) + (tramp-gvfs-mount-spec-entry + "share" (match-string 1 localname)))) ((string-equal "obex" method) (list (tramp-gvfs-mount-spec-entry "type" method) (tramp-gvfs-mount-spec-entry @@ -1441,7 +1442,8 @@ It was \"a(say)\", but has changed to \"a{sv})\"." ,@(when domain (list (tramp-gvfs-mount-spec-entry "domain" domain))) ,@(when port - (list (tramp-gvfs-mount-spec-entry "port" (number-to-string port)))))) + (list (tramp-gvfs-mount-spec-entry + "port" (number-to-string port)))))) (mount-pref (if (and (string-match "\\`dav" method) (string-match "^/?[^/]+" localname)) From 97e99cc328b3b98b060bc57ac865c535790cffdd Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 6 Sep 2013 10:25:15 +0200 Subject: [PATCH 012/321] * tramp.texi (Alternative Syntax): Remove chapter. --- doc/misc/ChangeLog | 4 ++++ doc/misc/tramp.texi | 42 ------------------------------------------ 2 files changed, 4 insertions(+), 42 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 22148deace0..85143fc2692 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,7 @@ +2013-09-06 Michael Albinus + + * tramp.texi (Alternative Syntax): Remove chapter. + 2013-08-28 Paul Eggert * Makefile.in (SHELL): Now @SHELL@, not /bin/sh, diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 03c6da3b73f..aa4cea58f04 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -225,7 +225,6 @@ Configuring @value{tramp} for use Using @value{tramp} * Filename Syntax:: @value{tramp} filename conventions. -* Alternative Syntax:: URL-like filename syntax. * Filename completion:: Filename completion. * Ad-hoc multi-hops:: Declaring multiple hops in the file name. * Remote processes:: Integration with other @value{emacsname} packages. @@ -2356,7 +2355,6 @@ minute you have already forgotten that you hit that key! @menu * Filename Syntax:: @value{tramp} filename conventions. -* Alternative Syntax:: URL-like filename syntax. * Filename completion:: Filename completion. * Ad-hoc multi-hops:: Declaring multiple hops in the file name. * Remote processes:: Integration with other @value{emacsname} packages. @@ -2453,46 +2451,6 @@ by adding @file{#} to the host name, like in @file{@trampfn{ssh, daniel, melancholia#42, .emacs}}. -@node Alternative Syntax -@section URL-like filename syntax -@cindex filename syntax -@cindex filename examples - -Additionally to the syntax described in the previous chapter, it is -possible to use a URL-like syntax for @value{tramp}. This can be -switched on by customizing the variable @code{tramp-syntax}. Please -note that this feature is experimental for the time being. - -The variable @code{tramp-syntax} must be set before requiring @value{tramp}: - -@lisp -(setq tramp-syntax 'url) -(require 'tramp) -@end lisp - -Then, a @value{tramp} filename would look like this: -@file{/@var{method}://@var{user}@@@var{machine}:@var{port}/@var{path/to.file}}. -@file{/@var{method}://} is mandatory, all other parts are optional. -@file{:@var{port}} is useful for methods only who support this. - -The last example from the previous section would look like this: -@file{/ssh://daniel@@melancholia/.emacs}. - -For the time being, @code{tramp-syntax} can have the following values: - -@itemize @w{} -@ifset emacs -@item @code{ftp}---That is the default syntax -@item @code{url}---URL-like syntax -@end ifset -@ifset xemacs -@item @code{sep}---That is the default syntax -@item @code{url}---URL-like syntax -@item @code{ftp}---EFS-like syntax -@end ifset -@end itemize - - @node Filename completion @section Filename completion @cindex filename completion From 179923f74b3fca2aa27488297e6595beb76e0351 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 6 Sep 2013 10:42:59 +0200 Subject: [PATCH 013/321] The experimental url syntax for remote file names is withdrawn. --- etc/NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index a6d6f5b04c4..72d7f8164c1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -461,6 +461,8 @@ todo-mode.el has been made obsolete and renamed otodo-mode.el. ** Tramp +*** The experimental url syntax for remote file names is withdrawn. + +++ *** New connection method "adb", which allows to access Android devices by the Android Debug Bridge. The variable `tramp-adb-program' From 7f6c6450a1332c5bbff900fdeccea6d793970643 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 6 Sep 2013 12:49:14 +0400 Subject: [PATCH 014/321] Attempt to make redisplay more selective when changing cursor type. * frame.h (struct frame): New bitfield cursor_type_changed. * xdisp.c (cursor_type_changed): Remove. (try_cursor_movement, redisplay_window, try_window_id) (set_frame_cursor_types, try_window_reusing_current_matrix): Adjust to use per-frame bitfield. (redisplay_internal): Look for cursor type change on each visible frame and consider all frames if cursor type has been changed on the frame other than selected. If cursor type has been changed on selected frame only, do not use fast update. --- src/ChangeLog | 13 +++++++++++++ src/frame.h | 3 +++ src/xdisp.c | 26 ++++++++++++++------------ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e7ac61b4fb4..2325b351217 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2013-09-06 Dmitry Antipov + + Attempt to make redisplay more selective when changing cursor type. + * frame.h (struct frame): New bitfield cursor_type_changed. + * xdisp.c (cursor_type_changed): Remove. + (try_cursor_movement, redisplay_window, try_window_id) + (set_frame_cursor_types, try_window_reusing_current_matrix): + Adjust to use per-frame bitfield. + (redisplay_internal): Look for cursor type change on each visible + frame and consider all frames if cursor type has been changed on + the frame other than selected. If cursor type has been changed on + selected frame only, do not use fast update. + 2013-09-06 Dmitry Antipov Attempt to make redisplay more selective when changing fonts. diff --git a/src/frame.h b/src/frame.h index 3c7499ea814..3dfbac15709 100644 --- a/src/frame.h +++ b/src/frame.h @@ -214,6 +214,9 @@ struct frame matrix adjustments. */ unsigned fonts_changed : 1; + /* Nonzero means that cursor type has been changed. */ + unsigned cursor_type_changed : 1; + /* Margin at the top of the frame. Used to display the tool-bar. */ int tool_bar_lines; diff --git a/src/xdisp.c b/src/xdisp.c index 36f7f1e503e..a7f7fc88198 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -512,10 +512,6 @@ int update_mode_lines; int windows_or_buffers_changed; -/* Nonzero means a frame's cursor type has been changed. */ - -static int cursor_type_changed; - /* Nonzero after display_mode_line if %l was used and it displayed a line number. */ @@ -13010,6 +13006,10 @@ redisplay_internal (void) adjust_frame_glyphs (f); f->fonts_changed = 0; } + /* If cursor type has been changed on the frame + other than selected, consider all frames. */ + if (f != sf && f->cursor_type_changed) + update_mode_lines++; } clear_desired_matrices (f); } @@ -13059,8 +13059,7 @@ redisplay_internal (void) } consider_all_windows_p = (update_mode_lines - || buffer_shared_and_changed () - || cursor_type_changed); + || buffer_shared_and_changed ()); /* If specs for an arrow have changed, do thorough redisplay to ensure we remove any arrow that should no longer exist. */ @@ -13151,6 +13150,7 @@ redisplay_internal (void) && !current_buffer->prevent_redisplay_optimizations_p && FRAME_VISIBLE_P (XFRAME (w->frame)) && !FRAME_OBSCURED_P (XFRAME (w->frame)) + && !XFRAME (w->frame)->cursor_type_changed /* Make sure recorded data applies to current buffer, etc. */ && this_line_buffer == current_buffer && match_p @@ -13419,6 +13419,7 @@ redisplay_internal (void) /* Update the display. */ set_window_update_flags (XWINDOW (f->root_window), 1); pending |= update_frame (f, 0, 0); + f->cursor_type_changed = 0; f->updated_p = 1; } } @@ -13480,6 +13481,7 @@ redisplay_internal (void) XWINDOW (selected_window)->must_be_updated_p = 1; pending = update_frame (sf, 0, 0); + sf->cursor_type_changed = 0; } /* We may have called echo_area_display at the top of this @@ -13494,6 +13496,7 @@ redisplay_internal (void) { XWINDOW (mini_window)->must_be_updated_p = 1; pending |= update_frame (mini_frame, 0, 0); + mini_frame->cursor_type_changed = 0; if (!pending && hscroll_windows (mini_window)) goto retry; } @@ -13534,7 +13537,6 @@ redisplay_internal (void) update_mode_lines = 0; windows_or_buffers_changed = 0; - cursor_type_changed = 0; } /* Start SIGIO interrupts coming again. Having them off during the @@ -14976,7 +14978,7 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste cases. */ && !update_mode_lines && !windows_or_buffers_changed - && !cursor_type_changed + && !f->cursor_type_changed /* Can't use this case if highlighting a region. When a region exists, cursor movement has to do more than just set the cursor. */ @@ -15972,7 +15974,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p) /* Redisplay the window. */ if (!current_matrix_up_to_date_p || windows_or_buffers_changed - || cursor_type_changed + || f->cursor_type_changed /* Don't use try_window_reusing_current_matrix in this case because it can have changed the buffer. */ || !NILP (Vwindow_scroll_functions) @@ -16351,7 +16353,7 @@ try_window_reusing_current_matrix (struct window *w) /* Don't try to reuse the display if windows have been split or such. */ || windows_or_buffers_changed - || cursor_type_changed) + || f->cursor_type_changed) return 0; /* Can't do this if region may have changed. */ @@ -17122,7 +17124,7 @@ try_window_id (struct window *w) GIVE_UP (1); /* This flag is used to prevent redisplay optimizations. */ - if (windows_or_buffers_changed || cursor_type_changed) + if (windows_or_buffers_changed || f->cursor_type_changed) GIVE_UP (2); /* Verify that narrowing has not changed. @@ -25948,7 +25950,7 @@ set_frame_cursor_types (struct frame *f, Lisp_Object arg) FRAME_BLINK_OFF_CURSOR (f) = DEFAULT_CURSOR; /* Make sure the cursor gets redrawn. */ - cursor_type_changed = 1; + f->cursor_type_changed = 1; } From 306d67bd4c0161521c465c64d9cf18d1c768e174 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 6 Sep 2013 10:28:05 -0400 Subject: [PATCH 015/321] * src/eval.c (eval_sub): Only call Ffunction if necessary. --- src/ChangeLog | 4 ++++ src/eval.c | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 2325b351217..526b05fbd9f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2013-09-06 Stefan Monnier + + * eval.c (eval_sub): Only call Ffunction if necessary. + 2013-09-06 Dmitry Antipov Attempt to make redisplay more selective when changing cursor type. diff --git a/src/eval.c b/src/eval.c index 1ce14ae94a6..9db4d1fd81b 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2146,11 +2146,10 @@ eval_sub (Lisp_Object form) /* Optimize for no indirection. */ fun = original_fun; - if (SYMBOLP (fun) && !NILP (fun) - && (fun = XSYMBOL (fun)->function, SYMBOLP (fun))) - fun = indirect_function (fun); - else + if (!SYMBOLP (fun)) fun = Ffunction (Fcons (fun, Qnil)); + else if (!NILP (fun) && (fun = XSYMBOL (fun)->function, SYMBOLP (fun))) + fun = indirect_function (fun); if (SUBRP (fun)) { From 816244a2ab34d651371bf8045eac14320587beda Mon Sep 17 00:00:00 2001 From: William Xu Date: Fri, 6 Sep 2013 11:02:40 -0400 Subject: [PATCH 016/321] * lisp/arc-mode.el: Add support for 7za. (archive-7z-program): New var. (archive-zip-extract, archive-zip-expunge, archive-zip-update) (archive-zip-update-case, archive-7z-extract, archive-7z-expunge) (archive-7z-update, archive-zip-extract, archive-7z-summarize): Use it. Fixes: debbugs:15264 --- lisp/ChangeLog | 8 ++++++++ lisp/arc-mode.el | 23 ++++++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 03352a93e6f..3c1a97b34b9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2013-09-06 William Xu + + * arc-mode.el: Add support for 7za (bug#15264). + (archive-7z-program): New var. + (archive-zip-extract, archive-zip-expunge, archive-zip-update) + (archive-zip-update-case, archive-7z-extract, archive-7z-expunge) + (archive-7z-update, archive-zip-extract, archive-7z-summarize): Use it. + 2013-09-06 Michael Albinus Remove URL syntax. diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index 5f001ad977b..a4f7015c844 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -218,9 +218,14 @@ Archive and member name will be added." ;; ------------------------------ ;; Zip archive configuration +(defvar archive-7z-program (let ((7z (or (executable-find "7z") + (executable-find "7za")))) + (when 7z + (file-name-nondirectory 7z)))) + (defcustom archive-zip-extract (cond ((executable-find "unzip") '("unzip" "-qq" "-c")) - ((executable-find "7z") '("7z" "x" "-so")) + (archive-7z-program `(,archive-7z-program "x" "-so")) ((executable-find "pkunzip") '("pkunzip" "-e" "-o-")) (t '("unzip" "-qq" "-c"))) "Program and its options to run in order to extract a zip file member. @@ -239,7 +244,7 @@ be added." (defcustom archive-zip-expunge (cond ((executable-find "zip") '("zip" "-d" "-q")) - ((executable-find "7z") '("7z" "d")) + (archive-7z-program `(,archive-7z-program "d")) ((executable-find "pkzip") '("pkzip" "-d")) (t '("zip" "-d" "-q"))) "Program and its options to run in order to delete zip file members. @@ -252,7 +257,7 @@ Archive and member names will be added." (defcustom archive-zip-update (cond ((executable-find "zip") '("zip" "-q")) - ((executable-find "7z") '("7z" "u")) + (archive-7z-program `(,archive-7z-program "u")) ((executable-find "pkzip") '("pkzip" "-u" "-P")) (t '("zip" "-q"))) "Program and its options to run in order to update a zip file member. @@ -266,7 +271,7 @@ file. Archive and member name will be added." (defcustom archive-zip-update-case (cond ((executable-find "zip") '("zip" "-q" "-k")) - ((executable-find "7z") '("7z" "u")) + (archive-7z-program `(,archive-7z-program "u")) ((executable-find "pkzip") '("pkzip" "-u" "-P")) (t '("zip" "-q" "-k"))) "Program and its options to run in order to update a case fiddled zip member. @@ -321,7 +326,7 @@ Archive and member name will be added." ;; 7z archive configuration (defcustom archive-7z-extract - '("7z" "x" "-so") + `(,archive-7z-program "x" "-so") "Program and its options to run in order to extract a 7z file member. Extraction should happen to standard output. Archive and member name will be added." @@ -333,7 +338,7 @@ be added." :group 'archive-7z) (defcustom archive-7z-expunge - '("7z" "d") + `(,archive-7z-program "d") "Program and its options to run in order to delete 7z file members. Archive and member names will be added." :version "24.1" @@ -344,7 +349,7 @@ Archive and member names will be added." :group 'archive-7z) (defcustom archive-7z-update - '("7z" "u") + `(,archive-7z-program "u") "Program and its options to run in order to update a 7z file member. Options should ensure that specified directory will be put into the 7z file. Archive and member name will be added." @@ -1864,7 +1869,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself." (cond ((member-ignore-case (car archive-zip-extract) '("pkunzip" "pkzip")) (archive-*-extract archive name archive-zip-extract)) - ((equal (car archive-zip-extract) "7z") + ((equal (car archive-zip-extract) archive-7z-program) (let ((archive-7z-extract archive-zip-extract)) (archive-7z-extract archive name))) (t @@ -2088,7 +2093,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself." (file buffer-file-name) (files ())) (with-temp-buffer - (call-process "7z" nil t nil "l" "-slt" file) + (call-process archive-7z-program nil t nil "l" "-slt" file) (goto-char (point-min)) ;; Four dashes start the meta info section that should be skipped. ;; Archive members start with more than four dashes. From 86cf73299170efd02eb9ede42547eca65df83c86 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 6 Sep 2013 11:37:01 -0400 Subject: [PATCH 017/321] * lisp/abbrev.el (edit-abbrevs-mode): Use define-derived-mode. (edit-abbrevs-mode-map): Rename from edit-abbrevs-map. * lisp/epa.el (epa--encode-coding-string, epa--decode-coding-string) (epa--select-safe-coding-system, epa--derived-mode-p): Make it obvious that it's defined. (epa-key-list-mode, epa-key-mode, epa-info-mode): Use define-derived-mode. * lisp/epg.el (epg-start-encrypt): Minor CSE simplification. --- lisp/ChangeLog | 13 +++++++++ lisp/abbrev.el | 19 ++++++-------- lisp/epa.el | 71 ++++++++++++++++++-------------------------------- lisp/epg.el | 5 ++-- 4 files changed, 48 insertions(+), 60 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3c1a97b34b9..53335cb6311 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,16 @@ +2013-09-06 Stefan Monnier + + * abbrev.el (edit-abbrevs-mode-map): Rename from edit-abbrevs-map. + (edit-abbrevs-mode): Use define-derived-mode. + + * epa.el (epa--encode-coding-string, epa--decode-coding-string) + (epa--select-safe-coding-system, epa--derived-mode-p): Make it obvious + that it's defined. + (epa-key-list-mode, epa-key-mode, epa-info-mode): + Use define-derived-mode. + + * epg.el (epg-start-encrypt): Minor CSE simplification. + 2013-09-06 William Xu * arc-mode.el: Add support for 7za (bug#15264). diff --git a/lisp/abbrev.el b/lisp/abbrev.el index d82e2eabd84..d7d4482693d 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -67,13 +67,15 @@ be replaced by its expansion." (put 'abbrev-mode 'safe-local-variable 'booleanp) -(defvar edit-abbrevs-map +(defvar edit-abbrevs-mode-map (let ((map (make-sparse-keymap))) (define-key map "\C-x\C-s" 'abbrev-edit-save-buffer) (define-key map "\C-x\C-w" 'abbrev-edit-save-to-file) (define-key map "\C-c\C-c" 'edit-abbrevs-redefine) map) "Keymap used in `edit-abbrevs'.") +(define-obsolete-variable-alias 'edit-abbrevs-map + 'edit-abbrevs-mode-map "24.4") (defun kill-all-abbrevs () "Undefine all defined abbrevs." @@ -144,16 +146,6 @@ Otherwise display all abbrevs." (set-buffer-modified-p nil) (current-buffer)))) -(defun edit-abbrevs-mode () - "Major mode for editing the list of abbrev definitions. -\\{edit-abbrevs-map}" - (interactive) - (kill-all-local-variables) - (setq major-mode 'edit-abbrevs-mode) - (setq mode-name "Edit-Abbrevs") - (use-local-map edit-abbrevs-map) - (run-mode-hooks 'edit-abbrevs-mode-hook)) - (defun edit-abbrevs () "Alter abbrev definitions by editing a list of them. Selects a buffer containing a list of abbrev definitions with @@ -1013,6 +1005,11 @@ SORTFUN is passed to `sort' to change the default ordering." (sort entries (lambda (x y) (funcall sortfun (nth 2 x) (nth 2 y))))))) +;; Keep it after define-abbrev-table, since define-derived-mode uses +;; define-abbrev-table. +(define-derived-mode edit-abbrevs-mode special-mode "Edit-Abbrevs" + "Major mode for editing the list of abbrev definitions.") + (provide 'abbrev) ;;; abbrev.el ends here diff --git a/lisp/epa.el b/lisp/epa.el index a99fb9230e1..1b06e6ca3bf 100644 --- a/lisp/epa.el +++ b/lisp/epa.el @@ -268,62 +268,40 @@ You should bind this variable with `let', but do not set it globally.") (epg-sub-key-id (car (epg-key-sub-key-list (widget-get widget :value)))))) -(eval-and-compile - (if (fboundp 'encode-coding-string) - (defalias 'epa--encode-coding-string 'encode-coding-string) - (defalias 'epa--encode-coding-string 'identity))) +(defalias 'epa--encode-coding-string + (if (fboundp 'encode-coding-string) #'encode-coding-string #'identity)) -(eval-and-compile - (if (fboundp 'decode-coding-string) - (defalias 'epa--decode-coding-string 'decode-coding-string) - (defalias 'epa--decode-coding-string 'identity))) +(defalias 'epa--decode-coding-string + (if (fboundp 'decode-coding-string) #'decode-coding-string #'identity)) -(defun epa-key-list-mode () +(define-derived-mode epa-key-list-mode special-mode "Keys" "Major mode for `epa-list-keys'." - (kill-all-local-variables) (buffer-disable-undo) - (setq major-mode 'epa-key-list-mode - mode-name "Keys" - truncate-lines t + (setq truncate-lines t buffer-read-only t) - (use-local-map epa-key-list-mode-map) - (make-local-variable 'font-lock-defaults) - (setq font-lock-defaults '(epa-font-lock-keywords t)) + (setq-local font-lock-defaults '(epa-font-lock-keywords t)) ;; In XEmacs, auto-initialization of font-lock is not effective ;; if buffer-file-name is not set. (font-lock-set-defaults) (make-local-variable 'epa-exit-buffer-function) - (make-local-variable 'revert-buffer-function) - (setq revert-buffer-function 'epa--key-list-revert-buffer) - (run-mode-hooks 'epa-key-list-mode-hook)) + (setq-local revert-buffer-function #'epa--key-list-revert-buffer)) -(defun epa-key-mode () +(define-derived-mode epa-key-mode special-mode "Key" "Major mode for a key description." - (kill-all-local-variables) (buffer-disable-undo) - (setq major-mode 'epa-key-mode - mode-name "Key" - truncate-lines t + (setq truncate-lines t buffer-read-only t) - (use-local-map epa-key-mode-map) - (make-local-variable 'font-lock-defaults) - (setq font-lock-defaults '(epa-font-lock-keywords t)) + (setq-local font-lock-defaults '(epa-font-lock-keywords t)) ;; In XEmacs, auto-initialization of font-lock is not effective ;; if buffer-file-name is not set. (font-lock-set-defaults) - (make-local-variable 'epa-exit-buffer-function) - (run-mode-hooks 'epa-key-mode-hook)) + (make-local-variable 'epa-exit-buffer-function)) -(defun epa-info-mode () +(define-derived-mode epa-info-mode special-mode "Info" "Major mode for `epa-info-buffer'." - (kill-all-local-variables) (buffer-disable-undo) - (setq major-mode 'epa-info-mode - mode-name "Info" - truncate-lines t - buffer-read-only t) - (use-local-map epa-info-mode-map) - (run-mode-hooks 'epa-info-mode-hook)) + (setq truncate-lines t + buffer-read-only t)) (defun epa-mark-key (&optional arg) "Mark a key on the current line. @@ -951,10 +929,10 @@ See the reason described in the `epa-verify-region' documentation." (error "No cleartext tail")) (epa-verify-region cleartext-start cleartext-end)))))) -(eval-and-compile +(defalias 'epa--select-safe-coding-system (if (fboundp 'select-safe-coding-system) - (defalias 'epa--select-safe-coding-system 'select-safe-coding-system) - (defun epa--select-safe-coding-system (_from _to) + #'select-safe-coding-system + (lambda (_from _to) buffer-file-coding-system))) ;;;###autoload @@ -1026,16 +1004,16 @@ If no one is selected, default secret key is used. " 'start-open t 'end-open t))))) -(eval-and-compile +(defalias 'epa--derived-mode-p (if (fboundp 'derived-mode-p) - (defalias 'epa--derived-mode-p 'derived-mode-p) - (defun epa--derived-mode-p (&rest modes) + #'derived-mode-p + (lambda (&rest modes) "Non-nil if the current major mode is derived from one of MODES. Uses the `derived-mode-parent' property of the symbol to trace backwards." (let ((parent major-mode)) - (while (and (not (memq parent modes)) - (setq parent (get parent 'derived-mode-parent)))) - parent)))) + (while (and (not (memq parent modes)) + (setq parent (get parent 'derived-mode-parent)))) + parent)))) ;;;###autoload (defun epa-encrypt-region (start end recipients sign signers) @@ -1138,6 +1116,7 @@ If no one is selected, symmetric encryption will be performed. ") (if (epg-context-result-for context 'import) (epa-display-info (epg-import-result-to-string (epg-context-result-for context 'import)))) + ;; FIXME: Why not use the (otherwise unused) epa--derived-mode-p? (if (eq major-mode 'epa-key-list-mode) (apply #'epa--list-keys epa-list-keys-arguments)))) diff --git a/lisp/epg.el b/lisp/epg.el index bcd91d8abba..c733a273988 100644 --- a/lisp/epg.el +++ b/lisp/epg.el @@ -2415,9 +2415,8 @@ If you are unsure, use synchronous version of this function (list "--" (epg-data-file plain))))) ;; `gpgsm' does not read passphrase from stdin, so waiting is not needed. (unless (eq (epg-context-protocol context) 'CMS) - (if sign - (epg-wait-for-status context '("BEGIN_SIGNING")) - (epg-wait-for-status context '("BEGIN_ENCRYPTION")))) + (epg-wait-for-status context + (if sign '("BEGIN_SIGNING") '("BEGIN_ENCRYPTION")))) (when (epg-data-string plain) (if (eq (process-status (epg-context-process context)) 'run) (process-send-string (epg-context-process context) From 77394d40d90fe4ba150444c0160654c608ef227d Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 6 Sep 2013 20:40:12 +0400 Subject: [PATCH 018/321] * lisp.h (last_glyphless_glyph_frame, last_glyphless_glyph_face_id) (last_glyphless_glyph_merged_face_id): Remove declarations. * dispextern.h (merge_glyphless_glyph_face): Add prototype. * xdisp.c (last_glyphless_glyph_frame, last_glyphless_glyph_face_id) (last_glyphless_glyph_merged_face_id): Now static. (merge_escape_glyph_face): New function, refactored from... (get_next_display_element): ...here. (merge_glyphless_glyph_face): New function, refactored from... (produce_glyphless_glyph): ...here... * term.c (produce_glyphless_glyph): ...and here. --- src/ChangeLog | 13 ++++++ src/dispextern.h | 1 + src/lisp.h | 3 -- src/term.c | 19 +------- src/xdisp.c | 117 +++++++++++++++++++++++------------------------ 5 files changed, 72 insertions(+), 81 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 526b05fbd9f..7f41abc46bb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2013-09-06 Dmitry Antipov + + * lisp.h (last_glyphless_glyph_frame, last_glyphless_glyph_face_id) + (last_glyphless_glyph_merged_face_id): Remove declarations. + * dispextern.h (merge_glyphless_glyph_face): Add prototype. + * xdisp.c (last_glyphless_glyph_frame, last_glyphless_glyph_face_id) + (last_glyphless_glyph_merged_face_id): Now static. + (merge_escape_glyph_face): New function, refactored from... + (get_next_display_element): ...here. + (merge_glyphless_glyph_face): New function, refactored from... + (produce_glyphless_glyph): ...here... + * term.c (produce_glyphless_glyph): ...and here. + 2013-09-06 Stefan Monnier * eval.c (eval_sub): Only call Ffunction if necessary. diff --git a/src/dispextern.h b/src/dispextern.h index 864229e1d04..f15da1e6564 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3208,6 +3208,7 @@ extern ptrdiff_t compute_display_string_pos (struct text_pos *, extern ptrdiff_t compute_display_string_end (ptrdiff_t, struct bidi_string_data *); extern void produce_stretch_glyph (struct it *); +extern int merge_glyphless_glyph_face (struct it *); #ifdef HAVE_WINDOW_SYSTEM diff --git a/src/lisp.h b/src/lisp.h index 27359ffeb3f..38b538d9bc2 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3359,9 +3359,6 @@ extern Lisp_Object Qglyphless_char; extern Lisp_Object QCdata, QCfile; extern Lisp_Object QCmap; extern Lisp_Object Qrisky_local_variable; -extern struct frame *last_glyphless_glyph_frame; -extern int last_glyphless_glyph_face_id; -extern int last_glyphless_glyph_merged_face_id; extern int noninteractive_need_newline; extern Lisp_Object echo_area_buffer[2]; extern void add_to_log (const char *, Lisp_Object, Lisp_Object); diff --git a/src/term.c b/src/term.c index aa61fde06ee..0270c1eefa6 100644 --- a/src/term.c +++ b/src/term.c @@ -1800,27 +1800,10 @@ append_glyphless_glyph (struct it *it, int face_id, const char *str) static void produce_glyphless_glyph (struct it *it, Lisp_Object acronym) { - int face_id; - int len; + int len, face_id = merge_glyphless_glyph_face (it); char buf[sizeof "\\x" + max (6, (sizeof it->c * CHAR_BIT + 3) / 4)]; char const *str = " "; - /* Get a face ID for the glyph by utilizing a cache (the same way as - done for `escape-glyph' in get_next_display_element). */ - if (it->f == last_glyphless_glyph_frame - && it->face_id == last_glyphless_glyph_face_id) - { - face_id = last_glyphless_glyph_merged_face_id; - } - else - { - /* Merge the `glyphless-char' face into the current face. */ - face_id = merge_faces (it->f, Qglyphless_char, 0, it->face_id); - last_glyphless_glyph_frame = it->f; - last_glyphless_glyph_face_id = it->face_id; - last_glyphless_glyph_merged_face_id = face_id; - } - if (it->glyphless_method == GLYPHLESS_DISPLAY_THIN_SPACE) { /* As there's no way to produce a thin space, we produce a space diff --git a/src/xdisp.c b/src/xdisp.c index a7f7fc88198..d5def065936 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -6666,17 +6666,59 @@ lookup_glyphless_char_display (int c, struct it *it) return glyphless_method; } -/* Load IT's display element fields with information about the next - display element from the current position of IT. Value is zero if - end of buffer (or C string) is reached. */ +/* Merge escape glyph face and cache the result. */ static struct frame *last_escape_glyph_frame = NULL; static int last_escape_glyph_face_id = (1 << FACE_ID_BITS); static int last_escape_glyph_merged_face_id = 0; -struct frame *last_glyphless_glyph_frame = NULL; -int last_glyphless_glyph_face_id = (1 << FACE_ID_BITS); -int last_glyphless_glyph_merged_face_id = 0; +static int +merge_escape_glyph_face (struct it *it) +{ + int face_id; + + if (it->f == last_escape_glyph_frame + && it->face_id == last_escape_glyph_face_id) + face_id = last_escape_glyph_merged_face_id; + else + { + /* Merge the `escape-glyph' face into the current face. */ + face_id = merge_faces (it->f, Qescape_glyph, 0, it->face_id); + last_escape_glyph_frame = it->f; + last_escape_glyph_face_id = it->face_id; + last_escape_glyph_merged_face_id = face_id; + } + return face_id; +} + +/* Likewise for glyphless glyph face. */ + +static struct frame *last_glyphless_glyph_frame = NULL; +static int last_glyphless_glyph_face_id = (1 << FACE_ID_BITS); +static int last_glyphless_glyph_merged_face_id = 0; + +int +merge_glyphless_glyph_face (struct it *it) +{ + int face_id; + + if (it->f == last_glyphless_glyph_frame + && it->face_id == last_glyphless_glyph_face_id) + face_id = last_glyphless_glyph_merged_face_id; + else + { + /* Merge the `glyphless-char' face into the current face. */ + face_id = merge_faces (it->f, Qglyphless_char, 0, it->face_id); + last_glyphless_glyph_frame = it->f; + last_glyphless_glyph_face_id = it->face_id; + last_glyphless_glyph_merged_face_id = face_id; + } + return face_id; +} + +/* Load IT's display element fields with information about the next + display element from the current position of IT. Value is zero if + end of buffer (or C string) is reached. */ static int get_next_display_element (struct it *it) @@ -6824,24 +6866,10 @@ get_next_display_element (struct it *it) g = GLYPH_CODE_CHAR (gc); lface_id = GLYPH_CODE_FACE (gc); } - if (lface_id) - { - face_id = merge_faces (it->f, Qt, lface_id, it->face_id); - } - else if (it->f == last_escape_glyph_frame - && it->face_id == last_escape_glyph_face_id) - { - face_id = last_escape_glyph_merged_face_id; - } - else - { - /* Merge the escape-glyph face into the current face. */ - face_id = merge_faces (it->f, Qescape_glyph, 0, - it->face_id); - last_escape_glyph_frame = it->f; - last_escape_glyph_face_id = it->face_id; - last_escape_glyph_merged_face_id = face_id; - } + + face_id = (lface_id + ? merge_faces (it->f, Qt, lface_id, it->face_id) + : merge_escape_glyph_face (it)); XSETINT (it->ctl_chars[0], g); XSETINT (it->ctl_chars[1], c ^ 0100); @@ -6873,27 +6901,10 @@ get_next_display_element (struct it *it) escape_glyph = GLYPH_CODE_CHAR (gc); lface_id = GLYPH_CODE_FACE (gc); } - if (lface_id) - { - /* The display table specified a face. - Merge it into face_id and also into escape_glyph. */ - face_id = merge_faces (it->f, Qt, lface_id, - it->face_id); - } - else if (it->f == last_escape_glyph_frame - && it->face_id == last_escape_glyph_face_id) - { - face_id = last_escape_glyph_merged_face_id; - } - else - { - /* Merge the escape-glyph face into the current face. */ - face_id = merge_faces (it->f, Qescape_glyph, 0, - it->face_id); - last_escape_glyph_frame = it->f; - last_escape_glyph_face_id = it->face_id; - last_escape_glyph_merged_face_id = face_id; - } + + face_id = (lface_id + ? merge_faces (it->f, Qt, lface_id, it->face_id) + : merge_escape_glyph_face (it)); /* Draw non-ASCII hyphen with just highlighting: */ @@ -24895,21 +24906,7 @@ produce_glyphless_glyph (struct it *it, int for_no_font, Lisp_Object acronym) base_height = it->ascent + it->descent; base_width = font->average_width; - /* Get a face ID for the glyph by utilizing a cache (the same way as - done for `escape-glyph' in get_next_display_element). */ - if (it->f == last_glyphless_glyph_frame - && it->face_id == last_glyphless_glyph_face_id) - { - face_id = last_glyphless_glyph_merged_face_id; - } - else - { - /* Merge the `glyphless-char' face into the current face. */ - face_id = merge_faces (it->f, Qglyphless_char, 0, it->face_id); - last_glyphless_glyph_frame = it->f; - last_glyphless_glyph_face_id = it->face_id; - last_glyphless_glyph_merged_face_id = face_id; - } + face_id = merge_glyphless_glyph_face (it); if (it->glyphless_method == GLYPHLESS_DISPLAY_THIN_SPACE) { From 96727100a742577ce0188d6d91b464b216e924b4 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Fri, 6 Sep 2013 23:43:49 +0300 Subject: [PATCH 019/321] * lisp/info.el (Info-display-images-node): When image file doesn't exist display text version of the image if it's provided in the Info file. Otherwise, display the location of missing image from SRC attribute. Add help-echo text property from ALT attribute. Fixes: debbugs:15279 --- lisp/ChangeLog | 7 +++++++ lisp/info.el | 11 +++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 53335cb6311..ca487ad2fef 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2013-09-06 Juri Linkov + + * info.el (Info-display-images-node): When image file doesn't exist + display text version of the image if it's provided in the Info file. + Otherwise, display the location of missing image from SRC attribute. + Add help-echo text property from ALT attribute. (Bug#15279) + 2013-09-06 Stefan Monnier * abbrev.el (edit-abbrevs-mode-map): Rename from edit-abbrevs-map. diff --git a/lisp/info.el b/lisp/info.el index 182ad8563aa..65cd7eddcfd 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -1595,17 +1595,20 @@ escaped (\\\",\\\\)." "")) (image (if (file-exists-p image-file) (create-image image-file) - "[broken image]"))) + (or (cdr (assoc-string "text" parameter-alist)) + (and src (concat "[broken image:" src "]")) + "[broken image]")))) (if (not (get-text-property start 'display)) (add-text-properties - start (point) `(display ,image rear-nonsticky (display))))) + start (point) + `(display ,image rear-nonsticky (display) + help-echo ,(cdr (assoc-string "alt" parameter-alist)))))) ;; text-only display, show alternative text if provided, or ;; otherwise a clue that there's meant to be a picture (delete-region start (point)) (insert (or (cdr (assoc-string "text" parameter-alist)) (cdr (assoc-string "alt" parameter-alist)) - (and src - (concat "[image:" src "]")) + (and src (concat "[image:" src "]")) "[image]")))))) (set-buffer-modified-p nil))) From e17d94a507d3ab2b2998880861b28badf8ecf0e7 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 6 Sep 2013 17:12:22 -0400 Subject: [PATCH 020/321] * lisp/dired-x.el (dired-mark-sexp): Bind the vars lexically rather than dynamically. --- lisp/ChangeLog | 5 +++++ lisp/dired-x.el | 32 +++++++++++++------------------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ca487ad2fef..4b6245d5791 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-06 Stefan Monnier + + * dired-x.el (dired-mark-sexp): Bind the vars lexically rather + than dynamically. + 2013-09-06 Juri Linkov * info.el (Info-display-images-node): When image file doesn't exist diff --git a/lisp/dired-x.el b/lisp/dired-x.el index 3527a3fc756..c6ecbf1e718 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el @@ -1,4 +1,4 @@ -;;; dired-x.el --- extra Dired functionality +;;; dired-x.el --- extra Dired functionality -*- lexical-binding:t -*- ;; Copyright (C) 1993-1994, 1997, 2001-2013 Free Software Foundation, ;; Inc. @@ -1185,7 +1185,7 @@ results in (setq count (1+ count) start (1+ start))) ;; ... and prepend a "../" for each slash found: - (dotimes (n count) + (dotimes (_ count) (setq name1 (concat "../" name1))))) (make-symbolic-link (directory-file-name name1) ; must not link to foo/ @@ -1397,22 +1397,6 @@ Considers buffers closer to the car of `buffer-list' to be more recent." ;; Does anyone use this? - lrd 6/29/93. ;; Apparently people do use it. - lrd 12/22/97. -(with-no-warnings - ;; Warnings are suppressed to avoid "global/dynamic var `X' lacks a prefix". - ;; This is unbearably ugly, but not more than having global variables - ;; named size, time, name or s, however practical it can be while writing - ;; `dired-mark-sexp' predicates. - (defvar inode) - (defvar s) - (defvar mode) - (defvar nlink) - (defvar uid) - (defvar gid) - (defvar size) - (defvar time) - (defvar name) - (defvar sym)) - (defun dired-mark-sexp (predicate &optional unflag-p) "Mark files for which PREDICATE returns non-nil. With a prefix arg, unmark or unflag those files instead. @@ -1505,7 +1489,17 @@ to mark all zero length files." (line-end-position)) "")) t) - (eval predicate))) + (eval predicate + `((inode . ,inode) + (s . ,s) + (mode . ,mode) + (nlink . ,nlink) + (uid . ,uid) + (gid . ,gid) + (size . ,size) + (time . ,time) + (name . ,name) + (sym . ,sym))))) (format "'%s file" predicate)))) From 67982e2b74ad72987459a6995f34161053a1dbfb Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 6 Sep 2013 18:46:44 -0400 Subject: [PATCH 021/321] * lisp/minibuffer.el: Make minibuffer-complete call completion-in-region rather than other way around. (completion--some, completion-pcm--find-all-completions): Don't delay signals when debugging. (minibuffer-completion-contents): Beware fields within the minibuffer contents. (completion-all-sorted-completions): Use defvar-local. (completion--do-completion, completion--cache-all-sorted-completions) (completion-all-sorted-completions, minibuffer-force-complete): Add args `beg' and `end'. (completion--in-region-1): New fun, extracted from minibuffer-complete. (minibuffer-complete): Use completion-in-region. (completion-complete-and-exit): New fun, extracted from minibuffer-complete-and-exit. (minibuffer-complete-and-exit): Use it. (completion--complete-and-exit): Rename from minibuffer--complete-and-exit. (completion-in-region--single-word): New function, extracted from minibuffer-complete-word. (minibuffer-complete-word): Use it. (display-completion-list): Make `common-substring' argument obsolete. (completion--in-region): Call completion--in-region-1 instead of minibuffer-complete. (completion-help-at-point): Pass boundaries to minibuffer-completion-help as args rather than via an overlay. (completion-pcm--string->pattern): Use `any-delim'. (completion-pcm--optimize-pattern): New function. (completion-pcm--pattern->regex): Handle `any-delim'. * lisp/icomplete.el (icomplete-forward-completions) (icomplete-backward-completions, icomplete-completions): Adjust calls to completion-all-sorted-completions and completion--cache-all-sorted-completions. (icomplete-with-completion-tables): Default to t. * lisp/emacs-lisp/crm.el (crm--current-element): Rename from crm--select-current-element. Don't put an overlay but return the boundaries instead. (crm--completion-command): Take two new args to bind to the boundaries. (crm-completion-help): Adjust accordingly. (crm-complete): Use completion-in-region. (crm-complete-word): Use completion-in-region--single-word. (crm-complete-and-exit): Use completion-complete-and-exit. --- etc/NEWS | 9 ++ lisp/ChangeLog | 44 ++++++++ lisp/emacs-lisp/crm.el | 60 +++++------ lisp/icomplete.el | 24 +++-- lisp/minibuffer.el | 223 ++++++++++++++++++++++++----------------- 5 files changed, 229 insertions(+), 131 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 72d7f8164c1..ad061a040f1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -172,6 +172,10 @@ You can pick the name of the function and the variables with `C-x 4 a'. * Changes in Specialized Modes and Packages in Emacs 24.4 +** Icomplete-mode by defaults applies to all forms of minibuffer completion. +(setq icomplete-with-completion-tables '(internal-complete-buffer)) +will revert to the old behavior. + ** The debugger's `e' command evaluates the code in the context at point. This includes using the lexical environment at point, which means that `e' now lets you access lexical variables as well. @@ -756,6 +760,11 @@ used in place of the 9th element of `file-attributes'. `preserve-extended-attributes' as it now handles both SELinux context and ACL entries. +** The `common-substring' argument of display-completion-list is obsolete. +Either use `completion-all-completions' which already returns highlighted +strings (including for partial or substring completion) or call +`completion-hilit-commonality' to add the highlight. + ** Changes to the Emacs Lisp Coding Conventions in Emacs 24.4 *** The package descriptor and name of global variables, constants, diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4b6245d5791..eb5861bb21d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,47 @@ +2013-09-06 Stefan Monnier + + * minibuffer.el: Make minibuffer-complete call completion-in-region + rather than other way around. + (completion--some, completion-pcm--find-all-completions): + Don't delay signals when debugging. + (minibuffer-completion-contents): Beware fields within the + minibuffer contents. + (completion-all-sorted-completions): Use defvar-local. + (completion--do-completion, completion--cache-all-sorted-completions) + (completion-all-sorted-completions, minibuffer-force-complete): + Add args `beg' and `end'. + (completion--in-region-1): New fun, extracted from minibuffer-complete. + (minibuffer-complete): Use completion-in-region. + (completion-complete-and-exit): New fun, extracted from + minibuffer-complete-and-exit. + (minibuffer-complete-and-exit): Use it. + (completion--complete-and-exit): Rename from + minibuffer--complete-and-exit. + (completion-in-region--single-word): New function, extracted from + minibuffer-complete-word. + (minibuffer-complete-word): Use it. + (display-completion-list): Make `common-substring' argument obsolete. + (completion--in-region): Call completion--in-region-1 instead of + minibuffer-complete. + (completion-help-at-point): Pass boundaries to + minibuffer-completion-help as args rather than via an overlay. + (completion-pcm--string->pattern): Use `any-delim'. + (completion-pcm--optimize-pattern): New function. + (completion-pcm--pattern->regex): Handle `any-delim'. + * icomplete.el (icomplete-forward-completions) + (icomplete-backward-completions, icomplete-completions): + Adjust calls to completion-all-sorted-completions and + completion--cache-all-sorted-completions. + (icomplete-with-completion-tables): Default to t. + * emacs-lisp/crm.el (crm--current-element): Rename from + crm--select-current-element. Don't put an overlay but return the + boundaries instead. + (crm--completion-command): Take two new args to bind to the boundaries. + (crm-completion-help): Adjust accordingly. + (crm-complete): Use completion-in-region. + (crm-complete-word): Use completion-in-region--single-word. + (crm-complete-and-exit): Use completion-complete-and-exit. + 2013-09-06 Stefan Monnier * dired-x.el (dired-mark-sexp): Bind the vars lexically rather diff --git a/lisp/emacs-lisp/crm.el b/lisp/emacs-lisp/crm.el index b8e327625e7..750e0709591 100644 --- a/lisp/emacs-lisp/crm.el +++ b/lisp/emacs-lisp/crm.el @@ -157,33 +157,32 @@ Functions'." predicate flag))) -(defun crm--select-current-element () +(defun crm--current-element () "Parse the minibuffer to find the current element. -Place an overlay on the element, with a `field' property, and return it." - (let* ((bob (minibuffer-prompt-end)) - (start (save-excursion +Return the element's boundaries as (START . END)." + (let ((bob (minibuffer-prompt-end))) + (cons (save-excursion (if (re-search-backward crm-separator bob t) (match-end 0) - bob))) - (end (save-excursion + bob)) + (save-excursion (if (re-search-forward crm-separator nil t) (match-beginning 0) - (point-max)))) - (ol (make-overlay start end nil nil t))) - (overlay-put ol 'field (make-symbol "crm")) - ol)) + (point-max)))))) -(defmacro crm--completion-command (command) - "Make COMMAND a completion command for `completing-read-multiple'." - `(let ((ol (crm--select-current-element))) - (unwind-protect - ,command - (delete-overlay ol)))) +(defmacro crm--completion-command (beg end &rest body) + "Run BODY with BEG and END bound to the current element's boundaries." + (declare (indent 2) (debug (sexp sexp &rest body))) + `(let* ((crm--boundaries (crm--current-element)) + (,beg (car crm--boundaries)) + (,end (cdr crm--boundaries))) + ,@body)) (defun crm-completion-help () "Display a list of possible completions of the current minibuffer element." (interactive) - (crm--completion-command (minibuffer-completion-help)) + (crm--completion-command beg end + (minibuffer-completion-help beg end)) nil) (defun crm-complete () @@ -192,13 +191,18 @@ If no characters can be completed, display a list of possible completions. Return t if the current element is now a valid match; otherwise return nil." (interactive) - (crm--completion-command (minibuffer-complete))) + (crm--completion-command beg end + (completion-in-region beg end + minibuffer-completion-table + minibuffer-completion-predicate))) (defun crm-complete-word () "Complete the current element at most a single word. Like `minibuffer-complete-word' but for `completing-read-multiple'." (interactive) - (crm--completion-command (minibuffer-complete-word))) + (crm--completion-command beg end + (completion-in-region--single-word + beg end minibuffer-completion-table minibuffer-completion-predicate))) (defun crm-complete-and-exit () "If all of the minibuffer elements are valid completions then exit. @@ -211,16 +215,14 @@ This function is modeled after `minibuffer-complete-and-exit'." (goto-char (minibuffer-prompt-end)) (while (and doexit - (let ((ol (crm--select-current-element))) - (goto-char (overlay-end ol)) - (unwind-protect - (catch 'exit - (minibuffer-complete-and-exit) - ;; This did not throw `exit', so there was a problem. - (setq doexit nil)) - (goto-char (overlay-end ol)) - (delete-overlay ol)) - (not (eobp))) + (crm--completion-command beg end + (let ((end (copy-marker end t))) + (goto-char end) + (setq doexit nil) + (completion-complete-and-exit beg end + (lambda () (setq doexit t))) + (goto-char end) + (not (eobp)))) (looking-at crm-separator)) ;; Skip to the next element. (goto-char (match-end 0))) diff --git a/lisp/icomplete.el b/lisp/icomplete.el index 104e3363831..9aec829cd97 100644 --- a/lisp/icomplete.el +++ b/lisp/icomplete.el @@ -158,11 +158,13 @@ minibuffer completion.") (add-hook 'icomplete-post-command-hook 'icomplete-exhibit) ;;;_ = icomplete-with-completion-tables -(defvar icomplete-with-completion-tables '(internal-complete-buffer) +(defcustom icomplete-with-completion-tables t "Specialized completion tables with which icomplete should operate. Icomplete does not operate with any specialized completion tables -except those on this list.") +except those on this list." + :type '(choice (const :tag "All" t) + (repeat function))) (defvar icomplete-minibuffer-map (let ((map (make-sparse-keymap))) @@ -177,24 +179,28 @@ except those on this list.") Second entry becomes the first and can be selected with `minibuffer-force-complete-and-exit'." (interactive) - (let* ((comps (completion-all-sorted-completions)) + (let* ((beg (minibuffer-prompt-end)) + (end (point-max)) + (comps (completion-all-sorted-completions beg end)) (last (last comps))) (when comps (setcdr last (cons (car comps) (cdr last))) - (completion--cache-all-sorted-completions (cdr comps))))) + (completion--cache-all-sorted-completions beg end (cdr comps))))) (defun icomplete-backward-completions () "Step backward completions by one entry. Last entry becomes the first and can be selected with `minibuffer-force-complete-and-exit'." (interactive) - (let* ((comps (completion-all-sorted-completions)) + (let* ((beg (minibuffer-prompt-end)) + (end (point-max)) + (comps (completion-all-sorted-completions beg end)) (last-but-one (last comps 2)) (last (cdr last-but-one))) (when (consp last) ; At least two elements in comps (setcdr last-but-one (cdr last)) (push (car last) comps) - (completion--cache-all-sorted-completions comps)))) + (completion--cache-all-sorted-completions beg end comps)))) ;;;_ > icomplete-mode (&optional prefix) ;;;###autoload @@ -263,7 +269,8 @@ and `minibuffer-setup-hook'." "Insert icomplete completions display. Should be run via minibuffer `post-command-hook'. See `icomplete-mode' and `minibuffer-setup-hook'." - (when (and icomplete-mode (icomplete-simple-completing-p)) + (when (and icomplete-mode + (icomplete-simple-completing-p)) ;Shouldn't be necessary. (save-excursion (goto-char (point-max)) ; Insert the match-status information: @@ -319,7 +326,8 @@ matches exist. \(Keybindings for uniquely matched commands are exhibited within the square braces.)" (let* ((md (completion--field-metadata (field-beginning))) - (comps (completion-all-sorted-completions)) + (comps (completion-all-sorted-completions + (minibuffer-prompt-end) (point-max))) (last (if (consp comps) (last comps))) (base-size (cdr last)) (open-bracket (if require-match "(" "[")) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index e07d28a54d0..c505a74c23d 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -38,7 +38,7 @@ ;;; Bugs: -;; - completion-all-sorted-completions list all the completions, whereas +;; - completion-all-sorted-completions lists all the completions, whereas ;; it should only lists the ones that `try-completion' would consider. ;; E.g. it should honor completion-ignored-extensions. ;; - choose-completion can't automatically figure out the boundaries @@ -145,7 +145,7 @@ Like CL's `some'." (let ((firsterror nil) res) (while (and (not res) xs) - (condition-case err + (condition-case-unless-debug err (setq res (funcall fun (pop xs))) (error (unless firsterror (setq firsterror err)) nil))) (or res @@ -623,7 +623,8 @@ If ARGS are provided, then pass MESSAGE through `format'." (message nil))) ;; Clear out any old echo-area message to make way for our new thing. (message nil) - (setq message (if (and (null args) (string-match-p "\\` *\\[.+\\]\\'" message)) + (setq message (if (and (null args) + (string-match-p "\\` *\\[.+\\]\\'" message)) ;; Make sure we can put-text-property. (copy-sequence message) (concat " [" message "]"))) @@ -651,7 +652,7 @@ If ARGS are provided, then pass MESSAGE through `format'." "Return the user input in a minibuffer before point as a string. In Emacs-22, that was what completion commands operated on." (declare (obsolete nil "24.4")) - (buffer-substring (field-beginning) (point))) + (buffer-substring (minibuffer-prompt-end) (point))) (defun delete-minibuffer-contents () "Delete all user input in a minibuffer. @@ -670,8 +671,7 @@ If the value is t the *Completion* buffer is displayed whenever completion is requested but cannot be done. If the value is `lazy', the *Completions* buffer is only displayed after the second failed attempt to complete." - :type '(choice (const nil) (const t) (const lazy)) - :group 'minibuffer) + :type '(choice (const nil) (const t) (const lazy))) (defconst completion-styles-alist '((emacs21 @@ -750,7 +750,6 @@ The available styles are listed in `completion-styles-alist'. Note that `completion-category-overrides' may override these styles for specific categories, such as files, buffers, etc." :type completion--styles-type - :group 'minibuffer :version "23.1") (defcustom completion-category-overrides @@ -880,7 +879,7 @@ Moves point to the end of the new text." (defcustom completion-cycle-threshold nil "Number of completion candidates below which cycling is used. -Depending on this setting `minibuffer-complete' may use cycling, +Depending on this setting `completion-in-region' may use cycling, like `minibuffer-force-complete'. If nil, cycling is never used. If t, cycling is always used. @@ -894,8 +893,7 @@ completion candidates than this number." (over (assq 'cycle (cdr (assq cat completion-category-overrides))))) (if over (cdr over) completion-cycle-threshold))) -(defvar completion-all-sorted-completions nil) -(make-variable-buffer-local 'completion-all-sorted-completions) +(defvar-local completion-all-sorted-completions nil) (defvar-local completion--all-sorted-completions-location nil) (defvar completion-cycling nil) @@ -906,8 +904,8 @@ completion candidates than this number." (if completion-show-inline-help (minibuffer-message msg))) -(defun completion--do-completion (&optional try-completion-function - expect-exact) +(defun completion--do-completion (beg end &optional + try-completion-function expect-exact) "Do the completion and return a summary of what happened. M = completion was performed, the text was Modified. C = there were available Completions. @@ -926,9 +924,7 @@ E = after completion we now have an Exact match. TRY-COMPLETION-FUNCTION is a function to use in place of `try-completion'. EXPECT-EXACT, if non-nil, means that there is no need to tell the user when the buffer's text is already an exact match." - (let* ((beg (field-beginning)) - (end (field-end)) - (string (buffer-substring beg end)) + (let* ((string (buffer-substring beg end)) (md (completion--field-metadata beg)) (comp (funcall (or try-completion-function 'completion-try-completion) @@ -963,7 +959,8 @@ when the buffer's text is already an exact match." (if unchanged (goto-char end) ;; Insert in minibuffer the chars we got. - (completion--replace beg end completion)) + (completion--replace beg end completion) + (setq end (+ beg (length completion)))) ;; Move point to its completion-mandated destination. (forward-char (- comp-pos (length completion))) @@ -972,7 +969,8 @@ when the buffer's text is already an exact match." ;; whether this is a unique completion or not, so try again using ;; the real case (this shouldn't recurse again, because the next ;; time try-completion will return either t or the exact string). - (completion--do-completion try-completion-function expect-exact) + (completion--do-completion beg end + try-completion-function expect-exact) ;; It did find a match. Do we match some possibility exactly now? (let* ((exact (test-completion completion @@ -995,7 +993,7 @@ when the buffer's text is already an exact match." minibuffer-completion-predicate "")) comp-pos))) - (completion-all-sorted-completions)))) + (completion-all-sorted-completions beg end)))) (completion--flush-all-sorted-completions) (cond ((and (consp (cdr comps)) ;; There's something to cycle. @@ -1006,8 +1004,8 @@ when the buffer's text is already an exact match." ;; Not more than completion-cycle-threshold remaining ;; completions: let's cycle. (setq completed t exact t) - (completion--cache-all-sorted-completions comps) - (minibuffer-force-complete)) + (completion--cache-all-sorted-completions beg end comps) + (minibuffer-force-complete beg end)) (completed ;; We could also decide to refresh the completions, ;; if they're displayed (and assuming there are @@ -1024,14 +1022,14 @@ when the buffer's text is already an exact match." (if (pcase completion-auto-help (`lazy (eq this-command last-command)) (_ completion-auto-help)) - (minibuffer-completion-help) + (minibuffer-completion-help beg end) (completion--message "Next char not unique"))) ;; If the last exact completion and this one were the same, it ;; means we've already given a "Complete, but not unique" message ;; and the user's hit TAB again, so now we give him help. (t (if (and (eq this-command last-command) completion-auto-help) - (minibuffer-completion-help)) + (minibuffer-completion-help beg end)) (completion--done completion 'exact (unless expect-exact "Complete, but not unique")))) @@ -1045,6 +1043,11 @@ If no characters can be completed, display a list of possible completions. If you repeat this command after it displayed such a list, scroll the window of possible completions." (interactive) + (completion-in-region (minibuffer-prompt-end) (point-max) + minibuffer-completion-table + minibuffer-completion-predicate)) + +(defun completion--in-region-1 (beg end) ;; If the previous command was not this, ;; mark the completion buffer obsolete. (setq this-command 'completion-at-point) @@ -1067,17 +1070,17 @@ scroll the window of possible completions." nil))) ;; If we're cycling, keep on cycling. ((and completion-cycling completion-all-sorted-completions) - (minibuffer-force-complete) + (minibuffer-force-complete beg end) t) - (t (pcase (completion--do-completion) + (t (pcase (completion--do-completion beg end) (#b000 nil) (_ t))))) -(defun completion--cache-all-sorted-completions (comps) +(defun completion--cache-all-sorted-completions (beg end comps) (add-hook 'after-change-functions 'completion--flush-all-sorted-completions nil t) (setq completion--all-sorted-completions-location - (cons (copy-marker (field-beginning)) (copy-marker (field-end)))) + (cons (copy-marker beg) (copy-marker end))) (setq completion-all-sorted-completions comps)) (defun completion--flush-all-sorted-completions (&optional start end _len) @@ -1097,10 +1100,10 @@ scroll the window of possible completions." (if (eq (car bounds) base) md-at-point (completion-metadata (substring string 0 base) table pred)))) -(defun completion-all-sorted-completions () +(defun completion-all-sorted-completions (start end) (or completion-all-sorted-completions - (let* ((start (field-beginning)) - (end (field-end)) + (let* ((start (or start (minibuffer-prompt-end))) + (end (or end (point-max))) (string (buffer-substring start end)) (md (completion--field-metadata start)) (all (completion-all-completions @@ -1138,18 +1141,20 @@ scroll the window of possible completions." ;; Cache the result. This is not just for speed, but also so that ;; repeated calls to minibuffer-force-complete can cycle through ;; all possibilities. - (completion--cache-all-sorted-completions (nconc all base-size)))))) + (completion--cache-all-sorted-completions + start end (nconc all base-size)))))) (defun minibuffer-force-complete-and-exit () "Complete the minibuffer with first of the matches and exit." (interactive) (minibuffer-force-complete) - (minibuffer--complete-and-exit + (completion--complete-and-exit + (minibuffer-prompt-end) (point-max) #'exit-minibuffer ;; If the previous completion completed to an element which fails ;; test-completion, then we shouldn't exit, but that should be rare. (lambda () (minibuffer-message "Incomplete")))) -(defun minibuffer-force-complete () +(defun minibuffer-force-complete (&optional start end) "Complete the minibuffer to an exact match. Repeated uses step through the possible completions." (interactive) @@ -1157,10 +1162,10 @@ Repeated uses step through the possible completions." ;; FIXME: Need to deal with the extra-size issue here as well. ;; FIXME: ~/src/emacs/t/lisp/minibuffer.el completes to ;; ~/src/emacs/trunk/ and throws away lisp/minibuffer.el. - (let* ((start (copy-marker (field-beginning))) - (end (field-end)) + (let* ((start (copy-marker (or start (minibuffer-prompt-end)))) + (end (or end (point-max))) ;; (md (completion--field-metadata start)) - (all (completion-all-sorted-completions)) + (all (completion-all-sorted-completions start end)) (base (+ start (or (cdr (last all)) 0)))) (cond ((not (consp all)) @@ -1173,10 +1178,11 @@ Repeated uses step through the possible completions." 'finished (when done "Sole completion")))) (t (completion--replace base end (car all)) + (setq end (+ base (length (car all)))) (completion--done (buffer-substring-no-properties start (point)) 'sole) ;; Set cycling after modifying the buffer since the flush hook resets it. (setq completion-cycling t) - (setq this-command 'completion-at-point) ;For minibuffer-complete. + (setq this-command 'completion-at-point) ;For completion-in-region. ;; If completing file names, (car all) may be a directory, so we'd now ;; have a new set of possible completions and might want to reset ;; completion-all-sorted-completions to nil, but we prefer not to, @@ -1184,7 +1190,7 @@ Repeated uses step through the possible completions." ;; through the previous possible completions. (let ((last (last all))) (setcdr last (cons (car all) (cdr last))) - (completion--cache-all-sorted-completions (cdr all))) + (completion--cache-all-sorted-completions start end (cdr all))) ;; Make sure repeated uses cycle, even though completion--done might ;; have added a space or something that moved us outside of the field. ;; (bug#12221). @@ -1223,27 +1229,32 @@ If `minibuffer-completion-confirm' is `confirm-after-completion', `minibuffer-confirm-exit-commands', and accept the input otherwise." (interactive) - (minibuffer--complete-and-exit + (completion-complete-and-exit (minibuffer-prompt-end) (point-max) + #'exit-minibuffer)) + +(defun completion-complete-and-exit (beg end exit-function) + (completion--complete-and-exit + beg end exit-function (lambda () (pcase (condition-case nil - (completion--do-completion nil 'expect-exact) + (completion--do-completion beg end + nil 'expect-exact) (error 1)) - ((or #b001 #b011) (exit-minibuffer)) + ((or #b001 #b011) (funcall exit-function)) (#b111 (if (not minibuffer-completion-confirm) - (exit-minibuffer) + (funcall exit-function) (minibuffer-message "Confirm") nil)) (_ nil))))) -(defun minibuffer--complete-and-exit (completion-function) +(defun completion--complete-and-exit (beg end + exit-function completion-function) "Exit from `require-match' minibuffer. COMPLETION-FUNCTION is called if the current buffer's content does not appear to be a match." - (let ((beg (field-beginning)) - (end (field-end))) (cond ;; Allow user to specify null string - ((= beg end) (exit-minibuffer)) + ((= beg end) (funcall exit-function)) ((test-completion (buffer-substring beg end) minibuffer-completion-table minibuffer-completion-predicate) @@ -1269,7 +1280,7 @@ appear to be a match." ;; that file. (= (length string) (length compl))) (completion--replace beg end compl)))) - (exit-minibuffer)) + (funcall exit-function)) ((memq minibuffer-completion-confirm '(confirm confirm-after-completion)) ;; The user is permitted to exit with an input that's rejected @@ -1280,13 +1291,13 @@ appear to be a match." ;; catches most minibuffer typos). (and (eq minibuffer-completion-confirm 'confirm-after-completion) (not (memq last-command minibuffer-confirm-exit-commands)))) - (exit-minibuffer) + (funcall exit-function) (minibuffer-message "Confirm") nil)) (t ;; Call do-completion, but ignore errors. - (funcall completion-function))))) + (funcall completion-function)))) (defun completion--try-word-completion (string table predicate point md) (let ((comp (completion-try-completion string table predicate point md))) @@ -1381,9 +1392,18 @@ After one word is completed as much as possible, a space or hyphen is added, provided that matches some possible completion. Return nil if there is no valid completion, else t." (interactive) - (pcase (completion--do-completion 'completion--try-word-completion) + (completion-in-region--single-word + (minibuffer-prompt-end) (point-max) + minibuffer-completion-table minibuffer-completion-predicate)) + +(defun completion-in-region--single-word (beg end collection + &optional predicate) + (let ((minibuffer-completion-table collection) + (minibuffer-completion-predicate predicate)) + (pcase (completion--do-completion beg end + #'completion--try-word-completion) (#b000 nil) - (_ t))) + (_ t)))) (defface completions-annotations '((t :inherit italic)) "Face to use for annotations in the *Completions* buffer.") @@ -1395,7 +1415,6 @@ in columns in the *Completions* buffer. If the value is `horizontal', display completions sorted horizontally in alphabetical order, rather than down the screen." :type '(choice (const horizontal) (const vertical)) - :group 'minibuffer :version "23.2") (defun completion--insert-strings (strings) @@ -1504,15 +1523,13 @@ See also `display-completion-list'.") (defface completions-first-difference '((t (:inherit bold))) - "Face added on the first uncommon character in completions in *Completions* buffer." - :group 'completion) + "Face added on the first uncommon character in completions in *Completions* buffer.") (defface completions-common-part '((t nil)) "Face added on the common prefix substring in completions in *Completions* buffer. The idea of `completions-common-part' is that you can use it to make the common parts less visible than normal, so that the rest -of the differing parts is, by contrast, slightly highlighted." - :group 'completion) +of the differing parts is, by contrast, slightly highlighted.") (defun completion-hilit-commonality (completions prefix-len base-size) (when completions @@ -1555,12 +1572,8 @@ alternative, the second serves as annotation. The actual completion alternatives, as inserted, are given `mouse-face' properties of `highlight'. At the end, this runs the normal hook `completion-setup-hook'. -It can find the completion buffer in `standard-output'. - -The obsolete optional arg COMMON-SUBSTRING, if non-nil, should be a string -specifying a common substring for adding the faces -`completions-first-difference' and `completions-common-part' to -the completions buffer." +It can find the completion buffer in `standard-output'." + (declare (advertised-calling-convention (completions) "24.4")) (if common-substring (setq completions (completion-hilit-commonality completions (length common-substring) @@ -1647,19 +1660,19 @@ variables.") (equal pre-msg (and exit-fun (current-message)))) (completion--message message)))) -(defun minibuffer-completion-help () +(defun minibuffer-completion-help (&optional start end) "Display a list of possible completions of the current minibuffer contents." (interactive) (message "Making completion list...") - (let* ((start (field-beginning)) - (end (field-end)) - (string (field-string)) + (let* ((start (or start (minibuffer-prompt-end))) + (end (or end (point-max))) + (string (buffer-substring start end)) (md (completion--field-metadata start)) (completions (completion-all-completions string minibuffer-completion-table minibuffer-completion-predicate - (- (point) (field-beginning)) + (- (point) start) md))) (message nil) (if (or (null completions) @@ -1811,7 +1824,6 @@ exit." (if (memq system-type '(ms-dos windows-nt darwin cygwin)) t nil) "Non-nil means when reading a file name completion ignores case." - :group 'minibuffer :type 'boolean :version "22.1") @@ -1821,22 +1833,15 @@ exit." ;; completions" operation as well. completion-in-region-functions (start end collection predicate) (let ((minibuffer-completion-table collection) - (minibuffer-completion-predicate predicate) - (ol (make-overlay start end nil nil t))) - (overlay-put ol 'field 'completion) + (minibuffer-completion-predicate predicate)) ;; HACK: if the text we are completing is already in a field, we ;; want the completion field to take priority (e.g. Bug#6830). - (overlay-put ol 'priority 100) (when completion-in-region-mode-predicate (completion-in-region-mode 1) (setq completion-in-region--data (list (if (markerp start) start (copy-marker start)) (copy-marker end) collection))) - ;; FIXME: `minibuffer-complete' should call `completion-in-region' rather - ;; than the other way around! - (unwind-protect - (call-interactively 'minibuffer-complete) - (delete-overlay ol))))) + (completion--in-region-1 start end)))) (defvar completion-in-region-mode-map (let ((map (make-sparse-keymap))) @@ -2001,19 +2006,14 @@ The completion method is determined by `completion-at-point-functions'." (lambda () ;; We're still in the same completion field. (let ((newstart (car-safe (funcall hookfun)))) - (and newstart (= newstart start))))) - (ol (make-overlay start end nil nil t))) + (and newstart (= newstart start)))))) ;; FIXME: We should somehow (ab)use completion-in-region-function or ;; introduce a corresponding hook (plus another for word-completion, ;; and another for force-completion, maybe?). - (overlay-put ol 'field 'completion) - (overlay-put ol 'priority 100) (completion-in-region-mode 1) (setq completion-in-region--data (list start (copy-marker end) collection)) - (unwind-protect - (call-interactively 'minibuffer-completion-help) - (delete-overlay ol)))) + (minibuffer-completion-help start end))) (`(,hookfun . ,_) ;; The hook function already performed completion :-( ;; Not much we can do at this point. @@ -2308,7 +2308,6 @@ the minibuffer empty. For some commands, exiting with an empty minibuffer has a special meaning, such as making the current buffer visit no file in the case of `set-visited-file-name'." - :group 'minibuffer :type 'boolean) ;; Not always defined, but only called if next-read-file-uses-dialog-p says so. @@ -2701,7 +2700,6 @@ expression (not containing character ranges like `a-z')." ;; Refresh other vars. (completion-pcm--prepare-delim-re value)) :initialize 'custom-initialize-reset - :group 'minibuffer :type 'string) (defcustom completion-pcm-complete-word-inserts-delimiters nil @@ -2734,7 +2732,8 @@ or a symbol, see `completion-pcm--merge-completions'." (completion-pcm--string->pattern suffix))) (let* ((pattern nil) (p 0) - (p0 p)) + (p0 p) + (pending nil)) (while (and (setq p (string-match completion-pcm--delim-wild-regex string p)) @@ -2751,18 +2750,49 @@ or a symbol, see `completion-pcm--merge-completions'." ;; This is determined by the presence of a submatch-1 which delimits ;; the prefix. (if (match-end 1) (setq p (match-end 1))) - (push (substring string p0 p) pattern) + (unless (= p0 p) + (if pending (push pending pattern)) + (push (substring string p0 p) pattern)) + (setq pending nil) (if (eq (aref string p) ?*) (progn (push 'star pattern) (setq p0 (1+ p))) (push 'any pattern) - (setq p0 p)) - (cl-incf p)) + (if (match-end 1) + (setq p0 p) + (push (substring string p (match-end 0)) pattern) + ;; `any-delim' is used so that "a-b" also finds "array->beginning". + (setq pending 'any-delim) + (setq p0 (match-end 0)))) + (setq p p0)) + (when (> (length string) p0) + (if pending (push pending pattern)) + (push (substring string p0) pattern)) ;; An empty string might be erroneously added at the beginning. ;; It should be avoided properly, but it's so easy to remove it here. - (delete "" (nreverse (cons (substring string p0) pattern)))))) + (delete "" (nreverse pattern))))) + +(defun completion-pcm--optimize-pattern (p) + ;; Remove empty strings in a separate phase since otherwise a "" + ;; might prevent some other optimization, as in '(any "" any). + (setq p (delete "" p)) + (let ((n '())) + (while p + (pcase p + (`(,(and s1 (pred stringp)) ,(and s2 (pred stringp)) . ,rest) + (setq p (cons (concat s1 s2) rest))) + (`(,(and p1 (pred symbolp)) ,(and p2 (guard (eq p1 p2))) . ,_) + (setq p (cdr p))) + (`(star ,(pred symbolp) . ,rest) (setq p `(star . ,rest))) + (`(,(pred symbolp) star . ,rest) (setq p `(star . ,rest))) + (`(point ,(or `any `any-delim) . ,rest) (setq p `(point . ,rest))) + (`(,(or `any `any-delim) point . ,rest) (setq p `(point . ,rest))) + (`(any ,(or `any `any-delim) . ,rest) (setq p `(any . ,rest))) + (`(,(pred symbolp)) (setq p nil)) ;Implicit terminating `any'. + (_ (push (pop p) n)))) + (nreverse n))) (defun completion-pcm--pattern->regex (pattern &optional group) (let ((re @@ -2771,8 +2801,13 @@ or a symbol, see `completion-pcm--merge-completions'." (lambda (x) (cond ((stringp x) (regexp-quote x)) - ((if (consp group) (memq x group) group) "\\(.*?\\)") - (t ".*?"))) + (t + (let ((re (if (eq x 'any-delim) + (concat completion-pcm--delim-wild-regex "*?") + ".*?"))) + (if (if (consp group) (memq x group) group) + (concat "\\(" re "\\)") + re))))) pattern "")))) ;; Avoid pathological backtracking. @@ -2846,11 +2881,11 @@ filter out additional entries (because TABLE might not obey PRED)." (setq string (substring string (car bounds) (+ point (cdr bounds)))) (let* ((relpoint (- point (car bounds))) (pattern (completion-pcm--string->pattern string relpoint)) - (all (condition-case err + (all (condition-case-unless-debug err (funcall filter (completion-pcm--all-completions prefix pattern table pred)) - (error (unless firsterror (setq firsterror err)) nil)))) + (error (setq firsterror err) nil)))) (when (and (null all) (> (car bounds) 0) (null (ignore-errors (try-completion prefix table pred)))) From 4b73fc7347e15f329a9a866f90e4241e064ec66d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 6 Sep 2013 17:20:56 -0700 Subject: [PATCH 022/321] Port --without-x --enable-gcc-warnings to Fedora 19. * configure.ac (WERROR_CFLAGS): Omit redundant use of -Wmissing-field-initializers, -Wswitch, -Wtype-limits, -Wunused-parameter. If there is no window system, also omit -Wsuggest-attribute=const and -Wsuggest-attribute=noreturn; this is needed for Fedora 19. * src/gfilenotify.c (globals_of_gfilenotify): Call g_type_init only if using an older glib version that needs it. --- ChangeLog | 9 +++++++++ configure.ac | 12 ++++++++++++ src/ChangeLog | 6 ++++++ src/gfilenotify.c | 2 ++ 4 files changed, 29 insertions(+) diff --git a/ChangeLog b/ChangeLog index 09cfb9783cc..560f60a1819 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2013-09-07 Paul Eggert + + Port --without-x --enable-gcc-warnings to Fedora 19. + * configure.ac (WERROR_CFLAGS): Omit redundant use of + -Wmissing-field-initializers, -Wswitch, -Wtype-limits, + -Wunused-parameter. If there is no window system, also omit + -Wsuggest-attribute=const and -Wsuggest-attribute=noreturn; this + is needed for Fedora 19. + 2013-09-05 Dmitry Antipov Make --without-x compatible with --enable-gcc-warnings. diff --git a/configure.ac b/configure.ac index cfec49e5645..c7cdc01e3e7 100644 --- a/configure.ac +++ b/configure.ac @@ -826,6 +826,13 @@ else # The following line should be removable at some point. nw="$nw -Wsuggest-attribute=pure" + # This part is merely for shortening the command line, + # since -Wno-FOO needs to be added below regardless. + nw="$nw -Wmissing-field-initializers" + nw="$nw -Wswitch" + nw="$nw -Wtype-limits" + nw="$nw -Wunused-parameter" + # clang is unduly picky about some things. AC_CACHE_CHECK([whether the compiler is clang], [emacs_cv_clang], [AC_COMPILE_IFELSE( @@ -1777,6 +1784,11 @@ fi if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then # Too many warnings for now. + nw= + nw="$nw -Wsuggest-attribute=const" + nw="$nw -Wsuggest-attribute=noreturn" + gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) + gl_WARN_ADD([-Wno-unused-variable]) gl_WARN_ADD([-Wno-unused-but-set-variable]) gl_WARN_ADD([-Wno-unused-but-set-parameter]) diff --git a/src/ChangeLog b/src/ChangeLog index 7f41abc46bb..7f4c3f731f4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-09-07 Paul Eggert + + Port --without-x --enable-gcc-warnings to Fedora 19. + * gfilenotify.c (globals_of_gfilenotify): + Call g_type_init only if using an older glib version that needs it. + 2013-09-06 Dmitry Antipov * lisp.h (last_glyphless_glyph_frame, last_glyphless_glyph_face_id) diff --git a/src/gfilenotify.c b/src/gfilenotify.c index 8f13c72df81..7415c3a2413 100644 --- a/src/gfilenotify.c +++ b/src/gfilenotify.c @@ -249,7 +249,9 @@ WATCH-DESCRIPTOR should be an object returned by `gfile-add-watch'. */) void globals_of_gfilenotify (void) { +#if ! GLIB_CHECK_VERSION (2, 36, 0) g_type_init (); +#endif watch_list = Qnil; } From fc4002bd6462ea122540dc2d29d9b8c2723ae050 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 7 Sep 2013 06:17:39 -0400 Subject: [PATCH 023/321] Auto-commit of generated files. --- autogen/configure | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/autogen/configure b/autogen/configure index 7fe40f5bd51..4be101ce418 100755 --- a/autogen/configure +++ b/autogen/configure @@ -7656,6 +7656,13 @@ fi # The following line should be removable at some point. nw="$nw -Wsuggest-attribute=pure" + # This part is merely for shortening the command line, + # since -Wno-FOO needs to be added below regardless. + nw="$nw -Wmissing-field-initializers" + nw="$nw -Wswitch" + nw="$nw -Wtype-limits" + nw="$nw -Wunused-parameter" + # clang is unduly picky about some things. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is clang" >&5 $as_echo_n "checking whether the compiler is clang... " >&6; } @@ -10342,6 +10349,25 @@ fi if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then # Too many warnings for now. + nw= + nw="$nw -Wsuggest-attribute=const" + nw="$nw -Wsuggest-attribute=noreturn" + + gl_warn_set= + set x $WARN_CFLAGS; shift + for gl_warn_item + do + case " $nw " in + *" $gl_warn_item "*) + ;; + *) + gl_warn_set="$gl_warn_set $gl_warn_item" + ;; + esac + done + WARN_CFLAGS=$gl_warn_set + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-unused-variable" >&5 $as_echo_n "checking whether C compiler handles -Wno-unused-variable... " >&6; } From 37a65b6013ac145031803412b024b89eb74b3db1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 7 Sep 2013 06:21:22 -0400 Subject: [PATCH 024/321] Auto-commit of loaddefs files. --- lisp/dired.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/dired.el b/lisp/dired.el index b9f974234fb..f873aea9bf0 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -4352,7 +4352,7 @@ instead. ;;;*** -;;;### (autoloads nil "dired-x" "dired-x.el" "130484d4c94bb9929c210774f9e475f5") +;;;### (autoloads nil "dired-x" "dired-x.el" "1bf4009b81e55bf51947bc87b2c82994") ;;; Generated autoloads from dired-x.el (autoload 'dired-jump "dired-x" "\ From f2f248e7ef7979b2ff12448d55734f0eb275b94f Mon Sep 17 00:00:00 2001 From: Roland Winkler Date: Sat, 7 Sep 2013 15:59:57 +0530 Subject: [PATCH 025/321] bibtex-biblatex-entry-alist: Add optional field subtitle for entry type book --- lisp/ChangeLog | 5 +++++ lisp/textmodes/bibtex.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eb5861bb21d..5e4c11d5cfb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-07 Roland Winkler + + * textmodes/bibtex.el (bibtex-biblatex-entry-alist): Add optional + field subtitle for entry type book. + 2013-09-06 Stefan Monnier * minibuffer.el: Make minibuffer-complete call completion-in-region diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el index 171f373317a..795c04e31e1 100644 --- a/lisp/textmodes/bibtex.el +++ b/lisp/textmodes/bibtex.el @@ -468,7 +468,7 @@ alternatives, starting from zero." nil (("editor") ("editora") ("editorb") ("editorc") ("translator") ("annotator") ("commentator") - ("introduction") ("foreword") ("afterword") ("titleaddon") + ("introduction") ("foreword") ("afterword") ("subtitle") ("titleaddon") ("maintitle") ("mainsubtitle") ("maintitleaddon") ("language") ("origlanguage") ("volume") ("part") ("edition") ("volumes") ("series") ("number") ("note") ("publisher") ("location") ("isbn") From 1db9ceee691bdc46b2103ae8bbd265b720babdc4 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Sat, 7 Sep 2013 18:39:29 +0800 Subject: [PATCH 026/321] NEWS fix. --- etc/NEWS | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index ad061a040f1..cd69a8e09a0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -172,10 +172,6 @@ You can pick the name of the function and the variables with `C-x 4 a'. * Changes in Specialized Modes and Packages in Emacs 24.4 -** Icomplete-mode by defaults applies to all forms of minibuffer completion. -(setq icomplete-with-completion-tables '(internal-complete-buffer)) -will revert to the old behavior. - ** The debugger's `e' command evaluates the code in the context at point. This includes using the lexical environment at point, which means that `e' now lets you access lexical variables as well. @@ -336,6 +332,10 @@ This is useful to avoid a query when you have no key for that name. *** key bindings to navigate through and select the completions. *** The icomplete-separator is customizable, and its default has changed. *** Removed icomplete-show-key-bindings. +*** Icomplete-mode by defaults applies to all forms of minibuffer completion. +(setq icomplete-with-completion-tables '(internal-complete-buffer)) +will revert to the old behavior. + ** Ido *** Ido has a manual now. From e8dd0787d9c19e81344552d185e9008031f58723 Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Sat, 7 Sep 2013 14:33:50 +0000 Subject: [PATCH 027/321] Correctly fontify Java class constructors. * progmodes/cc-langs.el (c-type-decl-suffix-key): Now matches ")" in Java Mode. (c-recognize-typeless-decls): Set the Java value to t. * progmodes/cc-engine.el (c-forward-decl-or-cast-1): While handling a "(", add a check for, effectively, Java, and handle a "typeless" declaration there. --- lisp/ChangeLog | 10 +++++++ lisp/progmodes/cc-engine.el | 54 ++++++++++++++++++++----------------- lisp/progmodes/cc-langs.el | 5 ++-- 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5e4c11d5cfb..7803db1d1ee 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2013-09-07 Alan Mackenzie + + Correctly fontify Java class constructors. + * progmodes/cc-langs.el (c-type-decl-suffix-key): Now matches ")" + in Java Mode. + (c-recognize-typeless-decls): Set the Java value to t. + * progmodes/cc-engine.el (c-forward-decl-or-cast-1): While + handling a "(", add a check for, effectively, Java, and handle a + "typeless" declaration there. + 2013-09-07 Roland Winkler * textmodes/bibtex.el (bibtex-biblatex-entry-alist): Add optional diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index db2a6c68539..c8a9c461a9d 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -6905,32 +6905,38 @@ comment at the start of cc-engine.el for more info." ;; Skip over type decl prefix operators. (Note similar code in ;; `c-font-lock-declarators'.) - (while (and (looking-at c-type-decl-prefix-key) - (if (and (c-major-mode-is 'c++-mode) - (match-beginning 3)) - ;; If the third submatch matches in C++ then - ;; we're looking at an identifier that's a - ;; prefix only if it specifies a member pointer. - (when (setq got-identifier (c-forward-name)) - (if (looking-at "\\(::\\)") - ;; We only check for a trailing "::" and - ;; let the "*" that should follow be - ;; matched in the next round. - (progn (setq got-identifier nil) t) - ;; It turned out to be the real identifier, - ;; so stop. - nil)) - t)) - - (if (eq (char-after) ?\() + (if (and c-recognize-typeless-decls + (equal c-type-decl-prefix-key "\\<\\>")) + (when (eq (char-after) ?\() (progn (setq paren-depth (1+ paren-depth)) - (forward-char)) - (unless got-prefix-before-parens - (setq got-prefix-before-parens (= paren-depth 0))) - (setq got-prefix t) - (goto-char (match-end 1))) - (c-forward-syntactic-ws)) + (forward-char))) + (while (and (looking-at c-type-decl-prefix-key) + (if (and (c-major-mode-is 'c++-mode) + (match-beginning 3)) + ;; If the third submatch matches in C++ then + ;; we're looking at an identifier that's a + ;; prefix only if it specifies a member pointer. + (when (setq got-identifier (c-forward-name)) + (if (looking-at "\\(::\\)") + ;; We only check for a trailing "::" and + ;; let the "*" that should follow be + ;; matched in the next round. + (progn (setq got-identifier nil) t) + ;; It turned out to be the real identifier, + ;; so stop. + nil)) + t)) + + (if (eq (char-after) ?\() + (progn + (setq paren-depth (1+ paren-depth)) + (forward-char)) + (unless got-prefix-before-parens + (setq got-prefix-before-parens (= paren-depth 0))) + (setq got-prefix t) + (goto-char (match-end 1))) + (c-forward-syntactic-ws))) (setq got-parens (> paren-depth 0)) diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 0116e9ec3dd..80e6189822b 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -2816,7 +2816,8 @@ is in effect when this is matched (see `c-identifier-syntax-table')." "\\>") "") "\\)") - (java idl) "\\([\[\(]\\)") + java "\\([\[\(\)]\\)" + idl "\\([\[\(]\\)") (c-lang-defvar c-type-decl-suffix-key (c-lang-const c-type-decl-suffix-key) 'dont-doc) @@ -2937,7 +2938,7 @@ calls before a brace block. This setting does not affect declarations that are preceded by a declaration starting keyword, so e.g. `c-typeless-decl-kwds' may still be used when it's set to nil." t nil - (c c++ objc) t) + (c c++ objc java) t) (c-lang-defvar c-recognize-typeless-decls (c-lang-const c-recognize-typeless-decls)) From 0ca754d0d8df545ce4c09d65a337f67213e2f82b Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Sun, 8 Sep 2013 21:10:34 +0900 Subject: [PATCH 028/321] international/characters.el: Set category "^" (Combining) for more characters. --- lisp/ChangeLog | 5 +++++ lisp/international/characters.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 527f363362f..30d00750926 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-08 Kenichi Handa + + * international/characters.el: Set category "^" (Combining) for + more characters. + 2013-09-05 Stefan Monnier * subr.el (pop): Use `car-safe'. diff --git a/lisp/international/characters.el b/lisp/international/characters.el index ce6256c1e47..ab83ff0034a 100644 --- a/lisp/international/characters.el +++ b/lisp/international/characters.el @@ -792,7 +792,7 @@ with L, LRE, or LRO Unicode bidi character type.") ;; Combining diacritics (modify-category-entry '(#x300 . #x362) ?^) ;; Combining marks - (modify-category-entry '(#x20d0 . #x20e3) ?^) + (modify-category-entry '(#x20d0 . #x20ff) ?^) ;; Fixme: syntax for symbols &c ) From af9ff9e8058a9034b522d5b77cb7828cc6c137b4 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sun, 8 Sep 2013 17:04:10 +0200 Subject: [PATCH 029/321] Improve compatibility with older Emacsen, and XEmacs. * net/tramp.el (tramp-find-method, tramp-find-user): Call `propertize' only if it is bound. It isn't for XEmacs. (with-tramp-progress-reporter): Do not let-bind `result'. This yields to scoping errors in XEmacs. (tramp-handle-make-auto-save-file-name): New function, moved from tramp-sh.el. * net/tramp-adb.el (tramp-adb-file-name-handler-alist): Add handler for `make-auto-save-file-name'. (tramp-adb--gnu-switches-to-ash): Use `tramp-compat-replace-regexp-in-string'. * net/tramp-cache.el (tramp-cache-print): Call `substring-no-properties' only if it is bound. It isn't for XEmacs. * net/tramp-cmds.el (tramp-bug): Call `propertize' only if it is bound. It isn't for XEmacs. * net/tramp-compat.el (tramp-compat-copy-file): Catch `wrong-number-of-arguments' error. (tramp-compat-replace-regexp-in-string): New defun. * net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): Add handler for `make-auto-save-file-name'. (tramp-gvfs-handle-copy-file): Use `tramp-compat-funcall' for `copy-file'. (tramp-gvfs-file-gvfs-monitor-file-process-filter) (tramp-gvfs-file-name): Use `tramp-compat-replace-regexp-in-string'. (tramp-synce-list-devices): Use `push' instead of `pushnew'. * net/tramp-gw.el (tramp-gw-open-network-stream): Use `tramp-compat-replace-regexp-in-string'. * net/tramp-sh.el (tramp-sh-file-name-handler-alist): Call `tramp-handle-make-auto-save-file-name'. (tramp-sh-handle-make-auto-save-file-name): Move to tramp.el. (tramp-sh-file-gvfs-monitor-dir-process-filter) (tramp-sh-file-inotifywait-process-filter): Use `tramp-compat-replace-regexp-in-string'. (tramp-compute-multi-hops): Use `push' instead of `pushnew'. * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Add handler for `make-auto-save-file-name'. (tramp-smb-handle-copy-directory): Call `tramp-compat-replace-regexp-in-string'. (tramp-smb-get-file-entries): Use `push' instead of `pushnew'. (tramp-smb-handle-copy-file): Improve error message. (tramp-smb-handle-rename-file): Rename directly only in case `newname' does not exist yet. This is a restriction of smbclient. (tramp-smb-maybe-open-connection): Rerun the function only when `auth-sources' is non-nil. --- lisp/ChangeLog | 56 +++++++++++++++++++++++++++++++ lisp/net/tramp-adb.el | 6 ++-- lisp/net/tramp-cache.el | 7 +++- lisp/net/tramp-cmds.el | 4 ++- lisp/net/tramp-compat.el | 72 ++++++++++++++++++++++++++++++++++++---- lisp/net/tramp-gvfs.el | 31 ++++++++++------- lisp/net/tramp-gw.el | 2 +- lisp/net/tramp-sh.el | 57 +++++-------------------------- lisp/net/tramp-smb.el | 20 ++++++----- lisp/net/tramp.el | 62 +++++++++++++++++++++++++++++----- 10 files changed, 227 insertions(+), 90 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e919a8407ec..40a36719a1a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,59 @@ +2013-09-08 Michael Albinus + + Improve compatibility with older Emacsen, and XEmacs. + + * net/tramp.el (tramp-find-method, tramp-find-user): Call `propertize' + only if it is bound. It isn't for XEmacs. + (with-tramp-progress-reporter): Do not let-bind `result'. This + yields to scoping errors in XEmacs. + (tramp-handle-make-auto-save-file-name): New function, moved from + tramp-sh.el. + + * net/tramp-adb.el (tramp-adb-file-name-handler-alist): Add handler + for `make-auto-save-file-name'. + (tramp-adb--gnu-switches-to-ash): Use + `tramp-compat-replace-regexp-in-string'. + + * net/tramp-cache.el (tramp-cache-print): Call + `substring-no-properties' only if it is bound. It isn't for XEmacs. + + * net/tramp-cmds.el (tramp-bug): Call `propertize' only if it is + bound. It isn't for XEmacs. + + * net/tramp-compat.el (tramp-compat-copy-file): Catch + `wrong-number-of-arguments' error. + (tramp-compat-replace-regexp-in-string): New defun. + + * net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): Add handler + for `make-auto-save-file-name'. + (tramp-gvfs-handle-copy-file): Use `tramp-compat-funcall' for + `copy-file'. + (tramp-gvfs-file-gvfs-monitor-file-process-filter) + (tramp-gvfs-file-name): Use `tramp-compat-replace-regexp-in-string'. + (tramp-synce-list-devices): Use `push' instead of `pushnew'. + + * net/tramp-gw.el (tramp-gw-open-network-stream): Use + `tramp-compat-replace-regexp-in-string'. + + * net/tramp-sh.el (tramp-sh-file-name-handler-alist): Call + `tramp-handle-make-auto-save-file-name'. + (tramp-sh-handle-make-auto-save-file-name): Move to tramp.el. + (tramp-sh-file-gvfs-monitor-dir-process-filter) + (tramp-sh-file-inotifywait-process-filter): Use + `tramp-compat-replace-regexp-in-string'. + (tramp-compute-multi-hops): Use `push' instead of `pushnew'. + + * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Add handler + for `make-auto-save-file-name'. + (tramp-smb-handle-copy-directory): Call + `tramp-compat-replace-regexp-in-string'. + (tramp-smb-get-file-entries): Use `push' instead of `pushnew'. + (tramp-smb-handle-copy-file): Improve error message. + (tramp-smb-handle-rename-file): Rename directly only in case + `newname' does not exist yet. This is a restriction of smbclient. + (tramp-smb-maybe-open-connection): Rerun the function only when + `auth-sources' is non-nil. + 2013-09-08 Kenichi Handa * international/characters.el: Set category "^" (Combining) for diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index a5f59227ef7..66d29cb3c8c 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -137,7 +137,7 @@ (insert-directory . tramp-adb-handle-insert-directory) (insert-file-contents . tramp-handle-insert-file-contents) (load . tramp-handle-load) - ;; `make-auto-save-file-name' performed by default handler. + (make-auto-save-file-name . tramp-handle-make-auto-save-file-name) (make-directory . tramp-adb-handle-make-directory) (make-directory-internal . ignore) (make-symbolic-link . ignore) @@ -407,9 +407,9 @@ Convert (\"-al\") to (\"-a\" \"-l\"). Remove arguments like \"--dired\"." (split-string (apply 'concat (mapcar (lambda (s) - (replace-regexp-in-string + (tramp-compat-replace-regexp-in-string "\\(.\\)" " -\\1" - (replace-regexp-in-string "^-" "" s))) + (tramp-compat-replace-regexp-in-string "^-" "" s))) ;; FIXME: Warning about removed switches (long and non-dash). (delq nil (mapcar diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el index b89c5124721..b4e5e4ffd0f 100644 --- a/lisp/net/tramp-cache.el +++ b/lisp/net/tramp-cache.el @@ -289,7 +289,12 @@ KEY identifies the connection, it is either a process or a vector." (when (vectorp key) (dotimes (i (length key)) (when (stringp (aref key i)) - (aset key i (substring-no-properties (aref key i)))))) + (aset key i + (funcall + ;; `substring-no-properties' does not exist in XEmacs. + (if (functionp 'substring-no-properties) + 'substring-no-properties 'identity) + (aref key i)))))) (let ((tmp (format "(%s %s)" (if (processp key) diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el index 937db34a346..de06cd5cbc9 100644 --- a/lisp/net/tramp-cmds.el +++ b/lisp/net/tramp-cmds.el @@ -190,7 +190,9 @@ This includes password cache, file cache, connection cache, buffers." 'tramp-load-report-modules ; pre-hook 'tramp-append-tramp-buffers ; post-hook - (propertize "\n" 'display "\ + (funcall + (if (functionp 'propertize) 'propertize 'progn) + "\n" 'display "\ Enter your bug report in this message, including as much detail as you possibly can about the problem, what you did to cause it and what the local and remote machines are. diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index 8f9d9d8fee5..ca70c1384cb 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el @@ -313,13 +313,21 @@ Not actually used. Use `(format \"%o\" i)' instead?" "Like `copy-file' for Tramp files (compat function)." (cond (preserve-extended-attributes - (tramp-compat-funcall - 'copy-file filename newname ok-if-already-exists keep-date - preserve-uid-gid preserve-extended-attributes)) + (condition-case nil + (tramp-compat-funcall + 'copy-file filename newname ok-if-already-exists keep-date + preserve-uid-gid preserve-extended-attributes) + (wrong-number-of-arguments + (tramp-compat-copy-file + filename newname ok-if-already-exists keep-date preserve-uid-gid)))) (preserve-uid-gid - (tramp-compat-funcall - 'copy-file filename newname ok-if-already-exists keep-date - preserve-uid-gid)) + (condition-case nil + (tramp-compat-funcall + 'copy-file filename newname ok-if-already-exists keep-date + preserve-uid-gid) + (wrong-number-of-arguments + (tramp-compat-copy-file + filename newname ok-if-already-exists keep-date)))) (t (copy-file filename newname ok-if-already-exists keep-date)))) @@ -518,6 +526,58 @@ EOL-TYPE can be one of `dos', `unix', or `mac'." "`dos', `unix', or `mac'"))))) (t (error "Can't change EOL conversion -- is MULE missing?")))) +;; `replace-regexp-in-string' does not exist in XEmacs. +;; Implementation is taken from Emacs 24. +(if (fboundp 'replace-regexp-in-string) + (defalias 'tramp-compat-replace-regexp-in-string 'replace-regexp-in-string) + (defun tramp-compat-replace-regexp-in-string + (regexp rep string &optional fixedcase literal subexp start) + "Replace all matches for REGEXP with REP in STRING. + +Return a new string containing the replacements. + +Optional arguments FIXEDCASE, LITERAL and SUBEXP are like the +arguments with the same names of function `replace-match'. If START +is non-nil, start replacements at that index in STRING. + +REP is either a string used as the NEWTEXT arg of `replace-match' or a +function. If it is a function, it is called with the actual text of each +match, and its value is used as the replacement text. When REP is called, +the match data are the result of matching REGEXP against a substring +of STRING. + +To replace only the first match (if any), make REGEXP match up to \\' +and replace a sub-expression, e.g. + (replace-regexp-in-string \"\\\\(foo\\\\).*\\\\'\" \"bar\" \" foo foo\" nil nil 1) + => \" bar foo\"" + + (let ((l (length string)) + (start (or start 0)) + matches str mb me) + (save-match-data + (while (and (< start l) (string-match regexp string start)) + (setq mb (match-beginning 0) + me (match-end 0)) + ;; If we matched the empty string, make sure we advance by one char + (when (= me mb) (setq me (min l (1+ mb)))) + ;; Generate a replacement for the matched substring. + ;; Operate only on the substring to minimize string consing. + ;; Set up match data for the substring for replacement; + ;; presumably this is likely to be faster than munging the + ;; match data directly in Lisp. + (string-match regexp (setq str (substring string mb me))) + (setq matches + (cons (replace-match (if (stringp rep) + rep + (funcall rep (match-string 0 str))) + fixedcase literal str subexp) + (cons (substring string start mb) ; unmatched prefix + matches))) + (setq start me)) + ;; Reconstruct a string from the pieces. + (setq matches (cons (substring string start l) matches)) ; leftover + (apply #'concat (nreverse matches)))))) + (add-hook 'tramp-unload-hook (lambda () (unload-feature 'tramp-compat 'force))) diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index a1ead96eaea..e764e4767dd 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -453,7 +453,7 @@ Every entry is a list (NAME ADDRESS).") (insert-directory . tramp-gvfs-handle-insert-directory) (insert-file-contents . tramp-gvfs-handle-insert-file-contents) (load . tramp-handle-load) - ;; `make-auto-save-file-name' performed by default handler. + (make-auto-save-file-name . tramp-handle-make-auto-save-file-name) (make-directory . tramp-gvfs-handle-make-directory) (make-directory-internal . ignore) (make-symbolic-link . ignore) @@ -594,15 +594,19 @@ is no information where to trace the message.") (and (tramp-tramp-file-p newname) (not (tramp-gvfs-file-name-p newname)))) - ;; We cannot copy directly. + ;; We cannot call `copy-file' directly. Use + ;; `tramp-compat-funcall' for backward compatibility (number + ;; of arguments). (let ((tmpfile (tramp-compat-make-temp-file filename))) (cond (preserve-extended-attributes - (copy-file + (tramp-compat-funcall + 'copy-file filename tmpfile t keep-date preserve-uid-gid preserve-extended-attributes)) (preserve-uid-gid - (copy-file filename tmpfile t keep-date preserve-uid-gid)) + (tramp-compat-funcall + 'copy-file filename tmpfile t keep-date preserve-uid-gid)) (t (copy-file filename tmpfile t keep-date))) (rename-file tmpfile newname ok-if-already-exists)) @@ -950,7 +954,7 @@ is no information where to trace the message.") (tramp-message proc 6 "%S\n%s" proc string) (setq string (concat rest-string string) ;; Attribute change is returned in unused wording. - string (replace-regexp-in-string + string (tramp-compat-replace-regexp-in-string "ATTRIB CHANGED" "ATTRIBUTE_CHANGED" string)) (while (string-match @@ -960,7 +964,7 @@ is no information where to trace the message.") "Event = \\([^[:blank:]]+\\)[\n\r]+") string) (let ((action (intern-soft - (replace-regexp-in-string + (tramp-compat-replace-regexp-in-string "_" "-" (downcase (match-string 2 string))))) (file (match-string 1 string))) (setq string (replace-match "" nil nil string)) @@ -1158,7 +1162,8 @@ is no information where to trace the message.") (defun tramp-gvfs-file-name (object-path) "Retrieve file name from D-Bus OBJECT-PATH." (dbus-unescape-from-identifier - (replace-regexp-in-string "^.*/\\([^/]+\\)$" "\\1" object-path))) + (tramp-compat-replace-regexp-in-string + "^.*/\\([^/]+\\)$" "\\1" object-path))) (defun tramp-bluez-address (device) "Return bluetooth device address from a given bluetooth DEVICE name." @@ -1709,11 +1714,13 @@ They are retrieved from the hal daemon." (when (with-tramp-dbus-call-method tramp-gvfs-dbus-event-vector t :system tramp-hal-service device tramp-hal-interface-device "PropertyExists" "sync.plugin") - (pushnew - (with-tramp-dbus-call-method tramp-gvfs-dbus-event-vector t - :system tramp-hal-service device tramp-hal-interface-device - "GetPropertyString" "pda.pocketpc.name") - tramp-synce-devices :test #'equal))) + (let ((prop + (with-tramp-dbus-call-method + tramp-gvfs-dbus-event-vector t + :system tramp-hal-service device tramp-hal-interface-device + "GetPropertyString" "pda.pocketpc.name"))) + (unless (member prop tramp-synce-devices) + (push prop tramp-synce-devices))))) (tramp-message tramp-gvfs-dbus-event-vector 10 "%s" tramp-synce-devices) tramp-synce-devices)) diff --git a/lisp/net/tramp-gw.el b/lisp/net/tramp-gw.el index 53dbdbc45d4..e2c7461228f 100644 --- a/lisp/net/tramp-gw.el +++ b/lisp/net/tramp-gw.el @@ -238,7 +238,7 @@ authentication is requested from proxy server, provide it." tramp-gw-vector 6 "\n%s" (format "%s%s\r\n" command - (replace-regexp-in-string ;; no password in trace! + (tramp-compat-replace-regexp-in-string ;; no password in trace! "Basic [^\r\n]+" "Basic xxxxx" authentication t))) (with-current-buffer buffer ;; Trap errors to be traced in the right trace buffer. Often, diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 8ca94122af1..2b7c43a4995 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -850,7 +850,7 @@ of command line.") (insert-file-contents-literally . tramp-sh-handle-insert-file-contents-literally) (load . tramp-handle-load) - (make-auto-save-file-name . tramp-sh-handle-make-auto-save-file-name) + (make-auto-save-file-name . tramp-handle-make-auto-save-file-name) (make-directory . tramp-sh-handle-make-directory) (make-symbolic-link . tramp-sh-handle-make-symbolic-link) (process-file . tramp-sh-handle-process-file) @@ -2978,48 +2978,6 @@ the result will be a local, non-Tramp, filename." (fset 'find-buffer-file-type find-buffer-file-type-function) (fmakunbound 'find-buffer-file-type))))) -(defun tramp-sh-handle-make-auto-save-file-name () - "Like `make-auto-save-file-name' for Tramp files. -Returns a file name in `tramp-auto-save-directory' for autosaving this file." - (let ((tramp-auto-save-directory tramp-auto-save-directory) - (buffer-file-name - (tramp-subst-strs-in-string - '(("_" . "|") - ("/" . "_a") - (":" . "_b") - ("|" . "__") - ("[" . "_l") - ("]" . "_r")) - (buffer-file-name)))) - ;; File name must be unique. This is ensured with Emacs 22 (see - ;; UNIQUIFY element of `auto-save-file-name-transforms'); but for - ;; all other cases we must do it ourselves. - (when (boundp 'auto-save-file-name-transforms) - (mapc - (lambda (x) - (when (and (string-match (car x) buffer-file-name) - (not (car (cddr x)))) - (setq tramp-auto-save-directory - (or tramp-auto-save-directory - (tramp-compat-temporary-file-directory))))) - (symbol-value 'auto-save-file-name-transforms))) - ;; Create directory. - (when tramp-auto-save-directory - (setq buffer-file-name - (expand-file-name buffer-file-name tramp-auto-save-directory)) - (unless (file-exists-p tramp-auto-save-directory) - (make-directory tramp-auto-save-directory t))) - ;; Run plain `make-auto-save-file-name'. There might be an advice when - ;; it is not a magic file name operation (since Emacs 22). - ;; We must deactivate it temporarily. - (if (not (ad-is-active 'make-auto-save-file-name)) - (tramp-run-real-handler 'make-auto-save-file-name nil) - ;; else - (ad-deactivate 'make-auto-save-file-name) - (prog1 - (tramp-run-real-handler 'make-auto-save-file-name nil) - (ad-activate 'make-auto-save-file-name))))) - ;; CCC grok LOCKNAME (defun tramp-sh-handle-write-region (start end filename &optional append visit lockname confirm) @@ -3425,7 +3383,7 @@ Fall back to normal file name handler if no Tramp handler exists." (tramp-message proc 6 "%S\n%s" proc string) (setq string (concat rest-string string) ;; Attribute change is returned in unused wording. - string (replace-regexp-in-string + string (tramp-compat-replace-regexp-in-string "ATTRIB CHANGED" "ATTRIBUTE_CHANGED" string)) (while (string-match @@ -3439,7 +3397,7 @@ Fall back to normal file name handler if no Tramp handler exists." (list proc (intern-soft - (replace-regexp-in-string + (tramp-compat-replace-regexp-in-string "_" "-" (downcase (match-string 4 string)))) ;; File names are returned as absolute paths. We must ;; add the remote prefix. @@ -3475,7 +3433,8 @@ Fall back to normal file name handler if no Tramp handler exists." proc (mapcar (lambda (x) - (intern-soft (replace-regexp-in-string "_" "-" (downcase x)))) + (intern-soft + (tramp-compat-replace-regexp-in-string "_" "-" (downcase x)))) (split-string (match-string 1 line) "," 'omit-nulls)) (match-string 3 line)))) ;; Usually, we would add an Emacs event now. Unfortunately, @@ -4252,7 +4211,7 @@ Gateway hops are already opened." ?h (or (tramp-file-name-host (car target-alist)) "")))) (with-parsed-tramp-file-name proxy l ;; Add the hop. - (pushnew l target-alist :test #'equal) + (push l target-alist) ;; Start next search. (setq choices tramp-default-proxies-alist))))) @@ -4270,11 +4229,11 @@ Gateway hops are already opened." vec 'file-error "Connection `%s' is not supported for gateway access." hop)) ;; Open the gateway connection. - (pushnew + (push (vector (tramp-file-name-method hop) (tramp-file-name-user hop) (tramp-compat-funcall 'tramp-gw-open-connection vec gw hop) nil nil) - target-alist :test #'equal) + target-alist) ;; For the password prompt, we need the correct values. ;; Therefore, we must remember the gateway vector. But we ;; cannot do it as connection property, because it shouldn't diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index f05a54f46f7..1d4880a9f32 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -229,7 +229,7 @@ See `tramp-actions-before-shell' for more info.") (insert-directory . tramp-smb-handle-insert-directory) (insert-file-contents . tramp-handle-insert-file-contents) (load . tramp-handle-load) - ;; `make-auto-save-file-name' performed by default handler. + (make-auto-save-file-name . tramp-handle-make-auto-save-file-name) (make-directory . tramp-smb-handle-make-directory) (make-directory-internal . tramp-smb-handle-make-directory-internal) (make-symbolic-link . tramp-smb-handle-make-symbolic-link) @@ -403,7 +403,7 @@ pass to the OPERATION." (port (tramp-file-name-port v)) (share (tramp-smb-get-share v)) (localname (file-name-as-directory - (replace-regexp-in-string + (tramp-compat-replace-regexp-in-string "\\\\" "/" (tramp-smb-get-localname v)))) (tmpdir (make-temp-name (expand-file-name @@ -537,7 +537,8 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (unless (tramp-smb-send-command v (format "put \"%s\" \"%s\"" filename (tramp-smb-get-localname v))) - (tramp-error v 'file-error "Cannot copy `%s'" filename)))))) + (tramp-error + v 'file-error "Cannot copy `%s' to `%s'" filename newname)))))) ;; KEEP-DATE handling. (when keep-date @@ -1151,7 +1152,8 @@ target of the symlink differ." (tramp-dissect-file-name (if (file-remote-p filename) filename newname)) 0 (format "Renaming %s to %s" filename newname) - (if (and (tramp-equal-remote filename newname) + (if (and (not (file-exists-p newname)) + (tramp-equal-remote filename newname) (string-equal (tramp-smb-get-share (tramp-dissect-file-name filename)) (tramp-smb-get-share (tramp-dissect-file-name newname)))) @@ -1364,14 +1366,14 @@ Result is a list of (LOCALNAME MODE SIZE MONTH DAY TIME YEAR)." (while (not (eobp)) (setq entry (tramp-smb-read-file-entry share)) (forward-line) - (when entry (pushnew entry res :test #'equal)))) + (when entry (push entry res)))) ;; Cache share entries. (unless share (tramp-set-connection-property v "share-cache" res))) ;; Add directory itself. - (pushnew '("" "drwxrwxrwx" 0 (0 0)) res :test #'equal) + (push '("" "drwxrwxrwx" 0 (0 0)) res) ;; There's a very strange error (debugged with XEmacs 21.4.14) ;; If there's no short delay, it returns nil. No idea about. @@ -1719,8 +1721,10 @@ If ARGUMENT is non-nil, use it as argument for (error (with-current-buffer (tramp-get-connection-buffer vec) (goto-char (point-min)) - (if (search-forward-regexp - tramp-smb-wrong-passwd-regexp nil t) + (if (and (boundp 'auth-sources) + (symbol-value 'auth-sources) + (search-forward-regexp + tramp-smb-wrong-passwd-regexp nil t)) ;; Disable `auth-source' and `password-cache'. (let (auth-sources) (tramp-cleanup vec) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 727536b2e10..6c1ee70b205 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1222,10 +1222,11 @@ their replacement." ;; This works with the current set of `tramp-obsolete-methods'. ;; Must be improved, if their are more sophisticated replacements. (setq result (substring result 0 -1))) - ;; We must mark, whether a default value has been used. - (if (or method (null result)) + ;; We must mark, whether a default value has been used. Not + ;; applicable for XEmacs. + (if (or method (null result) (null (functionp 'propertize))) result - (propertize result 'tramp-default t)))) + (tramp-compat-funcall 'propertize result 'tramp-default t)))) (defun tramp-find-user (method user host) "Return the right user string to use. @@ -1243,10 +1244,11 @@ This is USER, if non-nil. Otherwise, do a lookup in (setq choices nil))) luser) tramp-default-user))) - ;; We must mark, whether a default value has been used. - (if (or user (null result)) + ;; We must mark, whether a default value has been used. Not + ;; applicable for XEmacs. + (if (or user (null result) (null (functionp 'propertize))) result - (propertize result 'tramp-default t)))) + (tramp-compat-funcall 'propertize result 'tramp-default t)))) (defun tramp-find-host (method user host) "Return the right host string to use. @@ -1641,7 +1643,7 @@ without a visible progress reporter." (declare (indent 3) (debug t)) `(progn (tramp-message ,vec ,level "%s..." ,message) - (let ((result "failed") + (let ((cookie "failed") (tm ;; We start a pulsing progress reporter after 3 seconds. Feature ;; introduced in Emacs 24.1. @@ -1656,10 +1658,10 @@ without a visible progress reporter." #'tramp-progress-reporter-update pr))))))) (unwind-protect ;; Execute the body. - (prog1 (progn ,@body) (setq result "done")) + (prog1 (progn ,@body) (setq cookie "done")) ;; Stop progress reporter. (if tm (tramp-compat-funcall 'cancel-timer tm)) - (tramp-message ,vec ,level "%s...%s" ,message result))))) + (tramp-message ,vec ,level "%s...%s" ,message cookie))))) (tramp-compat-font-lock-add-keywords 'emacs-lisp-mode '("\\")) @@ -3920,6 +3922,48 @@ Return the local name of the temporary file." ;;; Auto saving to a special directory: +(defun tramp-handle-make-auto-save-file-name () + "Like `make-auto-save-file-name' for Tramp files. +Returns a file name in `tramp-auto-save-directory' for autosaving this file." + (let ((tramp-auto-save-directory tramp-auto-save-directory) + (buffer-file-name + (tramp-subst-strs-in-string + '(("_" . "|") + ("/" . "_a") + (":" . "_b") + ("|" . "__") + ("[" . "_l") + ("]" . "_r")) + (buffer-file-name)))) + ;; File name must be unique. This is ensured with Emacs 22 (see + ;; UNIQUIFY element of `auto-save-file-name-transforms'); but for + ;; all other cases we must do it ourselves. + (when (boundp 'auto-save-file-name-transforms) + (mapc + (lambda (x) + (when (and (string-match (car x) buffer-file-name) + (not (car (cddr x)))) + (setq tramp-auto-save-directory + (or tramp-auto-save-directory + (tramp-compat-temporary-file-directory))))) + (symbol-value 'auto-save-file-name-transforms))) + ;; Create directory. + (when tramp-auto-save-directory + (setq buffer-file-name + (expand-file-name buffer-file-name tramp-auto-save-directory)) + (unless (file-exists-p tramp-auto-save-directory) + (make-directory tramp-auto-save-directory t))) + ;; Run plain `make-auto-save-file-name'. There might be an advice when + ;; it is not a magic file name operation (since Emacs 22). + ;; We must deactivate it temporarily. + (if (not (ad-is-active 'make-auto-save-file-name)) + (tramp-run-real-handler 'make-auto-save-file-name nil) + ;; else + (ad-deactivate 'make-auto-save-file-name) + (prog1 + (tramp-run-real-handler 'make-auto-save-file-name nil) + (ad-activate 'make-auto-save-file-name))))) + (unless (tramp-exists-file-name-handler 'make-auto-save-file-name) (defadvice make-auto-save-file-name (around tramp-advice-make-auto-save-file-name () activate) From eb31a86cb21c2f19a34830d3b7cdf7a087be826b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 8 Sep 2013 14:01:25 -0400 Subject: [PATCH 030/321] * doc/lispref/macros.texi (Defining Macros): Prefer "function" to "lambda expression". Fixes: debbugs:15296 --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/macros.texi | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 8b5aa65ff96..145d595b1d2 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2013-09-08 Stefan Monnier + + * macros.texi (Defining Macros): Prefer "function" to "lambda + expression" (bug#15296). + 2013-08-28 Paul Eggert * Makefile.in (SHELL): Now @SHELL@, not /bin/sh, diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi index 5520bbbd1df..a2526f383aa 100644 --- a/doc/lispref/macros.texi +++ b/doc/lispref/macros.texi @@ -191,8 +191,8 @@ During Compile}). @section Defining Macros A Lisp macro object is a list whose @sc{car} is @code{macro}, and -whose @sc{cdr} is a lambda expression. Expansion of the macro works -by applying the lambda expression (with @code{apply}) to the list of +whose @sc{cdr} is a function. Expansion of the macro works +by applying the function (with @code{apply}) to the list of @emph{unevaluated} arguments from the macro call. It is possible to use an anonymous Lisp macro just like an anonymous From 144e38fe1809f1fcf96ce04b5abdfbca585e5251 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 8 Sep 2013 16:15:17 -0700 Subject: [PATCH 031/321] * lisp/saveplace.el (load-save-place-alist-from-file): Demote errors. Fixes: debbugs:15305 --- lisp/ChangeLog | 5 +++++ lisp/saveplace.el | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 40a36719a1a..a7cb40fee60 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-08 Glenn Morris + + * saveplace.el (load-save-place-alist-from-file): + Demote errors. (Bug#15305) + 2013-09-08 Michael Albinus Improve compatibility with older Emacsen, and XEmacs. diff --git a/lisp/saveplace.el b/lisp/saveplace.el index 2ddac6d6c43..e9dc12b00fe 100644 --- a/lisp/saveplace.el +++ b/lisp/saveplace.el @@ -255,8 +255,13 @@ may have changed\) back to `save-place-alist'." (insert-file-contents file) (goto-char (point-min)) (setq save-place-alist - (car (read-from-string - (buffer-substring (point-min) (point-max))))) + ;; This is with-demoted-errors, but we want to + ;; mention save-place in any error message. + (condition-case err + (car (read-from-string + (buffer-substring (point-min) (point-max)))) + (error (message "Error reading save-place-file: %S" err) + nil))) ;; If there is a limit, and we're over it, then we'll ;; have to truncate the end of the list: From 7dc61a66e79e4d6102e2574e99eb704184e802b7 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 8 Sep 2013 16:31:14 -0700 Subject: [PATCH 032/321] * doc/misc/emacs-gnutls.texi: Tweak direntry. * info/dir: Tweak emacs-gnutls entry. --- ChangeLog | 4 ++++ doc/misc/ChangeLog | 4 ++++ doc/misc/emacs-gnutls.texi | 2 +- info/dir | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 560f60a1819..0111f18ce70 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-09-08 Glenn Morris + + * info/dir: Tweak emacs-gnutls entry. + 2013-09-07 Paul Eggert Port --without-x --enable-gcc-warnings to Fedora 19. diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 85143fc2692..e3ad5688f22 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,7 @@ +2013-09-08 Glenn Morris + + * emacs-gnutls.texi: Tweak direntry. + 2013-09-06 Michael Albinus * tramp.texi (Alternative Syntax): Remove chapter. diff --git a/doc/misc/emacs-gnutls.texi b/doc/misc/emacs-gnutls.texi index 740dfee41ed..b1c4c13c5ff 100644 --- a/doc/misc/emacs-gnutls.texi +++ b/doc/misc/emacs-gnutls.texi @@ -25,7 +25,7 @@ modify this GNU manual.'' @dircategory Emacs network features @direntry -* GnuTLS: (emacs-gnutls). The Emacs GnuTLS integration. +* Emacs GnuTLS: (emacs-gnutls). The Emacs GnuTLS integration. @end direntry @titlepage diff --git a/info/dir b/info/dir index b6ec2845c3d..f6ccbda30ff 100644 --- a/info/dir +++ b/info/dir @@ -41,7 +41,7 @@ Emacs editing modes Emacs network features * EUDC: (eudc). Emacs client for directory servers (LDAP, PH). * Gnus: (gnus). The newsreader Gnus. -* GnuTLS: (emacs-gnutls). The Emacs GnuTLS integration. +* Emacs GnuTLS: (emacs-gnutls). The Emacs GnuTLS integration. * Mairix: (mairix-el). Emacs interface to the Mairix mail indexer. * MH-E: (mh-e). Emacs interface to the MH mail system. * Message: (message). Mail and news composition mode that From 335142f9f36cc8e15e5770d2ac5373159046a53d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 8 Sep 2013 16:50:23 -0700 Subject: [PATCH 033/321] Rename configure's --without-compress-info to --without-compress-install * configure.ac (--without-compress-install): Rename from --without-compress-info. (GZIP_INFO): Remove. (GZIP_PROG): Allow --without-compress-install to disable it. * Makefile.in (GZIP_INFO): Remove all references. * etc/NEWS: Mention this. Fixes: debbugs:9789 --- ChangeLog | 6 ++++++ Makefile.in | 10 ++++------ configure.ac | 13 ++++++------- etc/NEWS | 4 ++++ 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0111f18ce70..03a04c6367c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2013-09-08 Glenn Morris + * configure.ac (--without-compress-install): + Rename from --without-compress-info. (Bug#9789) + (GZIP_INFO): Remove. + (GZIP_PROG): Allow --without-compress-install to disable it. + * Makefile.in (GZIP_INFO): Remove all references. + * info/dir: Tweak emacs-gnutls entry. 2013-09-07 Paul Eggert diff --git a/Makefile.in b/Makefile.in index 204099cc202..c6254fd6098 100644 --- a/Makefile.in +++ b/Makefile.in @@ -259,8 +259,6 @@ LN_S_FILEONLY = @LN_S_FILEONLY@ # We use gzip to compress installed .el files. GZIP_PROG = @GZIP_PROG@ -# If non-nil, gzip the installed Info and man pages. -GZIP_INFO = @GZIP_INFO@ # ============================= Targets ============================== @@ -662,7 +660,7 @@ install-info: info for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \ (cd $${thisdir}; \ ${INSTALL_DATA} ${srcdir}/info/$$f $(DESTDIR)${infodir}/$$f); \ - ( [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ] ) || continue ; \ + [ -n "${GZIP_PROG}" ] || continue ; \ rm -f $(DESTDIR)${infodir}/$$f.gz; \ ${GZIP_PROG} -9n $(DESTDIR)${infodir}/$$f; \ done; \ @@ -684,7 +682,7 @@ install-man: dest=`echo "$${page}" | sed -e 's/\.1$$//' -e '$(TRANSFORM)'`.1; \ (cd $${thisdir}; \ ${INSTALL_DATA} ${mansrcdir}/$${page} $(DESTDIR)${man1dir}/$${dest}); \ - ( [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ] ) || continue ; \ + [ -n "${GZIP_PROG}" ] || continue ; \ rm -f $(DESTDIR)${man1dir}/$${dest}.gz; \ ${GZIP_PROG} -9n $(DESTDIR)${man1dir}/$${dest} || true; \ done @@ -754,12 +752,12 @@ uninstall: uninstall-$(NTDIR) uninstall-doc for elt in ${INFO_NONMISC} $${info_misc}; do \ (cd $${thisdir}; \ $(INSTALL_INFO) --remove --info-dir=$(DESTDIR)${infodir} $(DESTDIR)${infodir}/$$elt); \ - if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ + if [ -n "${GZIP_PROG}" ]; then \ ext=.gz; else ext=; fi; \ rm -f $$elt$$ext $$elt-[1-9]$$ext $$elt-[1-9][0-9]$$ext; \ done; \ fi) - (if [ -n "${GZIP_INFO}" ] && [ -n "${GZIP_PROG}" ]; then \ + (if [ -n "${GZIP_PROG}" ]; then \ ext=.gz; else ext=; fi; \ if cd ${mansrcdir}; then \ for page in *.1; do \ diff --git a/configure.ac b/configure.ac index c7cdc01e3e7..ba5e9d2fb08 100644 --- a/configure.ac +++ b/configure.ac @@ -266,13 +266,9 @@ AC_SUBST(cache_file) ## This is an option because I do not know if all info/man support ## compressed files, nor how to test if they do so. -OPTION_DEFAULT_ON([compress-info],[don't compress the installed Info pages]) -if test $with_compress_info = yes; then - GZIP_INFO=yes -else - GZIP_INFO= -fi -AC_SUBST(GZIP_INFO) +OPTION_DEFAULT_ON([compress-install], + [don't compress some files (.el, .info, etc.) when installing. Equivalent to: +make GZIP_PROG= install]) AC_ARG_WITH([pkg-config-prog],dnl [AS_HELP_STRING([--with-pkg-config-prog=FILENAME], @@ -950,6 +946,9 @@ AC_PATH_PROG(INSTALL_INFO, install-info, :, dnl Don't use GZIP, which is used by gzip for additional parameters. AC_PATH_PROG(GZIP_PROG, gzip) +test $with_compress_install != yes && \ + GZIP_PROG=" # $GZIP_PROG # (disabled by configure --without-compress-install)" + if test $opsys = gnu-linux; then AC_PATH_PROG(PAXCTL, paxctl,, [$PATH$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/sbin]) diff --git a/etc/NEWS b/etc/NEWS index cd69a8e09a0..7da67efeadd 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -34,6 +34,10 @@ build time. To prevent this, use the configure option `--with-file-notification-no'. See below for file-notify features. FIXME? This feature is not available for the Nextstep port. (?) +** The configure option `without-compress-info' has been generalized, +and renamed to `without-compress-install'. It now prevents compression +of _any_ files during installation. + ** The configure option --with-crt-dir has been removed. It is no longer needed, as the crt*.o files are no longer linked specially. From 66f3731f432de341b61be1083415711d3d124a1a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 8 Sep 2013 17:10:58 -0700 Subject: [PATCH 034/321] * configure.ac: Tweak previous change. Only disable GZIP_PROG if there is something to disable. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index ba5e9d2fb08..2e90f5fb7b5 100644 --- a/configure.ac +++ b/configure.ac @@ -946,7 +946,7 @@ AC_PATH_PROG(INSTALL_INFO, install-info, :, dnl Don't use GZIP, which is used by gzip for additional parameters. AC_PATH_PROG(GZIP_PROG, gzip) -test $with_compress_install != yes && \ +test $with_compress_install != yes && test -n "$GZIP_PROG" && \ GZIP_PROG=" # $GZIP_PROG # (disabled by configure --without-compress-install)" if test $opsys = gnu-linux; then From 8d17ef8d542e37d3f2972c80ac448a990cbdd040 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 9 Sep 2013 00:34:15 -0700 Subject: [PATCH 035/321] Fix treatment of ld's nocombreloc option * configure.ac (LDFLAGS_NOCOMBRELOC): New variable. (LDFLAGS): Move nocombreloc option from here... (LD_SWITCH_SYSTEM_TEMACS): ... to here. This is an essential option that should not be in LDFLAGS, because the user may override that at build time; eg http://bugs.debian.org/684788. temacs is the only thing that actually needs this option; this is where it was orginally: http://lists.gnu.org/archive/html/emacs-pretest-bug/2004-03/msg00170.html --- ChangeLog | 11 +++++++++++ configure.ac | 11 ++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 03a04c6367c..2100041e9fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2013-09-09 Glenn Morris + + * configure.ac (LDFLAGS_NOCOMBRELOC): New variable. + (LDFLAGS): Move nocombreloc option from here... + (LD_SWITCH_SYSTEM_TEMACS): ... to here. + This is an essential option that should not be in LDFLAGS, + because the user may override that at build time; eg + http://bugs.debian.org/684788. temacs is the only thing + that actually needs this option; this is where it was orginally: + http://lists.gnu.org/archive/html/emacs-pretest-bug/2004-03/msg00170.html + 2013-09-08 Glenn Morris * configure.ac (--without-compress-install): diff --git a/configure.ac b/configure.ac index 2e90f5fb7b5..b18eeb90de1 100644 --- a/configure.ac +++ b/configure.ac @@ -1028,17 +1028,20 @@ dnl if not built to support GNU ld. late_LDFLAGS=$LDFLAGS if test x$GCC = xyes; then - LDFLAGS="$LDFLAGS -Wl,-znocombreloc" + LDFLAGS_NOCOMBRELOC="-Wl,-znocombreloc" else - LDFLAGS="$LDFLAGS -znocombreloc" + LDFLAGS_NOCOMBRELOC="-znocombreloc" fi +LDFLAGS="$LDFLAGS $LDFLAGS_NOCOMBRELOC" + AC_MSG_CHECKING([for -znocombreloc]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [AC_MSG_RESULT(yes)], - LDFLAGS=$late_LDFLAGS + LDFLAGS_NOCOMBRELOC= [AC_MSG_RESULT(no)]) +LDFLAGS=$late_LDFLAGS dnl The function dump-emacs will not be defined and temacs will do dnl (load "loadup") automatically unless told otherwise. @@ -4740,6 +4743,8 @@ if test x$ac_enable_profiling != x ; then esac fi +LD_SWITCH_SYSTEM_TEMACS="$LDFLAGS_NOCOMBRELOC $LD_SWITCH_SYSTEM_TEMACS" + AC_SUBST(LD_SWITCH_SYSTEM_TEMACS) ## MinGW-specific post-link processing of temacs. From 992ec28ae836a2954f6f24ce49b4fba0cde1bf7d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 9 Sep 2013 06:17:42 -0400 Subject: [PATCH 036/321] Auto-commit of generated files. --- autogen/Makefile.in | 1 - autogen/configure | 35 +++++++++++++++++++---------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/autogen/Makefile.in b/autogen/Makefile.in index f26d3dce212..19904e8631e 100644 --- a/autogen/Makefile.in +++ b/autogen/Makefile.in @@ -677,7 +677,6 @@ GSETTINGS_LIBS = @GSETTINGS_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ GTK_OBJ = @GTK_OBJ@ -GZIP_INFO = @GZIP_INFO@ GZIP_PROG = @GZIP_PROG@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ATOLL = @HAVE_ATOLL@ diff --git a/autogen/configure b/autogen/configure index 4be101ce418..325b333f00d 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1442,7 +1442,6 @@ build_vendor build_cpu build PROFILING_CFLAGS -GZIP_INFO cache_file am__untar am__tar @@ -1545,7 +1544,7 @@ with_gnutls with_zlib with_file_notification with_makeinfo -with_compress_info +with_compress_install with_pkg_config_prog with_gameuser with_gnustep_conf @@ -2278,7 +2277,9 @@ Optional Packages: use a file notification library (LIB one of: yes, gfile, inotify, w32, no) --without-makeinfo don't require makeinfo for building manuals - --without-compress-info don't compress the installed Info pages + --without-compress-install + don't compress some files (.el, .info, etc.) when + installing. Equivalent to: make GZIP_PROG= install --with-pkg-config-prog=FILENAME file name of pkg-config for finding GTK and librsvg --with-gameuser=USER user for shared game score files @@ -4429,17 +4430,11 @@ fi ## This is an option because I do not know if all info/man support ## compressed files, nor how to test if they do so. -# Check whether --with-compress-info was given. -if test "${with_compress_info+set}" = set; then : - withval=$with_compress_info; +# Check whether --with-compress-install was given. +if test "${with_compress_install+set}" = set; then : + withval=$with_compress_install; else - with_compress_info=$with_features -fi - -if test $with_compress_info = yes; then - GZIP_INFO=yes -else - GZIP_INFO= + with_compress_install=$with_features fi @@ -8618,6 +8613,9 @@ fi +test $with_compress_install != yes && test -n "$GZIP_PROG" && \ + GZIP_PROG=" # $GZIP_PROG # (disabled by configure --without-compress-install)" + if test $opsys = gnu-linux; then # Extract the first word of "paxctl", so it can be a program name with args. set dummy paxctl; ac_word=$2 @@ -8783,11 +8781,13 @@ fi late_LDFLAGS=$LDFLAGS if test x$GCC = xyes; then - LDFLAGS="$LDFLAGS -Wl,-znocombreloc" + LDFLAGS_NOCOMBRELOC="-Wl,-znocombreloc" else - LDFLAGS="$LDFLAGS -znocombreloc" + LDFLAGS_NOCOMBRELOC="-znocombreloc" fi +LDFLAGS="$LDFLAGS $LDFLAGS_NOCOMBRELOC" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -znocombreloc" >&5 $as_echo_n "checking for -znocombreloc... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8805,13 +8805,14 @@ if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else - LDFLAGS=$late_LDFLAGS + LDFLAGS_NOCOMBRELOC= { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext +LDFLAGS=$late_LDFLAGS test "x$CANNOT_DUMP" = "x" && CANNOT_DUMP=no case "$opsys" in @@ -29051,6 +29052,8 @@ if test x$ac_enable_profiling != x ; then esac fi +LD_SWITCH_SYSTEM_TEMACS="$LDFLAGS_NOCOMBRELOC $LD_SWITCH_SYSTEM_TEMACS" + ## MinGW-specific post-link processing of temacs. From fd462129af606e37146cad265284ff4097051ad8 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 9 Sep 2013 16:15:45 +0400 Subject: [PATCH 037/321] Cleanup frame flushing. * dispextern.h (struct redisplay_interface): Drop flush_display_optional because flush_display is enough for X and flushing via RIF is just a no-op for others. * frame.h (flush_frame): New function. * dispnew.c (update_frame): * minibuf.c (read_minibuf): * xdisp.c (echo_area_display, redisplay_preserve_echo_area): Use it. * keyboard.c (detect_input_pending_run_timers): Do not flush all frames but selected one in redisplay_preserve_echo_area. * nsterm.m (ns_flush): Remove no-op. (ns_redisplay_interface): Adjust user. * w32term.h (x_flush): Remove no-op. (w32_redisplay_interface): Adjust user. * xterm.c (x_flush): Simplify because we do not flush all frames at once any more. Adjust comment. (x_redisplay_interface): Adjust user. --- src/ChangeLog | 21 +++++++++++++++++++++ src/dispextern.h | 5 ----- src/dispnew.c | 2 +- src/frame.h | 10 ++++++++++ src/keyboard.c | 15 +-------------- src/minibuf.c | 7 +------ src/nsterm.m | 15 +-------------- src/w32term.c | 8 +------- src/xdisp.c | 6 ++---- src/xterm.c | 23 +++-------------------- 10 files changed, 41 insertions(+), 71 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7f4c3f731f4..231d9771e15 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,24 @@ +2013-09-09 Dmitry Antipov + + Cleanup frame flushing. + * dispextern.h (struct redisplay_interface): Drop + flush_display_optional because flush_display is enough + for X and flushing via RIF is just a no-op for others. + * frame.h (flush_frame): New function. + * dispnew.c (update_frame): + * minibuf.c (read_minibuf): + * xdisp.c (echo_area_display, redisplay_preserve_echo_area): + Use it. + * keyboard.c (detect_input_pending_run_timers): Do not flush + all frames but selected one in redisplay_preserve_echo_area. + * nsterm.m (ns_flush): Remove no-op. + (ns_redisplay_interface): Adjust user. + * w32term.h (x_flush): Remove no-op. + (w32_redisplay_interface): Adjust user. + * xterm.c (x_flush): Simplify because we do not flush all + frames at once any more. Adjust comment. + (x_redisplay_interface): Adjust user. + 2013-09-07 Paul Eggert Port --without-x --enable-gcc-warnings to Fedora 19. diff --git a/src/dispextern.h b/src/dispextern.h index f15da1e6564..67de6bffabf 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -2796,11 +2796,6 @@ struct redisplay_interface /* Flush the display of frame F. For X, this is XFlush. */ void (*flush_display) (struct frame *f); - /* Flush the display of frame F if non-NULL. This is called - during redisplay, and should be NULL on systems which flush - automatically before reading input. */ - void (*flush_display_optional) (struct frame *f); - /* Clear the mouse highlight in window W, if there is any. */ void (*clear_window_mouse_face) (struct window *w); diff --git a/src/dispnew.c b/src/dispnew.c index 00abf65248c..74ecfa88bde 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -3068,7 +3068,7 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p) at least the fringes are not redrawn in a timely manner. ++kfs */ if (f->force_flush_display_p) { - FRAME_RIF (f)->flush_display (f); + flush_frame (f); f->force_flush_display_p = 0; } } diff --git a/src/frame.h b/src/frame.h index 3dfbac15709..3d9457ce4d7 100644 --- a/src/frame.h +++ b/src/frame.h @@ -1276,6 +1276,16 @@ extern void x_query_color (struct frame *f, XColor *); #endif /* HAVE_WINDOW_SYSTEM */ + +FRAME_INLINE void +flush_frame (struct frame *f) +{ + struct redisplay_interface *rif = FRAME_RIF (f); + + if (rif && rif->flush_display) + rif->flush_display (f); +} + /*********************************************************************** Multimonitor data ***********************************************************************/ diff --git a/src/keyboard.c b/src/keyboard.c index ed70e288c84..440820c57db 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -9873,20 +9873,7 @@ detect_input_pending_run_timers (bool do_display) get_input_pending (READABLE_EVENTS_DO_TIMERS_NOW); if (old_timers_run != timers_run && do_display) - { - redisplay_preserve_echo_area (8); - /* The following fixes a bug when using lazy-lock with - lazy-lock-defer-on-the-fly set to t, i.e. when fontifying - from an idle timer function. The symptom of the bug is that - the cursor sometimes doesn't become visible until the next X - event is processed. --gerd. */ - { - Lisp_Object tail, frame; - FOR_EACH_FRAME (tail, frame) - if (FRAME_RIF (XFRAME (frame))) - FRAME_RIF (XFRAME (frame))->flush_display (XFRAME (frame)); - } - } + redisplay_preserve_echo_area (8); return input_pending; } diff --git a/src/minibuf.c b/src/minibuf.c index 7403fc6c32d..cc6f234f7da 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -672,12 +672,7 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt, XWINDOW (minibuf_window)->cursor.x = 0; XWINDOW (minibuf_window)->must_be_updated_p = 1; update_frame (XFRAME (selected_frame), 1, 1); - { - struct frame *f = XFRAME (XWINDOW (minibuf_window)->frame); - struct redisplay_interface *rif = FRAME_RIF (f); - if (rif && rif->flush_display) - rif->flush_display (f); - } + flush_frame (XFRAME (XWINDOW (minibuf_window)->frame)); } /* Make minibuffer contents into a string. */ diff --git a/src/nsterm.m b/src/nsterm.m index 31053ca7a0d..38d76e9389c 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -801,18 +801,6 @@ Free a pool and temporary objects it refers to (callable from C) NSTRACE (ns_update_end); } - -static void -ns_flush (struct frame *f) -/* -------------------------------------------------------------------------- - external (RIF) call - NS impl is no-op since currently we flush in ns_update_end and elsewhere - -------------------------------------------------------------------------- */ -{ - NSTRACE (ns_flush); -} - - static void ns_focus (struct frame *f, NSRect *r, int n) /* -------------------------------------------------------------------------- @@ -3963,8 +3951,7 @@ static Lisp_Object ns_string_to_lispmod (const char *s) ns_after_update_window_line, ns_update_window_begin, ns_update_window_end, - ns_flush, - 0, /* flush_display_optional */ + 0, /* flush_display */ x_clear_window_mouse_face, x_get_glyph_overhangs, x_fix_overlapping_area, diff --git a/src/w32term.c b/src/w32term.c index 532ded7cdad..681f70b5888 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -6258,11 +6258,6 @@ w32_make_rdb (char *xrm_option) return buffer; } -void -x_flush (struct frame * f) -{ /* Nothing to do */ } - - extern frame_parm_handler w32_frame_parm_handlers[]; static struct redisplay_interface w32_redisplay_interface = @@ -6276,8 +6271,7 @@ static struct redisplay_interface w32_redisplay_interface = x_after_update_window_line, x_update_window_begin, x_update_window_end, - x_flush, - 0, /* flush_display_optional */ + 0, /* flush_display */ x_clear_window_mouse_face, x_get_glyph_overhangs, x_fix_overlapping_area, diff --git a/src/xdisp.c b/src/xdisp.c index d5def065936..960ad18709b 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -10859,7 +10859,7 @@ echo_area_display (int update_frame_p) Can do with a display update of the echo area, unless we displayed some mode lines. */ update_single_window (w, 1); - FRAME_RIF (f)->flush_display (f); + flush_frame (f); } else update_frame (f, 1, 1); @@ -13645,9 +13645,7 @@ redisplay_preserve_echo_area (int from_where) else redisplay_internal (); - if (FRAME_RIF (SELECTED_FRAME ()) != NULL - && FRAME_RIF (SELECTED_FRAME ())->flush_display_optional) - FRAME_RIF (SELECTED_FRAME ())->flush_display_optional (NULL); + flush_frame (SELECTED_FRAME ()); } diff --git a/src/xterm.c b/src/xterm.c index 2f3d5ca7a01..d12173297e8 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -334,29 +334,19 @@ static void x_wm_set_icon_pixmap (struct frame *, ptrdiff_t); static void x_initialize (void); -/* Flush display of frame F, or of all frames if F is null. */ +/* Flush display of frame F. */ static void x_flush (struct frame *f) { + eassert (f && FRAME_X_P (f)); /* Don't call XFlush when it is not safe to redisplay; the X connection may be broken. */ if (!NILP (Vinhibit_redisplay)) return; block_input (); - if (f) - { - eassert (FRAME_X_P (f)); - XFlush (FRAME_X_DISPLAY (f)); - } - else - { - /* Flush all displays and so all frames on them. */ - struct x_display_info *xdi; - for (xdi = x_display_list; xdi; xdi = xdi->next) - XFlush (xdi->display); - } + XFlush (FRAME_X_DISPLAY (f)); unblock_input (); } @@ -7361,9 +7351,7 @@ x_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x, #endif } -#ifndef XFlush XFlush (FRAME_X_DISPLAY (f)); -#endif } @@ -10384,11 +10372,6 @@ static struct redisplay_interface x_redisplay_interface = x_update_window_begin, x_update_window_end, x_flush, -#ifdef XFlush - x_flush, -#else - 0, /* flush_display_optional */ -#endif x_clear_window_mouse_face, x_get_glyph_overhangs, x_fix_overlapping_area, From 83fc05543999d2890697f1106eb126e2a535ef0e Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 9 Sep 2013 18:01:02 +0400 Subject: [PATCH 038/321] Do not populate pure Xism x_sync to other ports. * frame.h (x_sync): Move under HAVE_X_WINDOWS. * frame.c (other_visible_frames) [HAVE_X_WINDOWS]: Use as such. * nsfns.m, w32xfns.c (x_sync): Remove no-op. * w32term.h (x_sync): Remove prototype. --- src/ChangeLog | 8 ++++++++ src/frame.c | 2 +- src/frame.h | 4 ++-- src/nsfns.m | 9 --------- src/w32term.h | 1 - src/w32xfns.c | 6 ------ 6 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 231d9771e15..c6eb58071e8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2013-09-09 Dmitry Antipov + + Do not populate pure Xism x_sync to other ports. + * frame.h (x_sync): Move under HAVE_X_WINDOWS. + * frame.c (other_visible_frames) [HAVE_X_WINDOWS]: Use as such. + * nsfns.m, w32xfns.c (x_sync): Remove no-op. + * w32term.h (x_sync): Remove prototype. + 2013-09-09 Dmitry Antipov Cleanup frame flushing. diff --git a/src/frame.c b/src/frame.c index 0f1560df157..692d224866c 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1108,7 +1108,7 @@ other_visible_frames (struct frame *f) /* Verify that we can still talk to the frame's X window, and note any recent change in visibility. */ -#ifdef HAVE_WINDOW_SYSTEM +#ifdef HAVE_X_WINDOWS if (FRAME_WINDOW_P (XFRAME (this))) x_sync (XFRAME (this)); #endif diff --git a/src/frame.h b/src/frame.h index 3d9457ce4d7..baf8d6b93a9 100644 --- a/src/frame.h +++ b/src/frame.h @@ -1243,7 +1243,6 @@ extern Lisp_Object display_x_get_resource (Display_Info *, extern void set_frame_menubar (struct frame *f, bool first_time, bool deep_p); extern void x_set_window_size (struct frame *f, int change_grav, int cols, int rows); -extern void x_sync (struct frame *); extern Lisp_Object x_get_focus_frame (struct frame *); extern void x_set_mouse_position (struct frame *f, int h, int v); extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y); @@ -1269,7 +1268,8 @@ extern void x_wm_set_icon_position (struct frame *, int, int); #if !defined USE_X_TOOLKIT extern char *x_get_resource_string (const char *, const char *); #endif -#endif +extern void x_sync (struct frame *); +#endif /* HAVE_X_WINDOWS */ extern void x_query_colors (struct frame *f, XColor *, int); extern void x_query_color (struct frame *f, XColor *); diff --git a/src/nsfns.m b/src/nsfns.m index fc276c2b12d..f021e834d59 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -2231,15 +2231,6 @@ and GNUstep implementations ("distributor-specific release return nsfocus; } -void -x_sync (struct frame *f) -{ - /* XXX Not implemented XXX */ - return; -} - - - /* ========================================================================== Lisp definitions that, for whatever reason, we can't alias as 'ns-XXX'. diff --git a/src/w32term.h b/src/w32term.h index 41c5c71832a..b4818f69aee 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -211,7 +211,6 @@ extern void x_set_window_size (struct frame *f, int change_grav, int cols, int rows); extern int x_display_pixel_height (struct w32_display_info *); extern int x_display_pixel_width (struct w32_display_info *); -extern void x_sync (struct frame *); extern Lisp_Object x_get_focus_frame (struct frame *); extern void x_set_mouse_position (struct frame *f, int h, int v); extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y); diff --git a/src/w32xfns.c b/src/w32xfns.c index 19c6b72bf89..7629e49caf8 100644 --- a/src/w32xfns.c +++ b/src/w32xfns.c @@ -333,9 +333,3 @@ drain_message_queue (void) } return retval; } - -/* x_sync is a no-op on W32. */ -void -x_sync (struct frame *f) -{ -} From 48b48f98e230d0f9c2d7410600957af6e671a3e0 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 9 Sep 2013 08:54:03 -0700 Subject: [PATCH 039/321] Convert ChangeLog text to in-file comment --- ChangeLog | 5 ----- configure.ac | 13 +++++++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2100041e9fe..4fc4e065e92 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,11 +3,6 @@ * configure.ac (LDFLAGS_NOCOMBRELOC): New variable. (LDFLAGS): Move nocombreloc option from here... (LD_SWITCH_SYSTEM_TEMACS): ... to here. - This is an essential option that should not be in LDFLAGS, - because the user may override that at build time; eg - http://bugs.debian.org/684788. temacs is the only thing - that actually needs this option; this is where it was orginally: - http://lists.gnu.org/archive/html/emacs-pretest-bug/2004-03/msg00170.html 2013-09-08 Glenn Morris diff --git a/configure.ac b/configure.ac index b18eeb90de1..9fcf30ccab3 100644 --- a/configure.ac +++ b/configure.ac @@ -1026,7 +1026,16 @@ dnl (Don't use `-z nocombreloc' as -z takes no arg on Irix.) dnl Treat GCC specially since it just gives a non-fatal `unrecognized option' dnl if not built to support GNU ld. -late_LDFLAGS=$LDFLAGS +dnl For a long time, this was added to LDFLAGS rather than +dnl LD_SWITCH_SYSTEM_TEMACS. That is: i) inappropriate, since +dnl LDFLAGS is supposed to be a user option, and this flag is +dnl essential. It can leads to problems if the user overrides +dnl LDFLAGS at _build_ time (make LDFLAGS=... all), eg +dnl http://bugs.debian.org/684788. +dnl ii) unnecessary, since temacs is the only thing +dnl that actually needs this option - this is where it was orginally: +dnl http://lists.gnu.org/archive/html/emacs-pretest-bug/2004-03/msg00170.html +late_LDFLAGS="$LDFLAGS" if test x$GCC = xyes; then LDFLAGS_NOCOMBRELOC="-Wl,-znocombreloc" else @@ -1041,7 +1050,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], LDFLAGS_NOCOMBRELOC= [AC_MSG_RESULT(no)]) -LDFLAGS=$late_LDFLAGS +LDFLAGS="$late_LDFLAGS" dnl The function dump-emacs will not be defined and temacs will do dnl (load "loadup") automatically unless told otherwise. From 71bd1a008412d223ffa16a5eabd51771b8c94e50 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 9 Sep 2013 09:26:38 -0700 Subject: [PATCH 040/321] Spelling fixes and tidy up a comment. --- configure.ac | 14 +++++--------- lisp/progmodes/python.el | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index 9fcf30ccab3..a9ea5d7a58f 100644 --- a/configure.ac +++ b/configure.ac @@ -1026,15 +1026,11 @@ dnl (Don't use `-z nocombreloc' as -z takes no arg on Irix.) dnl Treat GCC specially since it just gives a non-fatal `unrecognized option' dnl if not built to support GNU ld. -dnl For a long time, this was added to LDFLAGS rather than -dnl LD_SWITCH_SYSTEM_TEMACS. That is: i) inappropriate, since -dnl LDFLAGS is supposed to be a user option, and this flag is -dnl essential. It can leads to problems if the user overrides -dnl LDFLAGS at _build_ time (make LDFLAGS=... all), eg -dnl http://bugs.debian.org/684788. -dnl ii) unnecessary, since temacs is the only thing -dnl that actually needs this option - this is where it was orginally: -dnl http://lists.gnu.org/archive/html/emacs-pretest-bug/2004-03/msg00170.html +dnl Adding -znocombreloc to LDFLAGS rather than LD_SWITCH_SYSTEM_TEMACS is: +dnl * inappropriate, as LDFLAGS is a build option but this is essential. See: +dnl http://bugs.debian.org/684788 +dnl * unnecessary, since temacs is the only thing that actually needs it. See: +dnl http://lists.gnu.org/archive/html/emacs-pretest-bug/2004-03/msg00170.html late_LDFLAGS="$LDFLAGS" if test x$GCC = xyes; then LDFLAGS_NOCOMBRELOC="-Wl,-znocombreloc" diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index be151bf8114..05d707acf43 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -2140,7 +2140,7 @@ the python shell: 1. When Optional Argument NOMAIN is non-nil everything under an \"if __name__ == '__main__'\" block will be removed. 2. When a subregion of the buffer is sent, it takes care of - appending extra whitelines so tracebacks are correct. + appending extra empty lines so tracebacks are correct. 3. Wraps indented regions under an \"if True:\" block so the interpreter evaluates them correctly." (let ((substring (buffer-substring-no-properties start end)) From 0750a308d0e72331dacf30b6fa176cb289c6ff87 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 9 Sep 2013 20:47:43 +0400 Subject: [PATCH 041/321] Review and drop old frame resize hack. * frame.h (struct frame): Remove force_flush_display_p. * dispnew.c (update_frame): Adjust user and don't call flush_frame here. The comment has said that there was an issues with redisplaying fringes, but I don't see any differences with and without this hack. Hopefully we can continue without it. * xdisp.c (clear_garbaged_frames): Adjust user and do not clear current frame matrices twice if resized_p is set. --- src/ChangeLog | 11 +++++++++++ src/dispnew.c | 10 ---------- src/frame.h | 4 ---- src/xdisp.c | 8 +++----- 4 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c6eb58071e8..4b688e43430 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2013-09-09 Dmitry Antipov + + Review and drop old frame resize hack. + * frame.h (struct frame): Remove force_flush_display_p. + * dispnew.c (update_frame): Adjust user and don't call + flush_frame here. The comment has said that there was an issues + with redisplaying fringes, but I don't see any differences with + and without this hack. Hopefully we can continue without it. + * xdisp.c (clear_garbaged_frames): Adjust user and do not clear + current frame matrices twice if resized_p is set. + 2013-09-09 Dmitry Antipov Do not populate pure Xism x_sync to other ports. diff --git a/src/dispnew.c b/src/dispnew.c index 74ecfa88bde..a42b3da5fc5 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -3061,16 +3061,6 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p) /* Update windows. */ paused_p = update_window_tree (root_window, force_p); update_end (f); - - /* This flush is a performance bottleneck under X, - and it doesn't seem to be necessary anyway (in general). - It is necessary when resizing the window with the mouse, or - at least the fringes are not redrawn in a timely manner. ++kfs */ - if (f->force_flush_display_p) - { - flush_frame (f); - f->force_flush_display_p = 0; - } } else { diff --git a/src/frame.h b/src/frame.h index baf8d6b93a9..87e218ee938 100644 --- a/src/frame.h +++ b/src/frame.h @@ -185,10 +185,6 @@ struct frame Clear the frame in clear_garbaged_frames if set. */ unsigned resized_p : 1; - /* Set to non-zero in when we want for force a flush_display in - update_frame, usually after resizing the frame. */ - unsigned force_flush_display_p : 1; - /* Set to non-zero if the default face for the frame has been realized. Reset to zero whenever the default face changes. Used to see the difference between a font change and face change. */ diff --git a/src/xdisp.c b/src/xdisp.c index 960ad18709b..df3fa366803 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -10767,11 +10767,9 @@ clear_garbaged_frames (void) if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) { if (f->resized_p) - { - redraw_frame (f); - f->force_flush_display_p = 1; - } - clear_current_matrices (f); + redraw_frame (f); + else + clear_current_matrices (f); changed_count++; f->garbaged = 0; f->resized_p = 0; From 068af12195bfc9eb552936f7b52e2a4501e60593 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 9 Sep 2013 12:59:07 -0400 Subject: [PATCH 042/321] * etc/refcards/Makefile (PS_ENGLISH, PS_CZECH, PS_FRENCH, PS_GERMAN) (PS_POLISH, PS_PORTUGUESE, PS_RUSSIAN, PS_SLOVAKIAN, PS_TARGETS): Use substitution refs. --- etc/ChangeLog | 6 ++++++ etc/refcards/Makefile | 44 +++++++++---------------------------------- 2 files changed, 15 insertions(+), 35 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index c1cb67a6a67..bd5534d9446 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,9 @@ +2013-09-09 Glenn Morris + + * refcards/Makefile (PS_ENGLISH, PS_CZECH, PS_FRENCH, PS_GERMAN) + (PS_POLISH, PS_PORTUGUESE, PS_RUSSIAN, PS_SLOVAKIAN, PS_TARGETS): + Use substitution refs. + 2013-08-15 Glenn Morris * refcards/calccard.pdf, refcards/cs-dired-ref.pdf: diff --git a/etc/refcards/Makefile b/etc/refcards/Makefile index 36abf67d594..0931540e4d8 100644 --- a/etc/refcards/Makefile +++ b/etc/refcards/Makefile @@ -58,42 +58,16 @@ PDF_SLOVAKIAN = \ PDF_TARGETS = $(PDF_ENGLISH) $(PDF_CZECH) $(PDF_FRENCH) $(PDF_GERMAN) \ $(PDF_POLISH) $(PDF_PORTUGUESE) $(PDF_RUSSIAN) $(PDF_SLOVAKIAN) -PS_ENGLISH = \ - calccard.ps \ - dired-ref.ps \ - gnus-booklet.ps \ - gnus-refcard.ps \ - orgcard.ps \ - refcard.ps \ - survival.ps \ - vipcard.ps \ - viperCard.ps +PS_ENGLISH = $(PDF_ENGLISH:.pdf=.ps) +PS_CZECH = $(PDF_CZECH:.pdf=.ps) +PS_FRENCH = $(PDF_FRENCH:.pdf=.ps) +PS_GERMAN = $(PDF_GERMAN:.pdf=.ps) +PS_POLISH = $(PDF_POLISH:.pdf=.ps) +PS_PORTUGUESE = $(PDF_PORTUGUESE:.pdf=.ps) +PS_RUSSIAN = $(PDF_RUSSIAN:.pdf=.ps) +PS_SLOVAKIAN = $(PDF_SLOVAKIAN:.pdf=.ps) -PS_CZECH = \ - cs-dired-ref.ps \ - cs-refcard.ps \ - cs-survival.ps - -PS_FRENCH = \ - fr-dired-ref.ps \ - fr-refcard.ps \ - fr-survival.ps \ - -PS_GERMAN = de-refcard.ps - -PS_POLISH = pl-refcard.ps - -PS_PORTUGUESE = pt-br-refcard.ps - -PS_RUSSIAN = ru-refcard.ps - -PS_SLOVAKIAN = \ - sk-dired-ref.ps \ - sk-refcard.ps \ - sk-survival.ps - -PS_TARGETS = $(PS_ENGLISH) $(PS_CZECH) $(PS_FRENCH) $(PS_GERMAN) \ - $(PS_POLISH) $(PS_PORTUGUESE) $(PS_RUSSIAN) $(PS_SLOVAKIAN) +PS_TARGETS = $(PDF_TARGETS:.pdf=.ps) ## For emacsver.tex. From d7646461cf8903ae65546025c74d6f6aac577461 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 9 Sep 2013 14:14:50 -0400 Subject: [PATCH 043/321] Restore portions of my comment, which I found less clear after copyedits --- configure.ac | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index a9ea5d7a58f..ab2e48b6f0f 100644 --- a/configure.ac +++ b/configure.ac @@ -1026,10 +1026,13 @@ dnl (Don't use `-z nocombreloc' as -z takes no arg on Irix.) dnl Treat GCC specially since it just gives a non-fatal `unrecognized option' dnl if not built to support GNU ld. -dnl Adding -znocombreloc to LDFLAGS rather than LD_SWITCH_SYSTEM_TEMACS is: -dnl * inappropriate, as LDFLAGS is a build option but this is essential. See: +dnl For a long time, -znocombreloc was added to LDFLAGS rather than +dnl LD_SWITCH_SYSTEM_TEMACS. That is: +dnl * inappropriate, as LDFLAGS is a user option but this is essential. +dnl Eg "make LDFLAGS=... all" could run into problems, dnl http://bugs.debian.org/684788 -dnl * unnecessary, since temacs is the only thing that actually needs it. See: +dnl * unnecessary, since temacs is the only thing that actually needs it. +dnl Indeed this is where it was originally, prior to: dnl http://lists.gnu.org/archive/html/emacs-pretest-bug/2004-03/msg00170.html late_LDFLAGS="$LDFLAGS" if test x$GCC = xyes; then From 81ca32e0917fb597ec236e9eccb6624c7843c6aa Mon Sep 17 00:00:00 2001 From: Jean Haidouk Date: Mon, 9 Sep 2013 15:27:38 -0400 Subject: [PATCH 044/321] =?UTF-8?q?*=20leim/quail/latin-alt.el=20("french-?= =?UTF-8?q?alt-postfix",=20"latin-alt-postfix"):=20*=20leim/quail/latin-pr?= =?UTF-8?q?e.el=20("french-prefix"):=20*=20leim/quail/latin-post.el=20("fr?= =?UTF-8?q?ench-postfix"):=20Add=20`=C5=93'=20and=20`=C5=92'.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- leim/ChangeLog | 6 ++++++ leim/quail/latin-alt.el | 8 +++++++- leim/quail/latin-post.el | 8 ++++++-- leim/quail/latin-pre.el | 4 ++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/leim/ChangeLog b/leim/ChangeLog index 3e25c0edbe1..11186603df8 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog @@ -1,3 +1,9 @@ +2013-09-05 Jean Haidouk (tiny change) + + * quail/latin-alt.el ("french-alt-postfix", "latin-alt-postfix"): + * quail/latin-pre.el ("french-prefix"): + * quail/latin-post.el ("french-postfix"): Add `œ' and `Œ'. + 2013-08-28 Paul Eggert * Makefile.in (SHELL): Now @SHELL@, not /bin/sh, diff --git a/leim/quail/latin-alt.el b/leim/quail/latin-alt.el index fdfc89f4eca..6841947524f 100644 --- a/leim/quail/latin-alt.el +++ b/leim/quail/latin-alt.el @@ -938,7 +938,7 @@ Par exemple: a` -> à e' -> é. En doublant la frappe des diacritiques, ils s'isoleront de la lettre. Par exemple: e'' -> e' - n'est pas disponible." +Œ est produit par O/." nil t nil nil nil nil nil nil nil nil t) (quail-define-rules @@ -959,7 +959,9 @@ Par exemple: e'' -> e' ("i^" ?î) ("i\"" ?ï) ("O^" ?Ô) + ("O/" ?Œ) ("o^" ?ô) + ("o/" ?œ) ("U`" ?Ù) ("U^" ?Û) ("U\"" ?Ü) @@ -988,7 +990,9 @@ Par exemple: e'' -> e' ("i^^" ["i^"]) ("i\"\"" ["i\""]) ("O^^" ["O^"]) + ("O//" ["O/"]) ("o^^" ["o^"]) + ("o//" ["o/"]) ("U``" ["U`"]) ("U^^" ["U^"]) ("U\"\"" ["U\""]) @@ -1423,6 +1427,7 @@ Doubling the postfix separates the letter and postfix: e.g. a'' -> a' ("O'" ?Ó) ("O-" ?Ō) ("O/" ?Ø) + ("O/" ?Œ) ("O:" ?Ő) ("O\"" ?Ö) ("O^" ?Ô) @@ -1515,6 +1520,7 @@ Doubling the postfix separates the letter and postfix: e.g. a'' -> a' ("o'" ?ó) ("o-" ?ō) ("o/" ?ø) + ("o/" ?œ) ("o:" ?ő) ("o\"" ?ö) ("o^" ?ô) diff --git a/leim/quail/latin-post.el b/leim/quail/latin-post.el index 67cd0648951..7fa3d88e8c6 100644 --- a/leim/quail/latin-post.el +++ b/leim/quail/latin-post.el @@ -1013,7 +1013,7 @@ Par exemple: a` -> à e' -> é. En doublant la frappe des diacritiques, ils s'isoleront de la lettre. Par exemple: e'' -> e' - n'est pas disponible." +Œ est produit par O/." nil t nil nil nil nil nil nil nil nil t) (quail-define-rules @@ -1034,7 +1034,9 @@ Par exemple: e'' -> e' ("i^" ?î) ("i\"" ?ï) ("O^" ?Ô) + ("O/" ?Œ) ("o^" ?ô) + ("o/" ?œ) ("U`" ?Ù) ("U^" ?Û) ("U\"" ?Ü) @@ -1063,7 +1065,9 @@ Par exemple: e'' -> e' ("i^^" ["i^"]) ("i\"\"" ["i\""]) ("O^^" ["O^"]) + ("O//" ["O/"]) ("o^^" ["o^"]) + ("o//" ["o/"]) ("U``" ["U`"]) ("U^^" ["U^"]) ("U\"\"" ["U\""]) @@ -2099,7 +2103,7 @@ of characters from a single Latin-N charset. dot | . | z. -> ż stroke | / | d/ -> đ nordic | / | d/ -> ð t/ -> þ a/ -> å e/ -> æ o/ -> ø - others | / | s/ -> ß ?/ -> ¿ !/ -> ¡ // -> ° + others | / | s/ -> ß ?/ -> ¿ !/ -> ¡ // -> ° o/ -> œ | various | << -> « >> -> » o_ -> º a_ -> ª Doubling the postfix separates the letter and postfix: e.g. a'' -> a' diff --git a/leim/quail/latin-pre.el b/leim/quail/latin-pre.el index 4b4179ebf82..c6085f34290 100644 --- a/leim/quail/latin-pre.el +++ b/leim/quail/latin-pre.el @@ -264,6 +264,7 @@ Key translation rules are: diaeresis | \" | \"i -> ï cedilla | ~ or , | ~c -> ç ,c -> ç symbol | ~ | ~> -> » ~< -> « + misc | / | /o -> œ " nil t nil nil nil nil nil nil nil nil t) (quail-define-rules @@ -295,6 +296,9 @@ Key translation rules are: ("\"e" ?ë) ("\"i" ?ï) ("\" " ?\") + ("/o" ?œ) + ("/O" ?Œ) + ("/ " ?/) ("~<" ?\«) ("~>" ?\») ("~C" ?Ç) From e5e916d856b7abb17f833d68e1a741a65d4e91ca Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 9 Sep 2013 21:28:01 -0400 Subject: [PATCH 045/321] * lisp/dired-x.el (dired-mark-sexp): Unbreak for systems where ls returns "alternate access method" in mode (eg "-rw-r--r--."). It's still pretty broken though, eg http://debbugs.gnu.org/13575 --- lisp/ChangeLog | 5 +++++ lisp/dired-x.el | 3 +++ 2 files changed, 8 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a7cb40fee60..a89b4fb8cb9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-10 Glenn Morris + + * dired-x.el (dired-mark-sexp): Unbreak for systems where ls + returns "alternate access method" in mode (eg "-rw-r--r--."). + 2013-09-08 Glenn Morris * saveplace.el (load-save-place-alist-from-file): diff --git a/lisp/dired-x.el b/lisp/dired-x.el index c6ecbf1e718..c15f3b5b121 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el @@ -1459,6 +1459,9 @@ to mark all zero length files." s nil)) (setq mode (buffer-substring (point) (+ mode-len (point)))) (forward-char mode-len) + ;; Skip any extended attributes marker ("." or "+"). + (or (looking-at " ") + (forward-char 1)) (setq nlink (read (current-buffer))) ;; Karsten Wenger fixed uid. (setq uid (buffer-substring (1+ (point)) From 9a2c9b476440268e8d6fbacfec52865a76a8b395 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 10 Sep 2013 00:21:19 -0700 Subject: [PATCH 046/321] * lisp/simple.el (read-minibuffer): Unbreak it. Fixes: debbugs:15318 --- lisp/ChangeLog | 2 ++ lisp/simple.el | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a89b4fb8cb9..c3f6e8860d9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-10 Glenn Morris + * simple.el (read-minibuffer): Unbreak it. (Bug#15318) + * dired-x.el (dired-mark-sexp): Unbreak for systems where ls returns "alternate access method" in mode (eg "-rw-r--r--."). diff --git a/lisp/simple.el b/lisp/simple.el index c5e5b313b7b..c8fbf0b6dae 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1231,7 +1231,7 @@ is a string to insert in the minibuffer before reading. Such arguments are used as in `read-from-minibuffer'.)" ;; Used for interactive spec `x'. (read-from-minibuffer prompt initial-contents minibuffer-local-map - t minibuffer-history)) + t 'minibuffer-history)) (defun eval-minibuffer (prompt &optional initial-contents) "Return value of Lisp expression read using the minibuffer. From 6480194ca1080908a32fb2eb700f3dcf938972d5 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 10 Sep 2013 09:45:33 +0200 Subject: [PATCH 047/321] * net/tramp.el (tramp-cleanup): Remove. Functionality added to `tramp-cleanup-connection'. * net/tramp-cmds.el (tramp-cleanup-connection): Add optional parameters KEEP-DEBUG and KEEP-PASSWORD. * net/tramp.el (tramp-file-name-handler): * net/tramp-adb.el (tramp-adb-maybe-open-connection): * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell) (tramp-maybe-open-connection): * net/tramp-smb.el (tramp-smb-maybe-open-connection): Use `tramp-cleanup-connection'. * net/tramp-sh.el (tramp-maybe-open-connection): Catch 'uname-changed inside the progress reporter. --- lisp/ChangeLog | 18 ++++++ lisp/net/tramp-adb.el | 2 +- lisp/net/tramp-cmds.el | 14 +++-- lisp/net/tramp-sh.el | 123 +++++++++++++++++++++-------------------- lisp/net/tramp-smb.el | 4 +- lisp/net/tramp.el | 15 +---- 6 files changed, 94 insertions(+), 82 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c3f6e8860d9..fc73e563883 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,21 @@ +2013-09-10 Michael Albinus + + * net/tramp.el (tramp-cleanup): Remove. Functionality added to + `tramp-cleanup-connection'. + + * net/tramp-cmds.el (tramp-cleanup-connection): Add optional + parameters KEEP-DEBUG and KEEP-PASSWORD. + + * net/tramp.el (tramp-file-name-handler): + * net/tramp-adb.el (tramp-adb-maybe-open-connection): + * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell) + (tramp-maybe-open-connection): + * net/tramp-smb.el (tramp-smb-maybe-open-connection): Use + `tramp-cleanup-connection'. + + * net/tramp-sh.el (tramp-maybe-open-connection): Catch + 'uname-changed inside the progress reporter. + 2013-09-10 Glenn Morris * simple.el (read-minibuffer): Unbreak it. (Bug#15318) diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index 66d29cb3c8c..595037ab943 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -1153,11 +1153,11 @@ connection if a previous connection has died for some reason." (read (current-buffer)))))) (when (and (stringp old-getprop) (not (string-equal old-getprop new-getprop))) - (tramp-cleanup vec) (tramp-message vec 3 "Connection reset, because remote host changed from `%s' to `%s'" old-getprop new-getprop) + (tramp-cleanup-connection vec t) (tramp-adb-maybe-open-connection vec))) ;; Change user if indicated. diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el index de06cd5cbc9..5015929534d 100644 --- a/lisp/net/tramp-cmds.el +++ b/lisp/net/tramp-cmds.el @@ -55,9 +55,11 @@ (buffer-list)))) ;;;###tramp-autoload -(defun tramp-cleanup-connection (vec) +(defun tramp-cleanup-connection (vec &optional keep-debug keep-password) "Flush all connection related objects. -This includes password cache, file cache, connection cache, buffers. +This includes password cache, file cache, connection cache, +buffers. KEEP-DEBUG non-nil preserves the debug buffer. +KEEP-PASSWORD non-nil preserves the password cache. When called interactively, a Tramp connection has to be selected." (interactive ;; When interactive, select the Tramp remote identification. @@ -80,14 +82,15 @@ When called interactively, a Tramp connection has to be selected." "Enter Tramp connection: " connections nil t (try-completion "" connections))) (when (and name (file-remote-p name)) - (with-parsed-tramp-file-name name nil v)))))) + (with-parsed-tramp-file-name name nil v)))) + nil nil)) (if (not vec) ;; Nothing to do. (message "No Tramp connection found.") ;; Flush password cache. - (tramp-clear-passwd vec) + (unless keep-password (tramp-clear-passwd vec)) ;; Flush file cache. (tramp-flush-directory-property vec "") @@ -101,7 +104,8 @@ When called interactively, a Tramp connection has to be selected." ;; Remove buffers. (dolist (buf (list (get-buffer (tramp-buffer-name vec)) - (get-buffer (tramp-debug-buffer-name vec)) + (unless keep-debug + (get-buffer (tramp-debug-buffer-name vec))) (tramp-get-connection-property vec "process-buffer" nil))) (when (bufferp buf) (kill-buffer buf))))) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 2b7c43a4995..f91cbb29a1d 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -3805,11 +3805,12 @@ process to set up. VEC specifies the connection." vec "uname" (tramp-send-command-and-read vec "echo \\\"`uname -sr`\\\"")))) (when (and (stringp old-uname) (not (string-equal old-uname new-uname))) - (tramp-cleanup vec) (tramp-message vec 3 "Connection reset, because remote host changed from `%s' to `%s'" old-uname new-uname) + ;; We want to keep the password. + (tramp-cleanup-connection vec t t) (throw 'uname-changed (tramp-maybe-open-connection vec)))) ;; Check whether the remote host suffers from buggy @@ -4287,68 +4288,68 @@ Does not do anything if a connection is already open, but re-opens the connection if a previous connection has died for some reason." (tramp-check-proper-host vec) - (catch 'uname-changed - (let ((p (tramp-get-connection-process vec)) - (process-name (tramp-get-connection-property vec "process-name" nil)) - (process-environment (copy-sequence process-environment)) - (pos (with-current-buffer (tramp-get-connection-buffer vec) (point)))) + (let ((p (tramp-get-connection-process vec)) + (process-name (tramp-get-connection-property vec "process-name" nil)) + (process-environment (copy-sequence process-environment)) + (pos (with-current-buffer (tramp-get-connection-buffer vec) (point)))) - ;; If Tramp opens the same connection within a short time frame, - ;; there is a problem. We shall signal this. - (unless (or (and p (processp p) (memq (process-status p) '(run open))) - (not (equal (butlast (append vec nil) 2) - (car tramp-current-connection))) - (> (tramp-time-diff - (current-time) (cdr tramp-current-connection)) - (or tramp-connection-min-time-diff 0))) - (throw 'suppress 'suppress)) + ;; If Tramp opens the same connection within a short time frame, + ;; there is a problem. We shall signal this. + (unless (or (and p (processp p) (memq (process-status p) '(run open))) + (not (equal (butlast (append vec nil) 2) + (car tramp-current-connection))) + (> (tramp-time-diff + (current-time) (cdr tramp-current-connection)) + (or tramp-connection-min-time-diff 0))) + (throw 'suppress 'suppress)) - ;; If too much time has passed since last command was sent, look - ;; whether process is still alive. If it isn't, kill it. When - ;; using ssh, it can sometimes happen that the remote end has - ;; hung up but the local ssh client doesn't recognize this until - ;; it tries to send some data to the remote end. So that's why - ;; we try to send a command from time to time, then look again - ;; whether the process is really alive. - (condition-case nil - (when (and (> (tramp-time-diff - (current-time) - (tramp-get-connection-property - p "last-cmd-time" '(0 0 0))) - 60) - p (processp p) (memq (process-status p) '(run open))) - (tramp-send-command vec "echo are you awake" t t) - (unless (and (memq (process-status p) '(run open)) - (tramp-wait-for-output p 10)) - ;; The error will be caught locally. - (tramp-error vec 'file-error "Awake did fail"))) - (file-error - (tramp-cleanup vec) - (setq p nil))) + ;; If too much time has passed since last command was sent, look + ;; whether process is still alive. If it isn't, kill it. When + ;; using ssh, it can sometimes happen that the remote end has hung + ;; up but the local ssh client doesn't recognize this until it + ;; tries to send some data to the remote end. So that's why we + ;; try to send a command from time to time, then look again + ;; whether the process is really alive. + (condition-case nil + (when (and (> (tramp-time-diff + (current-time) + (tramp-get-connection-property + p "last-cmd-time" '(0 0 0))) + 60) + p (processp p) (memq (process-status p) '(run open))) + (tramp-send-command vec "echo are you awake" t t) + (unless (and (memq (process-status p) '(run open)) + (tramp-wait-for-output p 10)) + ;; The error will be caught locally. + (tramp-error vec 'file-error "Awake did fail"))) + (file-error + (tramp-cleanup-connection vec t) + (setq p nil))) - ;; New connection must be opened. - (condition-case err - (unless (and p (processp p) (memq (process-status p) '(run open))) + ;; New connection must be opened. + (condition-case err + (unless (and p (processp p) (memq (process-status p) '(run open))) - ;; We call `tramp-get-buffer' in order to get a debug - ;; buffer for messages from the beginning. - (tramp-get-buffer vec) + ;; We call `tramp-get-buffer' in order to get a debug buffer + ;; for messages from the beginning. + (tramp-get-buffer vec) - ;; If `non-essential' is non-nil, don't reopen a new connection. - (when (and (boundp 'non-essential) (symbol-value 'non-essential)) - (throw 'non-essential 'non-essential)) + ;; If `non-essential' is non-nil, don't reopen a new connection. + (when (and (boundp 'non-essential) (symbol-value 'non-essential)) + (throw 'non-essential 'non-essential)) - (with-tramp-progress-reporter - vec 3 - (if (zerop (length (tramp-file-name-user vec))) - (format "Opening connection for %s using %s" - (tramp-file-name-host vec) - (tramp-file-name-method vec)) - (format "Opening connection for %s@%s using %s" - (tramp-file-name-user vec) + (with-tramp-progress-reporter + vec 3 + (if (zerop (length (tramp-file-name-user vec))) + (format "Opening connection for %s using %s" (tramp-file-name-host vec) - (tramp-file-name-method vec))) + (tramp-file-name-method vec)) + (format "Opening connection for %s@%s using %s" + (tramp-file-name-user vec) + (tramp-file-name-host vec) + (tramp-file-name-method vec))) + (catch 'uname-changed ;; Start new process. (when (and p (processp p)) (delete-process p)) @@ -4503,13 +4504,13 @@ connection if a previous connection has died for some reason." target-alist (cdr target-alist))) ;; Make initial shell settings. - (tramp-open-connection-setup-interactive-shell p vec)))) + (tramp-open-connection-setup-interactive-shell p vec))))) - ;; When the user did interrupt, we must cleanup. - (quit - (tramp-cleanup vec) - ;; Propagate the quit signal. - (signal (car err) (cdr err))))))) + ;; When the user did interrupt, we must cleanup. + (quit + (tramp-cleanup-connection vec t) + ;; Propagate the quit signal. + (signal (car err) (cdr err)))))) (defun tramp-send-command (vec command &optional neveropen nooutput) "Send the COMMAND to connection VEC. diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index 1d4880a9f32..27f3bd41e9c 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -1726,8 +1726,10 @@ If ARGUMENT is non-nil, use it as argument for (search-forward-regexp tramp-smb-wrong-passwd-regexp nil t)) ;; Disable `auth-source' and `password-cache'. + (tramp-message + vec 3 "Retry connection with new password") (let (auth-sources) - (tramp-cleanup vec) + (tramp-cleanup-connection vec t) (tramp-smb-maybe-open-connection vec argument)) ;; Propagate the error. (signal (car err) (cdr err))))))))))))) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 6c1ee70b205..fe4f7b8bb54 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1712,19 +1712,6 @@ letter into the file name. This function removes it." (replace-match "/" nil t name) name))) -(defun tramp-cleanup (vec) - "Cleanup connection VEC, but keep the debug buffer." - (with-current-buffer (tramp-get-debug-buffer vec) - ;; Keep the debug buffer. - (rename-buffer - (generate-new-buffer-name tramp-temp-buffer-name) 'unique) - (tramp-cleanup-connection vec) - (if (= (point-min) (point-max)) - (kill-buffer nil) - (rename-buffer (tramp-debug-buffer-name vec) 'unique)) - ;; We call `tramp-get-buffer' in order to keep the debug buffer. - (tramp-get-buffer vec))) - ;;; Config Manipulation Functions: ;;;###tramp-autoload @@ -2147,7 +2134,7 @@ Falls back to normal file name handler if no Tramp file name handler exists." (tramp-message v 1 "Suppress received in operation %s" (append (list operation) args)) - (tramp-cleanup v) + (tramp-cleanup-connection v t) (tramp-run-real-handler operation args))) (t result))) From 57f26ea78c0114eb48cef32e16b684526dbb1f11 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 10 Sep 2013 06:17:40 -0400 Subject: [PATCH 048/321] Auto-commit of generated files. --- autogen/configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autogen/configure b/autogen/configure index 325b333f00d..a0f302b4ac0 100755 --- a/autogen/configure +++ b/autogen/configure @@ -8779,7 +8779,7 @@ else fi -late_LDFLAGS=$LDFLAGS +late_LDFLAGS="$LDFLAGS" if test x$GCC = xyes; then LDFLAGS_NOCOMBRELOC="-Wl,-znocombreloc" else @@ -8812,7 +8812,7 @@ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -LDFLAGS=$late_LDFLAGS +LDFLAGS="$late_LDFLAGS" test "x$CANNOT_DUMP" = "x" && CANNOT_DUMP=no case "$opsys" in From c2a918ae6ed054c4c09483619f1599605cc140b4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 10 Sep 2013 06:21:34 -0400 Subject: [PATCH 049/321] Auto-commit of loaddefs files. --- lisp/dired.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/dired.el b/lisp/dired.el index f873aea9bf0..345e8d57113 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -4352,7 +4352,7 @@ instead. ;;;*** -;;;### (autoloads nil "dired-x" "dired-x.el" "1bf4009b81e55bf51947bc87b2c82994") +;;;### (autoloads nil "dired-x" "dired-x.el" "11fd4a8afa32507cc32d4a04d852587f") ;;; Generated autoloads from dired-x.el (autoload 'dired-jump "dired-x" "\ From 8c27f5ff1df300aa313b1385442bc2374979f862 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 10 Sep 2013 11:30:10 -0400 Subject: [PATCH 050/321] * lisp/subr.el (with-demoted-errors): Add `format' argument. * src/eval.c (Feval): Document the new use of `lexical'. --- etc/NEWS | 3 +++ lisp/ChangeLog | 44 ++++++++++++++++++++++++-------------------- lisp/subr.el | 18 ++++++++++++------ src/ChangeLog | 8 ++++++-- src/eval.c | 4 +++- 5 files changed, 48 insertions(+), 29 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 7da67efeadd..9914da31859 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -617,6 +617,9 @@ in the presence of files with negative time stamps. * Lisp Changes in Emacs 24.4 +** The second argument of `eval' can now be a lexical-environment. + +** `with-demoted-errors' takes an additional argument `format'. +++ ** New function `define-error'. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fc73e563883..ff6ec4755b2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-10 Stefan Monnier + + * subr.el (with-demoted-errors): Add `format' argument. + 2013-09-10 Michael Albinus * net/tramp.el (tramp-cleanup): Remove. Functionality added to @@ -10,11 +14,11 @@ * net/tramp-adb.el (tramp-adb-maybe-open-connection): * net/tramp-sh.el (tramp-open-connection-setup-interactive-shell) (tramp-maybe-open-connection): - * net/tramp-smb.el (tramp-smb-maybe-open-connection): Use - `tramp-cleanup-connection'. + * net/tramp-smb.el (tramp-smb-maybe-open-connection): + Use `tramp-cleanup-connection'. - * net/tramp-sh.el (tramp-maybe-open-connection): Catch - 'uname-changed inside the progress reporter. + * net/tramp-sh.el (tramp-maybe-open-connection): + Catch 'uname-changed inside the progress reporter. 2013-09-10 Glenn Morris @@ -34,15 +38,15 @@ * net/tramp.el (tramp-find-method, tramp-find-user): Call `propertize' only if it is bound. It isn't for XEmacs. - (with-tramp-progress-reporter): Do not let-bind `result'. This - yields to scoping errors in XEmacs. + (with-tramp-progress-reporter): Do not let-bind `result'. + This yields to scoping errors in XEmacs. (tramp-handle-make-auto-save-file-name): New function, moved from tramp-sh.el. * net/tramp-adb.el (tramp-adb-file-name-handler-alist): Add handler for `make-auto-save-file-name'. - (tramp-adb--gnu-switches-to-ash): Use - `tramp-compat-replace-regexp-in-string'. + (tramp-adb--gnu-switches-to-ash): + Use `tramp-compat-replace-regexp-in-string'. * net/tramp-cache.el (tramp-cache-print): Call `substring-no-properties' only if it is bound. It isn't for XEmacs. @@ -50,8 +54,8 @@ * net/tramp-cmds.el (tramp-bug): Call `propertize' only if it is bound. It isn't for XEmacs. - * net/tramp-compat.el (tramp-compat-copy-file): Catch - `wrong-number-of-arguments' error. + * net/tramp-compat.el (tramp-compat-copy-file): + Catch `wrong-number-of-arguments' error. (tramp-compat-replace-regexp-in-string): New defun. * net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): Add handler @@ -62,21 +66,21 @@ (tramp-gvfs-file-name): Use `tramp-compat-replace-regexp-in-string'. (tramp-synce-list-devices): Use `push' instead of `pushnew'. - * net/tramp-gw.el (tramp-gw-open-network-stream): Use - `tramp-compat-replace-regexp-in-string'. + * net/tramp-gw.el (tramp-gw-open-network-stream): + Use `tramp-compat-replace-regexp-in-string'. - * net/tramp-sh.el (tramp-sh-file-name-handler-alist): Call - `tramp-handle-make-auto-save-file-name'. + * net/tramp-sh.el (tramp-sh-file-name-handler-alist): + Call `tramp-handle-make-auto-save-file-name'. (tramp-sh-handle-make-auto-save-file-name): Move to tramp.el. (tramp-sh-file-gvfs-monitor-dir-process-filter) - (tramp-sh-file-inotifywait-process-filter): Use - `tramp-compat-replace-regexp-in-string'. + (tramp-sh-file-inotifywait-process-filter): + Use `tramp-compat-replace-regexp-in-string'. (tramp-compute-multi-hops): Use `push' instead of `pushnew'. * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Add handler for `make-auto-save-file-name'. - (tramp-smb-handle-copy-directory): Call - `tramp-compat-replace-regexp-in-string'. + (tramp-smb-handle-copy-directory): + Call `tramp-compat-replace-regexp-in-string'. (tramp-smb-get-file-entries): Use `push' instead of `pushnew'. (tramp-smb-handle-copy-file): Improve error message. (tramp-smb-handle-rename-file): Rename directly only in case @@ -95,8 +99,8 @@ * progmodes/cc-langs.el (c-type-decl-suffix-key): Now matches ")" in Java Mode. (c-recognize-typeless-decls): Set the Java value to t. - * progmodes/cc-engine.el (c-forward-decl-or-cast-1): While - handling a "(", add a check for, effectively, Java, and handle a + * progmodes/cc-engine.el (c-forward-decl-or-cast-1): + While handling a "(", add a check for, effectively, Java, and handle a "typeless" declaration there. 2013-09-07 Roland Winkler diff --git a/lisp/subr.el b/lisp/subr.el index 0a28d4778d4..de7c629b208 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -3350,16 +3350,22 @@ even if this catches the signal." (define-obsolete-function-alias 'condition-case-no-debug 'condition-case-unless-debug "24.1") -(defmacro with-demoted-errors (&rest body) +(defmacro with-demoted-errors (format &rest body) "Run BODY and demote any errors to simple messages. If `debug-on-error' is non-nil, run BODY without catching its errors. This is to be used around code which is not expected to signal an error -but which should be robust in the unexpected case that an error is signaled." - (declare (debug t) (indent 0)) - (let ((err (make-symbol "err"))) +but which should be robust in the unexpected case that an error is signaled. +For backward compatibility, if FORMAT is not a constant string, it +is assumed to be part of BODY, in which case the message format +used is \"Error: %S\"." + (declare (debug t) (indent 1)) + (let ((err (make-symbol "err")) + (format (if (and (stringp format) body) format + (prog1 "Error: %S" + (if format (push format body)))))) `(condition-case-unless-debug ,err - (progn ,@body) - (error (message "Error: %S" ,err) nil)))) + ,(macroexp-progn body) + (error (message ,format ,err) nil)))) (defmacro combine-after-change-calls (&rest body) "Execute BODY, but don't call the after-change functions till the end. diff --git a/src/ChangeLog b/src/ChangeLog index 4b688e43430..4e08178989e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2013-09-10 Stefan Monnier + + * eval.c (Feval): Document the new use of `lexical'. + 2013-09-09 Dmitry Antipov Review and drop old frame resize hack. @@ -20,8 +24,8 @@ 2013-09-09 Dmitry Antipov Cleanup frame flushing. - * dispextern.h (struct redisplay_interface): Drop - flush_display_optional because flush_display is enough + * dispextern.h (struct redisplay_interface): + Drop flush_display_optional because flush_display is enough for X and flushing via RIF is just a no-op for others. * frame.h (flush_frame): New function. * dispnew.c (update_frame): diff --git a/src/eval.c b/src/eval.c index 9db4d1fd81b..6e964f6604b 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2033,7 +2033,9 @@ it is defines a macro. */) DEFUN ("eval", Feval, Seval, 1, 2, 0, doc: /* Evaluate FORM and return its value. -If LEXICAL is t, evaluate using lexical scoping. */) +If LEXICAL is t, evaluate using lexical scoping. +LEXICAL can also be an actual lexical environment, in the form of an +alist mapping symbols to their value. */) (Lisp_Object form, Lisp_Object lexical) { ptrdiff_t count = SPECPDL_INDEX (); From 02ef6c1a8a4905b519968760aa70153b921e07a9 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 10 Sep 2013 13:13:48 -0400 Subject: [PATCH 051/321] * lisp/simple.el: Use set-temporary-overlay-map for universal-argument. (universal-argument-map): Don't use default-bindings. Bind switch-frame explicitly. Replace universal-argument-minus with a conditional binding. (universal-argument-num-events, saved-overriding-map): Remove. (restore-overriding-map): Remove. (universal-argument--mode): Rename from save&set-overriding-map, and rewrite. (universal-argument, universal-argument-more, negative-argument) (digit-argument): Adjust accordingly. (universal-argument-minus): Remove. (universal-argument-other-key): Remove. --- lisp/ChangeLog | 13 ++++++ lisp/simple.el | 112 ++++++++++++++++--------------------------------- 2 files changed, 49 insertions(+), 76 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ff6ec4755b2..2a4e6834006 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,18 @@ 2013-09-10 Stefan Monnier + * simple.el: Use set-temporary-overlay-map for universal-argument. + (universal-argument-map): Don't use default-bindings. + Bind switch-frame explicitly. Replace universal-argument-minus with + a conditional binding. + (universal-argument-num-events, saved-overriding-map): Remove. + (restore-overriding-map): Remove. + (universal-argument--mode): Rename from save&set-overriding-map, + and rewrite. + (universal-argument, universal-argument-more, negative-argument) + (digit-argument): Adjust accordingly. + (universal-argument-minus): Remove. + (universal-argument-other-key): Remove. + * subr.el (with-demoted-errors): Add `format' argument. 2013-09-10 Michael Albinus diff --git a/lisp/simple.el b/lisp/simple.el index c8fbf0b6dae..593f36d1ee1 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -3180,12 +3180,18 @@ see other processes running on the system, use `list-system-processes'." nil) (defvar universal-argument-map - (let ((map (make-sparse-keymap))) - (define-key map [t] 'universal-argument-other-key) - (define-key map (vector meta-prefix-char t) 'universal-argument-other-key) - (define-key map [switch-frame] nil) + (let ((map (make-sparse-keymap)) + (universal-argument-minus + ;; For backward compatibility, minus with no modifiers is an ordinary + ;; command if digits have already been entered. + `(menu-item "" negative-argument + :filter ,(lambda (cmd) + (if (integerp prefix-arg) nil cmd))))) + (define-key map [switch-frame] + (lambda (e) (interactive "e") + (handle-switch-frame e) (universal-argument--mode))) (define-key map [?\C-u] 'universal-argument-more) - (define-key map [?-] 'universal-argument-minus) + (define-key map [?-] universal-argument-minus) (define-key map [?0] 'digit-argument) (define-key map [?1] 'digit-argument) (define-key map [?2] 'digit-argument) @@ -3206,30 +3212,12 @@ see other processes running on the system, use `list-system-processes'." (define-key map [kp-7] 'digit-argument) (define-key map [kp-8] 'digit-argument) (define-key map [kp-9] 'digit-argument) - (define-key map [kp-subtract] 'universal-argument-minus) + (define-key map [kp-subtract] universal-argument-minus) map) "Keymap used while processing \\[universal-argument].") -(defvar universal-argument-num-events nil - "Number of argument-specifying events read by `universal-argument'. -`universal-argument-other-key' uses this to discard those events -from (this-command-keys), and reread only the final command.") - -(defvar saved-overriding-map t - "The saved value of `overriding-terminal-local-map'. -That variable gets restored to this value on exiting \"universal -argument mode\".") - -(defun save&set-overriding-map (map) - "Set `overriding-terminal-local-map' to MAP." - (when (eq saved-overriding-map t) - (setq saved-overriding-map overriding-terminal-local-map) - (setq overriding-terminal-local-map map))) - -(defun restore-overriding-map () - "Restore `overriding-terminal-local-map' to its saved value." - (setq overriding-terminal-local-map saved-overriding-map) - (setq saved-overriding-map t)) +(defun universal-argument--mode () + (set-temporary-overlay-map universal-argument-map)) (defun universal-argument () "Begin a numeric argument for the following command. @@ -3243,33 +3231,27 @@ which is different in effect from any particular numeric argument. These commands include \\[set-mark-command] and \\[start-kbd-macro]." (interactive) (setq prefix-arg (list 4)) - (setq universal-argument-num-events (length (this-command-keys))) - (save&set-overriding-map universal-argument-map)) + (universal-argument--mode)) -;; A subsequent C-u means to multiply the factor by 4 if we've typed -;; nothing but C-u's; otherwise it means to terminate the prefix arg. (defun universal-argument-more (arg) + ;; A subsequent C-u means to multiply the factor by 4 if we've typed + ;; nothing but C-u's; otherwise it means to terminate the prefix arg. (interactive "P") - (if (consp arg) - (setq prefix-arg (list (* 4 (car arg)))) - (if (eq arg '-) - (setq prefix-arg (list -4)) - (setq prefix-arg arg) - (restore-overriding-map))) - (setq universal-argument-num-events (length (this-command-keys)))) + (setq prefix-arg (if (consp arg) + (list (* 4 (car arg))) + (if (eq arg '-) + (list -4) + arg))) + (when (consp prefix-arg) (universal-argument--mode))) (defun negative-argument (arg) "Begin a negative numeric argument for the next command. \\[universal-argument] following digits or minus sign ends the argument." (interactive "P") - (cond ((integerp arg) - (setq prefix-arg (- arg))) - ((eq arg '-) - (setq prefix-arg nil)) - (t - (setq prefix-arg '-))) - (setq universal-argument-num-events (length (this-command-keys))) - (save&set-overriding-map universal-argument-map)) + (setq prefix-arg (cond ((integerp arg) (- arg)) + ((eq arg '-) nil) + (t '-))) + (universal-argument--mode)) (defun digit-argument (arg) "Part of the numeric argument for the next command. @@ -3279,37 +3261,15 @@ These commands include \\[set-mark-command] and \\[start-kbd-macro]." last-command-event (get last-command-event 'ascii-character))) (digit (- (logand char ?\177) ?0))) - (cond ((integerp arg) - (setq prefix-arg (+ (* arg 10) - (if (< arg 0) (- digit) digit)))) - ((eq arg '-) - ;; Treat -0 as just -, so that -01 will work. - (setq prefix-arg (if (zerop digit) '- (- digit)))) - (t - (setq prefix-arg digit)))) - (setq universal-argument-num-events (length (this-command-keys))) - (save&set-overriding-map universal-argument-map)) - -;; For backward compatibility, minus with no modifiers is an ordinary -;; command if digits have already been entered. -(defun universal-argument-minus (arg) - (interactive "P") - (if (integerp arg) - (universal-argument-other-key arg) - (negative-argument arg))) - -;; Anything else terminates the argument and is left in the queue to be -;; executed as a command. -(defun universal-argument-other-key (arg) - (interactive "P") - (setq prefix-arg arg) - (let* ((key (this-command-keys)) - (keylist (listify-key-sequence key))) - (setq unread-command-events - (append (nthcdr universal-argument-num-events keylist) - unread-command-events))) - (reset-this-command-lengths) - (restore-overriding-map)) + (setq prefix-arg (cond ((integerp arg) + (+ (* arg 10) + (if (< arg 0) (- digit) digit))) + ((eq arg '-) + ;; Treat -0 as just -, so that -01 will work. + (if (zerop digit) '- (- digit))) + (t + digit)))) + (universal-argument--mode)) (defvar filter-buffer-substring-functions nil From 6a5c15d95f69fc787edda65e0f81440b536653c2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 10 Sep 2013 16:28:22 -0400 Subject: [PATCH 052/321] * lisp/progmodes/cc-mode.el (awk-mode): Remove duplicate autoload. Autoload of define-derived-mode works just fine. --- lisp/ChangeLog | 4 ++++ lisp/progmodes/cc-mode.el | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2a4e6834006..9282aa16a2d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-10 Glenn Morris + + * progmodes/cc-mode.el (awk-mode): Remove duplicate autoload. + 2013-09-10 Stefan Monnier * simple.el: Use set-temporary-overlay-map for universal-argument. diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index 1e8d6cba8c4..e977a415d62 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -1594,10 +1594,6 @@ Key bindings: ;;;###autoload (add-to-list 'interpreter-mode-alist '("nawk" . awk-mode)) ;;;###autoload (add-to-list 'interpreter-mode-alist '("gawk" . awk-mode)) -;;; Autoload directives must be on the top level, so we construct an -;;; autoload form instead. -;;;###autoload (autoload 'awk-mode "cc-mode" "Major mode for editing AWK code." t) - (c-define-abbrev-table 'awk-mode-abbrev-table '(("else" "else" c-electric-continued-statement 0) ("while" "while" c-electric-continued-statement 0)) From 1af4c2203ce7954c089133234ba80e6272ce9458 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 10 Sep 2013 16:38:52 -0400 Subject: [PATCH 053/321] Treat interpreter-mode-alist as alist of regexps, not literals Cf http://lists.gnu.org/archive/html/emacs-devel/2005-08/msg00472.html * lisp/files.el (interpreter-mode-alist): Convert to regexps. (set-auto-mode): Adapt for this. * lisp/progmodes/cperl-mode.el (cperl-clobber-mode-lists): Comment out unused variable. * lisp/progmodes/cc-mode.el (interpreter-mode-alist): * lisp/progmodes/python.el (interpreter-mode-alist): * lisp/progmodes/ruby-mode.el (interpreter-mode-alist): Convert to regexps. * lisp/progmodes/sh-script.el (sh-set-shell): No longer use interpreter-mode-alist to get list of shells. * etc/NEWS: Mention this. Fixes: debbugs:15306 --- etc/NEWS | 8 +++ lisp/ChangeLog | 10 ++++ lisp/files.el | 109 ++++++++++++++++++----------------- lisp/progmodes/cc-mode.el | 7 +-- lisp/progmodes/cperl-mode.el | 18 +++--- lisp/progmodes/python.el | 2 +- lisp/progmodes/ruby-mode.el | 3 +- lisp/progmodes/sh-script.el | 17 ++++-- 8 files changed, 99 insertions(+), 75 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 9914da31859..78f99dbc621 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -614,6 +614,14 @@ file using `set-file-extended-attributes'. ** `visited-file-modtime' now returns -1 for nonexistent files. Formerly it returned a list (-1 LOW USEC PSEC), but this was ambiguous in the presence of files with negative time stamps. + +** The cars of the elements in `interpreter-mode-alist' are now treated +as regexps rather than literal strings. For the time being, any +element whose car does not start with "\\" is still treated as a +literal string, so this change should not cause any incompatibilities +if you have code that just adds elements to the list, only if you are +actually using interpreter-mode-alist for something. + * Lisp Changes in Emacs 24.4 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9282aa16a2d..32ea5e72efd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,15 @@ 2013-09-10 Glenn Morris + * files.el (interpreter-mode-alist): Convert to regexps. + (set-auto-mode): Adapt for this. (Bug#15306) + * progmodes/cperl-mode.el (cperl-clobber-mode-lists): + Comment out unused variable. + * progmodes/cc-mode.el (interpreter-mode-alist): + * progmodes/python.el (interpreter-mode-alist): + * progmodes/ruby-mode.el (interpreter-mode-alist): Convert to regexps. + * progmodes/sh-script.el (sh-set-shell): + No longer use interpreter-mode-alist to get list of shells. + * progmodes/cc-mode.el (awk-mode): Remove duplicate autoload. 2013-09-10 Stefan Monnier diff --git a/lisp/files.el b/lisp/files.el index f9ff3c936bd..2315448c549 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2447,48 +2447,43 @@ and `magic-mode-alist', which determines modes based on file contents.") (mapcar (lambda (l) (cons (purecopy (car l)) (cdr l))) - '(("perl" . perl-mode) - ("perl5" . perl-mode) - ("miniperl" . perl-mode) - ("wish" . tcl-mode) - ("wishx" . tcl-mode) - ("tcl" . tcl-mode) - ("tclsh" . tcl-mode) - ("expect" . tcl-mode) - ("scm" . scheme-mode) - ("ash" . sh-mode) - ("bash" . sh-mode) - ("bash2" . sh-mode) - ("csh" . sh-mode) - ("dtksh" . sh-mode) - ("es" . sh-mode) - ("itcsh" . sh-mode) - ("jsh" . sh-mode) - ("ksh" . sh-mode) - ("oash" . sh-mode) - ("pdksh" . sh-mode) - ("rbash" . sh-mode) - ("rc" . sh-mode) - ("rpm" . sh-mode) - ("sh" . sh-mode) - ("sh5" . sh-mode) - ("tcsh" . sh-mode) - ("wksh" . sh-mode) - ("wsh" . sh-mode) - ("zsh" . sh-mode) - ("tail" . text-mode) - ("more" . text-mode) - ("less" . text-mode) - ("pg" . text-mode) - ("make" . makefile-gmake-mode) ; Debian uses this - ("guile" . scheme-mode) - ("clisp" . lisp-mode) - ("emacs" . emacs-lisp-mode))) + '(("\\`\\(mini\\)?perl5?\\'" . perl-mode) + ("\\`wishx?\\'" . tcl-mode) + ("\\`tcl\\(sh\\)?\\'" . tcl-mode) + ("\\`expect\\'" . tcl-mode) + ("\\`scm\\'" . scheme-mode) + ("\\`[acjkwz]sh\\'" . sh-mode) + ("\\`bash2?\\'" . sh-mode) + ("\\`dtksh\\'" . sh-mode) + ("\\`es\\'" . sh-mode) + ("\\`itcsh\\'" . sh-mode) + ("\\`oash\\'" . sh-mode) + ("\\`pdksh\\'" . sh-mode) + ("\\`rbash\\'" . sh-mode) + ("\\`rc\\'" . sh-mode) + ("\\`rpm\\'" . sh-mode) + ("\\`sh5?\\'" . sh-mode) + ("\\`tcsh\\'" . sh-mode) + ("\\`wksh\\'" . sh-mode) + ("\\`tail\\'" . text-mode) + ("\\`more\\'" . text-mode) + ("\\`less\\'" . text-mode) + ("\\`pg\\'" . text-mode) + ("\\`make\\'" . makefile-gmake-mode) ; Debian uses this + ("\\`guile\\'" . scheme-mode) + ("\\`clisp\\'" . lisp-mode) + ("\\`emacs\\'" . emacs-lisp-mode))) "Alist mapping interpreter names to major modes. This is used for files whose first lines match `auto-mode-interpreter-regexp'. -Each element looks like (INTERPRETER . MODE). -If INTERPRETER matches the name of the interpreter specified in the first line -of a script, mode MODE is enabled. +Each element looks like (REGEXP . MODE). +If REGEXP matches the name (minus any directory part) of the interpreter +specified in the first line of a script, enable major mode MODE. + +Emacs versions earlier than 24.4 treat the car of each element as a +literal string that must match the entire name, rather than a regexp. +For backwards compatibility, any REGEXP that does not begin with \"\\\\\" +continues to be treated in this way. This behavior may be removed in +future and should not be relied upon. See also `auto-mode-alist'.") @@ -2683,19 +2678,27 @@ we don't actually set it to the same mode the buffer already has." ;; If we didn't, look for an interpreter specified in the first line. ;; As a special case, allow for things like "#!/bin/env perl", which ;; finds the interpreter anywhere in $PATH. - (unless done - (setq mode (save-excursion - (goto-char (point-min)) - (if (looking-at auto-mode-interpreter-regexp) - (match-string 2) - "")) - ;; Map interpreter name to a mode, signaling we're done at the - ;; same time. - done (assoc (file-name-nondirectory mode) - interpreter-mode-alist)) - ;; If we found an interpreter mode to use, invoke it now. - (if done - (set-auto-mode-0 (cdr done) keep-mode-if-same))) + (and (not done) + (setq mode (save-excursion + (goto-char (point-min)) + (if (looking-at auto-mode-interpreter-regexp) + (match-string 2)))) + ;; Map interpreter name to a mode, signaling we're done at the + ;; same time. + (setq done (assoc-default + (file-name-nondirectory mode) + ;; Backwards compat: if car of i-m-alist does not start + ;; with "\\", treat as literal string. + (mapcar (lambda (e) + (if (string-match-p "\\`\\\\" (car e)) + e + (cons + (format "\\`%s\\'" (regexp-quote (car e))) + (cdr e)))) + interpreter-mode-alist) + #'string-match-p)) + ;; If we found an interpreter mode to use, invoke it now. + (set-auto-mode-0 done keep-mode-if-same)) ;; Next try matching the buffer beginning against magic-mode-alist. (unless done (if (setq done (save-excursion diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index e977a415d62..bffc5b95d25 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -1555,7 +1555,7 @@ Key bindings: (cons "Pike" (c-lang-const c-mode-menu pike))) ;;;###autoload (add-to-list 'auto-mode-alist '("\\.\\(u?lpc\\|pike\\|pmod\\(\\.in\\)?\\)\\'" . pike-mode)) -;;;###autoload (add-to-list 'interpreter-mode-alist '("pike" . pike-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("\\`pike\\'" . pike-mode)) ;;;###autoload (define-derived-mode pike-mode prog-mode "Pike" @@ -1589,10 +1589,7 @@ Key bindings: ;; Support for AWK ;;;###autoload (add-to-list 'auto-mode-alist '("\\.awk\\'" . awk-mode)) -;;;###autoload (add-to-list 'interpreter-mode-alist '("awk" . awk-mode)) -;;;###autoload (add-to-list 'interpreter-mode-alist '("mawk" . awk-mode)) -;;;###autoload (add-to-list 'interpreter-mode-alist '("nawk" . awk-mode)) -;;;###autoload (add-to-list 'interpreter-mode-alist '("gawk" . awk-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("\\`[gmn]?awk\\'" . awk-mode)) (c-define-abbrev-table 'awk-mode-abbrev-table '(("else" "else" c-electric-continued-statement 0) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 770e78bb3b1..1eea6972707 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -412,15 +412,15 @@ Affects: `cperl-font-lock', `cperl-electric-lbrace-space', "use cperl-vc-rcs-header or cperl-vc-sccs-header instead." "22.1") -(defcustom cperl-clobber-mode-lists - (not - (and - (boundp 'interpreter-mode-alist) - (assoc "miniperl" interpreter-mode-alist) - (assoc "\\.\\([pP][Llm]\\|al\\)$" auto-mode-alist))) - "*Whether to install us into `interpreter-' and `extension' mode lists." - :type 'boolean - :group 'cperl) +;;; (defcustom cperl-clobber-mode-lists +;;; (not +;;; (and +;;; (boundp 'interpreter-mode-alist) +;;; (assoc "miniperl" interpreter-mode-alist) +;;; (assoc "\\.\\([pP][Llm]\\|al\\)$" auto-mode-alist))) +;;; "*Whether to install us into `interpreter-' and `extension' mode lists." +;;; :type 'boolean +;;; :group 'cperl) (defcustom cperl-info-on-command-no-prompt nil "*Not-nil (and non-null) means not to prompt on C-h f. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 05d707acf43..bba4453cce8 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -225,7 +225,7 @@ ;;;###autoload (add-to-list 'auto-mode-alist (cons (purecopy "\\.py\\'") 'python-mode)) ;;;###autoload -(add-to-list 'interpreter-mode-alist (cons (purecopy "python") 'python-mode)) +(add-to-list 'interpreter-mode-alist (cons (purecopy "\\`python[23.]*\\'") 'python-mode)) (defgroup python nil "Python Language's flying circus support for Emacs." diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 0f868255589..9dc2c4fb6c9 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1968,8 +1968,7 @@ The variable `ruby-indent-level' controls the amount of indentation. "\\)\\'")) 'ruby-mode)) ;;;###autoload -(dolist (name (list "ruby" "rbx" "jruby" "ruby1.9" "ruby1.8")) - (add-to-list 'interpreter-mode-alist (cons (purecopy name) 'ruby-mode))) +(add-to-list 'interpreter-mode-alist (cons (purecopy "\\`\\(rbx\\|j?ruby\\(1\\.[89]\\)?\\)\\'") 'ruby-mode)) (provide 'ruby-mode) diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index 292bc2369a6..3ea2afb6fc3 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -2170,11 +2170,18 @@ the visited file executable, and NO-QUERY-FLAG (the second argument) controls whether to query about making the visited file executable. Calls the value of `sh-set-shell-hook' if set." - (interactive (list (completing-read (format "Shell \(default %s\): " - sh-shell-file) - interpreter-mode-alist - (lambda (x) (eq (cdr x) 'sh-mode)) - nil nil nil sh-shell-file) + (interactive (list (completing-read + (format "Shell \(default %s\): " + sh-shell-file) + ;; This used to use interpreter-mode-alist, but that is + ;; no longer appropriate now that uses regexps. + ;; Maybe there could be a separate variable that lists + ;; the shells, used here and to construct i-mode-alist. + ;; But the following is probably good enough: + (append (mapcar (lambda (e) (symbol-name (car e))) + sh-ancestor-alist) + '("csh" "rc" "sh")) + nil nil nil nil sh-shell-file) (eq executable-query 'function) t)) (if (string-match "\\.exe\\'" shell) From 93ef404dc95f947e1c48000a46968fd252781b9d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 10 Sep 2013 16:46:25 -0400 Subject: [PATCH 054/321] Tweak previous change --- lisp/progmodes/python.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index bba4453cce8..5eecc347f03 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -225,7 +225,7 @@ ;;;###autoload (add-to-list 'auto-mode-alist (cons (purecopy "\\.py\\'") 'python-mode)) ;;;###autoload -(add-to-list 'interpreter-mode-alist (cons (purecopy "\\`python[23.]*\\'") 'python-mode)) +(add-to-list 'interpreter-mode-alist (cons (purecopy "\\`python[0-9.]*\\'") 'python-mode)) (defgroup python nil "Python Language's flying circus support for Emacs." From 346755408a585e03e507ec9e9df37ac883eed4ee Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 10 Sep 2013 21:43:07 -0400 Subject: [PATCH 055/321] * lisp/profiler.el (profiler-calltree-find): Use function-equal. --- lisp/ChangeLog | 4 ++++ lisp/profiler.el | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 32ea5e72efd..135145fe7fc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-11 Stefan Monnier + + * profiler.el (profiler-calltree-find): Use function-equal. + 2013-09-10 Glenn Morris * files.el (interpreter-mode-alist): Convert to regexps. diff --git a/lisp/profiler.el b/lisp/profiler.el index 609a0308cf0..93ab10015ea 100644 --- a/lisp/profiler.el +++ b/lisp/profiler.el @@ -256,10 +256,9 @@ Optional argument MODE means only check for the specified mode (cpu or mem)." (defun profiler-calltree-find (tree entry) "Return a child tree of ENTRY under TREE." (let (result (children (profiler-calltree-children tree))) - ;; FIXME: Use `assoc'. (while (and children (null result)) (let ((child (car children))) - (when (equal (profiler-calltree-entry child) entry) + (when (function-equal (profiler-calltree-entry child) entry) (setq result child)) (setq children (cdr children)))) result)) From 533f258f364353f40850c16bf50fa08af9dc46a8 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 10 Sep 2013 22:41:00 -0400 Subject: [PATCH 056/321] * src/keyboard.c (read_char): Don't break immediate_echo. Fixes: debbugs:15332 --- src/ChangeLog | 4 ++++ src/keyboard.c | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4e08178989e..e609c38be7e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2013-09-11 Stefan Monnier + + * keyboard.c (read_char): Don't break immediate_echo (bug#15332). + 2013-09-10 Stefan Monnier * eval.c (Feval): Document the new use of `lexical'. diff --git a/src/keyboard.c b/src/keyboard.c index 440820c57db..a768c9bb409 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -2596,9 +2596,7 @@ read_char (int commandflag, Lisp_Object map, if (/* There currently is something in the echo area. */ !NILP (echo_area_buffer[0]) - && (/* And it's either not from echoing. */ - !EQ (echo_area_buffer[0], echo_message_buffer) - /* Or it's an echo from a different kboard. */ + && (/* It's an echo from a different kboard. */ || echo_kboard != current_kboard /* Or we explicitly allow overwriting whatever there is. */ || ok_to_echo_at_next_pause == NULL)) From 765da53c2084e3687201f06f8d050497f0e06da9 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 10 Sep 2013 23:31:06 -0400 Subject: [PATCH 057/321] * keyboard.c (read_char): Fix last change. Fixes: debbugs:15332 --- src/keyboard.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/keyboard.c b/src/keyboard.c index a768c9bb409..020c8859941 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -2597,7 +2597,7 @@ read_char (int commandflag, Lisp_Object map, if (/* There currently is something in the echo area. */ !NILP (echo_area_buffer[0]) && (/* It's an echo from a different kboard. */ - || echo_kboard != current_kboard + echo_kboard != current_kboard /* Or we explicitly allow overwriting whatever there is. */ || ok_to_echo_at_next_pause == NULL)) cancel_echoing (); From 1b3b87dfe0fae8e5266319531c0a874c8b4313b1 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 10 Sep 2013 23:31:56 -0400 Subject: [PATCH 058/321] Use define-derived-mode (and derived-mode-p). * lisp/play/snake.el (snake-mode): * lisp/play/mpuz.el (mpuz-mode): * lisp/play/landmark.el (lm-mode): * lisp/play/blackbox.el (blackbox-mode): * lisp/play/5x5.el (5x5-mode): * lisp/obsolete/options.el (Edit-options-mode): * lisp/net/quickurl.el (quickurl-list-mode): * lisp/net/newst-treeview.el (newsticker-treeview-mode): * lisp/mail/rmailsum.el (rmail-summary-mode): * lisp/mail/mspools.el (mspools-mode): * lisp/locate.el (locate-mode): * lisp/ibuffer.el (ibuffer-mode): * lisp/emulation/ws-mode.el (wordstar-mode): * lisp/emacs-lisp/debug.el (debugger-mode): * lisp/array.el (array-mode): * lisp/net/eudc.el (eudc-mode): Use define-derived-mode. * lisp/net/mairix.el (mairix-searches-mode-font-lock-keywords): Move initialization into declaration. (mairix-searches-mode): Use define-derived-mode. * lisp/net/eudc-hotlist.el (eudc-hotlist-mode): Use define-derived-mode. (eudc-edit-hotlist): Use dolist. * lisp/man.el (Man-mode-syntax-table): Rename from man-mode-syntax-table. (Man-mode): Use define-derived-mode. * lisp/info.el (Info-edit-mode-map): Rename from Info-edit-map. (Info-edit-mode): Use define-derived-mode. (Info-cease-edit): Use Info-mode. * lisp/eshell/esh-mode.el (eshell-mode-syntax-table): Move initialization into declaration. (eshell-mode): Use define-derived-mode. * lisp/chistory.el (command-history-mode-map): Rename from command-history-map. (command-history-mode): Use define-derived-mode. * lisp/calc/calc.el (calc-trail-mode-map): New var. (calc-trail-mode): Use define-derived-mode. (calc-trail-buffer): Set calc-main-buffer manually. * lisp/bookmark.el (bookmark-insert-annotation): New function. (bookmark-edit-annotation): Use it. (bookmark-edit-annotation-mode): Make it a proper major mode. (bookmark-send-edited-annotation): Use derived-mode-p. * lisp/arc-mode.el (archive-mode): Move kill-all-local-variables a tiny bit closer to its ideal place. Use \' to match EOS. * lisp/cedet/semantic/grammar.el (semantic-grammar-mode): Use define-derived-mode. (semantic-grammar-mode-syntax-table): Rename from semantic-grammar-syntax-table. (semantic-grammar-mode-map): Rename from semantic-grammar-map. * lisp/cedet/data-debug.el (data-debug-mode-map): Rename from data-debug-map. (data-debug-mode): Use define-derived-mode. * lisp/gnus/score-mode.el (gnus-score-mode-map): Move initialization into declaration. (gnus-score-mode): Use define-derived-mode. * lisp/gnus/gnus-srvr.el (gnus-browse-mode): Use define-derived-mode. * lisp/gnus/gnus-kill.el (gnus-kill-file-mode-map): Move initialization into declaration. (gnus-kill-file-mode): Use define-derived-mode. (gnus-kill-file-edit-file, gnus-kill-file-enter-kill, gnus-kill): Use derived-mode-p. * lisp/gnus/gnus-group.el (gnus-group-mode): Use define-derived-mode. (gnus-group-setup-buffer, gnus-group-name-at-point) (gnus-group-make-web-group, gnus-group-enter-directory) (gnus-group-suspend): Use derived-mode-p. * lisp/gnus/gnus-cus.el (gnus-custom-mode): Use define-derived-mode. * lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-mode): Use define-derived-mode. * lisp/gnus/gnus-art.el (gnus-article-mode): Use define-derived-mode. (gnus-article-setup-buffer, gnus-article-prepare) (gnus-article-prepare-display, gnus-sticky-article) (gnus-kill-sticky-article-buffer, gnus-kill-sticky-article-buffers) (gnus-bind-safe-url-regexp, gnus-article-check-buffer) (gnus-article-read-summary-keys): Use derived-mode-p. --- lisp/ChangeLog | 42 ++++++++++ lisp/arc-mode.el | 4 +- lisp/array.el | 11 +-- lisp/bookmark.el | 31 ++++--- lisp/calc/calc.el | 48 +++++------ lisp/cedet/ChangeLog | 75 +++++++++-------- lisp/cedet/data-debug.el | 18 ++-- lisp/cedet/semantic/grammar.el | 26 +++--- lisp/chistory.el | 18 ++-- lisp/comint.el | 28 +++---- lisp/emacs-lisp/debug.el | 8 +- lisp/emulation/ws-mode.el | 114 ++----------------------- lisp/eshell/esh-mode.el | 149 ++++++++++++++------------------- lisp/gnus/ChangeLog | 58 +++++++++---- lisp/gnus/gnus-art.el | 39 ++++----- lisp/gnus/gnus-bookmark.el | 11 +-- lisp/gnus/gnus-cus.el | 8 +- lisp/gnus/gnus-group.el | 20 ++--- lisp/gnus/gnus-kill.el | 44 ++++------ lisp/gnus/gnus-srvr.el | 13 +-- lisp/gnus/score-mode.el | 26 ++---- lisp/ibuffer.el | 15 ++-- lisp/info.el | 46 +++++----- lisp/locate.el | 44 ++++------ lisp/mail/mspools.el | 10 +-- lisp/mail/rmailsum.el | 11 +-- lisp/man.el | 15 +--- lisp/net/eudc-hotlist.el | 37 ++++---- lisp/net/eudc.el | 16 ++-- lisp/net/mairix.el | 39 ++++----- lisp/net/newst-treeview.el | 6 +- lisp/net/quickurl.el | 8 +- lisp/obsolete/options.el | 16 +--- lisp/play/5x5.el | 15 +--- lisp/play/blackbox.el | 11 +-- lisp/play/landmark.el | 19 ++--- lisp/play/mpuz.el | 12 +-- lisp/play/snake.el | 16 +--- 38 files changed, 441 insertions(+), 686 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 135145fe7fc..e1f1aaa1888 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,47 @@ 2013-09-11 Stefan Monnier + * play/snake.el (snake-mode): + * play/mpuz.el (mpuz-mode): + * play/landmark.el (lm-mode): + * play/blackbox.el (blackbox-mode): + * play/5x5.el (5x5-mode): + * obsolete/options.el (Edit-options-mode): + * net/quickurl.el (quickurl-list-mode): + * net/newst-treeview.el (newsticker-treeview-mode): + * mail/rmailsum.el (rmail-summary-mode): + * mail/mspools.el (mspools-mode): + * locate.el (locate-mode): + * ibuffer.el (ibuffer-mode): + * emulation/ws-mode.el (wordstar-mode): + * emacs-lisp/debug.el (debugger-mode): + * array.el (array-mode): + * net/eudc.el (eudc-mode): Use define-derived-mode. + * net/mairix.el (mairix-searches-mode-font-lock-keywords): + Move initialization into declaration. + (mairix-searches-mode): Use define-derived-mode. + * net/eudc-hotlist.el (eudc-hotlist-mode): Use define-derived-mode. + (eudc-edit-hotlist): Use dolist. + * man.el (Man-mode-syntax-table): Rename from man-mode-syntax-table. + (Man-mode): Use define-derived-mode. + * info.el (Info-edit-mode-map): Rename from Info-edit-map. + (Info-edit-mode): Use define-derived-mode. + (Info-cease-edit): Use Info-mode. + * eshell/esh-mode.el (eshell-mode-syntax-table): Move initialization + into declaration. + (eshell-mode): Use define-derived-mode. + * chistory.el (command-history-mode-map): Rename from + command-history-map. + (command-history-mode): Use define-derived-mode. + * calc/calc.el (calc-trail-mode-map): New var. + (calc-trail-mode): Use define-derived-mode. + (calc-trail-buffer): Set calc-main-buffer manually. + * bookmark.el (bookmark-insert-annotation): New function. + (bookmark-edit-annotation): Use it. + (bookmark-edit-annotation-mode): Make it a proper major mode. + (bookmark-send-edited-annotation): Use derived-mode-p. + * arc-mode.el (archive-mode): Move kill-all-local-variables a tiny bit + closer to its ideal place. Use \' to match EOS. + * profiler.el (profiler-calltree-find): Use function-equal. 2013-09-10 Glenn Morris diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index a4f7015c844..c22205d5634 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -683,9 +683,9 @@ archive. ;; At present we cannot create archives from scratch (funcall (or (default-value 'major-mode) 'fundamental-mode)) (if (and (not force) archive-files) nil + (kill-all-local-variables) (let* ((type (archive-find-type)) (typename (capitalize (symbol-name type)))) - (kill-all-local-variables) (make-local-variable 'archive-subtype) (setq archive-subtype type) @@ -761,7 +761,7 @@ archive. ((looking-at "..-l[hz][0-9ds]-") 'lzh) ((looking-at "....................[\334]\247\304\375") 'zoo) ((and (looking-at "\C-z") ; signature too simple, IMHO - (string-match "\\.[aA][rR][cC]$" + (string-match "\\.[aA][rR][cC]\\'" (or buffer-file-name (buffer-name)))) 'arc) ;; This pattern modeled on the BSD/GNU+Linux `file' command. diff --git a/lisp/array.el b/lisp/array.el index e60cbdfffc1..8c4f609e626 100644 --- a/lisp/array.el +++ b/lisp/array.el @@ -800,7 +800,7 @@ Return COLUMN." (put 'array-mode 'mode-class 'special) ;;;###autoload -(defun array-mode () +(define-derived-mode array-mode fundamental-mode "Array" "Major mode for editing arrays. Array mode is a specialized mode for editing arrays. An array is @@ -863,9 +863,6 @@ take a numeric prefix argument): \\[array-display-local-variables] Display the current values of local variables. Entering array mode calls the function `array-mode-hook'." - - (interactive) - (kill-all-local-variables) (make-local-variable 'array-buffer-line) (make-local-variable 'array-buffer-column) (make-local-variable 'array-row) @@ -888,13 +885,9 @@ Entering array mode calls the function `array-mode-hook'." (+ (floor (1- array-max-column) array-columns-per-line) (if array-rows-numbered 2 1))) (message "") - (setq major-mode 'array-mode) - (setq mode-name "Array") (force-mode-line-update) (set (make-local-variable 'truncate-lines) t) - (setq overwrite-mode 'overwrite-mode-textual) - (use-local-map array-mode-map) - (run-mode-hooks 'array-mode-hook)) + (setq overwrite-mode 'overwrite-mode-textual)) diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 9514317809b..ce0d6831a3a 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -862,31 +862,25 @@ It takes one argument, the name of the bookmark, as a string.") map) "Keymap for editing an annotation of a bookmark.") - -(defun bookmark-edit-annotation-mode (bookmark-name-or-record) - "Mode for editing the annotation of bookmark BOOKMARK-NAME-OR-RECORD. -When you have finished composing, type \\[bookmark-send-annotation]. - -\\{bookmark-edit-annotation-mode-map}" - (interactive) - (kill-all-local-variables) - (make-local-variable 'bookmark-annotation-name) - (setq bookmark-annotation-name bookmark-name-or-record) - (use-local-map bookmark-edit-annotation-mode-map) - (setq major-mode 'bookmark-edit-annotation-mode - mode-name "Edit Bookmark Annotation") +(defun bookmark-insert-annotation (bookmark-name-or-record) (insert (funcall bookmark-edit-annotation-text-func bookmark-name-or-record)) (let ((annotation (bookmark-get-annotation bookmark-name-or-record))) (if (and annotation (not (string-equal annotation ""))) - (insert annotation))) - (run-mode-hooks 'text-mode-hook)) + (insert annotation)))) + +(define-derived-mode bookmark-edit-annotation-mode + text-mode "Edit Bookmark Annotation" + "Mode for editing the annotation of bookmarks. +When you have finished composing, type \\[bookmark-send-annotation]. + +\\{bookmark-edit-annotation-mode-map}") (defun bookmark-send-edited-annotation () "Use buffer contents as annotation for a bookmark. Lines beginning with `#' are ignored." (interactive) - (if (not (eq major-mode 'bookmark-edit-annotation-mode)) + (if (not (derived-mode-p 'bookmark-edit-annotation-mode)) (error "Not in bookmark-edit-annotation-mode")) (goto-char (point-min)) (while (< (point) (point-max)) @@ -906,7 +900,10 @@ Lines beginning with `#' are ignored." (defun bookmark-edit-annotation (bookmark-name-or-record) "Pop up a buffer for editing bookmark BOOKMARK-NAME-OR-RECORD's annotation." (pop-to-buffer (generate-new-buffer-name "*Bookmark Annotation Compose*")) - (bookmark-edit-annotation-mode bookmark-name-or-record)) + (bookmark-insert-annotation bookmark-name-or-record) + (bookmark-edit-annotation-mode) + (set (make-local-variable 'bookmark-annotation-name) + bookmark-name-or-record)) (defun bookmark-buffer-name () diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 2eeb880c34d..2795a177a41 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -1387,7 +1387,12 @@ Notations: 3.14e6 3.14 * 10^6 (calc-check-defines)) (setplist 'calc-define nil))))) -(defun calc-trail-mode (&optional buf) +(defvar calc-trail-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map calc-mode-map) + map)) + +(define-derived-mode calc-trail-mode fundamental-mode "Calc Trail" "Calc Trail mode. This mode is used by the *Calc Trail* buffer, which records all results obtained by the GNU Emacs Calculator. @@ -1397,26 +1402,18 @@ the Trail. This buffer uses the same key map as the *Calculator* buffer; calculator commands given here will actually operate on the *Calculator* stack." - (interactive) - (fundamental-mode) - (use-local-map calc-mode-map) - (setq major-mode 'calc-trail-mode) - (setq mode-name "Calc Trail") (setq truncate-lines t) (setq buffer-read-only t) (make-local-variable 'overlay-arrow-position) (make-local-variable 'overlay-arrow-string) - (when buf - (set (make-local-variable 'calc-main-buffer) buf)) (when (= (buffer-size) 0) (let ((buffer-read-only nil)) - (insert (propertize "Emacs Calculator Trail\n" 'face 'italic)))) - (run-mode-hooks 'calc-trail-mode-hook)) + (insert (propertize "Emacs Calculator Trail\n" 'face 'italic))))) (defun calc-create-buffer () "Create and initialize a buffer for the Calculator." (set-buffer (get-buffer-create "*Calculator*")) - (or (eq major-mode 'calc-mode) + (or (derived-mode-p 'calc-mode) (calc-mode)) (setq max-lisp-eval-depth (max max-lisp-eval-depth 1000)) (when calc-always-load-extensions @@ -1439,7 +1436,7 @@ commands given here will actually operate on the *Calculator* stack." (when (get-buffer-window "*Calc Keypad*") (calc-keypad) (set-buffer (window-buffer))) - (if (eq major-mode 'calc-mode) + (if (derived-mode-p 'calc-mode) (calc-quit) (let ((oldbuf (current-buffer))) (calc-create-buffer) @@ -1490,7 +1487,7 @@ commands given here will actually operate on the *Calculator* stack." (if (and (equal (buffer-name) "*Gnuplot Trail*") (> (recursion-depth) 0)) (exit-recursive-edit) - (if (eq major-mode 'calc-edit-mode) + (if (derived-mode-p 'calc-edit-mode) (calc-edit-finish arg) (if calc-was-keypad-mode (calc-keypad) @@ -1504,13 +1501,13 @@ commands given here will actually operate on the *Calculator* stack." (if (and (equal (buffer-name) "*Gnuplot Trail*") (> (recursion-depth) 0)) (exit-recursive-edit)) - (if (eq major-mode 'calc-edit-mode) + (if (derived-mode-p 'calc-edit-mode) (calc-edit-cancel) (if (and interactive calc-embedded-info (eq (current-buffer) (aref calc-embedded-info 0))) (calc-embedded nil) - (unless (eq major-mode 'calc-mode) + (unless (derived-mode-p 'calc-mode) (calc-create-buffer)) (run-hooks 'calc-end-hook) (if (integerp calc-undo-length) @@ -1631,10 +1628,10 @@ See calc-keypad for details." (if (math-lessp 1 time) (calc-record time "(t)")))) (or (memq 'no-align calc-command-flags) - (eq major-mode 'calc-trail-mode) + (derived-mode-p 'calc-trail-mode) (calc-align-stack-window)) (and (memq 'position-point calc-command-flags) - (if (eq major-mode 'calc-mode) + (if (derived-mode-p 'calc-mode) (progn (goto-char (point-min)) (forward-line (1- calc-final-point-line)) @@ -1664,7 +1661,7 @@ See calc-keypad for details." (setq calc-command-flags (cons f calc-command-flags)))) (defun calc-select-buffer () - (or (eq major-mode 'calc-mode) + (or (derived-mode-p 'calc-mode) (if calc-main-buffer (set-buffer calc-main-buffer) (let ((buf (get-buffer "*Calculator*"))) @@ -1801,7 +1798,7 @@ See calc-keypad for details." (and calc-embedded-info (calc-embedded-mode-line-change)))))) (defun calc-align-stack-window () - (if (eq major-mode 'calc-mode) + (if (derived-mode-p 'calc-mode) (progn (let ((win (get-buffer-window (current-buffer)))) (if win @@ -1988,7 +1985,7 @@ See calc-keypad for details." (defvar calc-any-evaltos nil) (defun calc-refresh (&optional align) (interactive) - (and (eq major-mode 'calc-mode) + (and (derived-mode-p 'calc-mode) (not calc-executing-macro) (let* ((buffer-read-only nil) (save-point (point)) @@ -2016,7 +2013,7 @@ See calc-keypad for details." (calc-align-stack-window) (goto-char save-point)) (if save-mark (set-mark save-mark)))) - (and calc-embedded-info (not (eq major-mode 'calc-mode)) + (and calc-embedded-info (not (derived-mode-p 'calc-mode)) (with-current-buffer (aref calc-embedded-info 1) (calc-refresh align))) (setq calc-refresh-count (1+ calc-refresh-count))) @@ -2078,12 +2075,13 @@ the United States." (null (buffer-name calc-trail-buffer))) (save-excursion (setq calc-trail-buffer (get-buffer-create "*Calc Trail*")) - (let ((buf (or (and (not (eq major-mode 'calc-mode)) + (let ((buf (or (and (not (derived-mode-p 'calc-mode)) (get-buffer "*Calculator*")) (current-buffer)))) (set-buffer calc-trail-buffer) - (or (eq major-mode 'calc-trail-mode) - (calc-trail-mode buf))))) + (unless (derived-mode-p 'calc-trail-mode) + (calc-trail-mode) + (set (make-local-variable 'calc-main-buffer) buf))))) (or (and calc-trail-pointer (eq (marker-buffer calc-trail-pointer) calc-trail-buffer)) (with-current-buffer calc-trail-buffer @@ -2152,7 +2150,7 @@ the United States." (defun calc-trail-here () (interactive) - (if (eq major-mode 'calc-trail-mode) + (if (derived-mode-p 'calc-trail-mode) (progn (beginning-of-line) (if (bobp) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 50467fa6e37..f5528202bb4 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,12 @@ +2013-09-11 Stefan Monnier + + * semantic/grammar.el (semantic-grammar-mode): Use define-derived-mode. + (semantic-grammar-mode-syntax-table): Rename from + semantic-grammar-syntax-table. + (semantic-grammar-mode-map): Rename from semantic-grammar-map. + * data-debug.el (data-debug-mode-map): Rename from data-debug-map. + (data-debug-mode): Use define-derived-mode. + 2013-09-05 Glenn Morris * semantic/fw.el (semantic-make-local-hook): @@ -15,15 +24,15 @@ * semantic/decorate/mode.el (semantic-decoration-on-includes-p-default) - (semantic-decoration-on-includes-highlight-default): Declare for + (semantic-decoration-on-includes-highlight-default): Declare for byte compiler. * semantic/wisent/python.el (semantic/format): New require. 2013-07-27 Eric Ludlam - * lisp/cedet/semantic/edit.el (semantic-edits-splice-remove): Wrap - debug message removing middle tag in semantic-edits-verbose-flag + * lisp/cedet/semantic/edit.el (semantic-edits-splice-remove): + Wrap debug message removing middle tag in semantic-edits-verbose-flag check. 2013-07-27 David Engster @@ -69,8 +78,8 @@ `semantic/decorate/include' anymore. (semantic-toggle-decoration-style): Error if an unknown decoration style is toggled. - (define-semantic-decoration-style): Add new :load option. When - :load is specified, add autoload tokens for the definition + (define-semantic-decoration-style): Add new :load option. + When :load is specified, add autoload tokens for the definition functions so that code is loaded when the mode is used. (semantic-decoration-on-includes): New autoload definition for highlighting includes. @@ -94,8 +103,8 @@ * semantic/ctxt.el (semantic-ctxt-end-of-symbol): New. (semantic-ctxt-current-symbol-default): New. - * semantic/bovine/el.el (semantic-default-elisp-setup): Add - autoload cookie. Explain existence. + * semantic/bovine/el.el (semantic-default-elisp-setup): + Add autoload cookie. Explain existence. (footer): Add local variable for loaddefs. * semantic/db.el (semanticdb-file-table-object): Add new filter, @@ -120,7 +129,7 @@ * ede/cpp-root.el (ede-preprocessor-map): Protect against init problems. - * ede/proj.el (ede-proj-target): Added a new "custom" option for + * ede/proj.el (ede-proj-target): Add a new "custom" option for custom symbols representing a compiler or linker instead of restricting things to only the predefined compilers and linkers. @@ -198,15 +207,15 @@ 2013-04-27 David Engster * semantic/complete.el - (semantic-collector-calculate-completions-raw): If - `completionslist' is not set, refresh the cache if necessary and + (semantic-collector-calculate-completions-raw): + If `completionslist' is not set, refresh the cache if necessary and use it for completions. This fixes the `semantic-collector-buffer-deep' collector (bug#14265). 2013-03-26 Leo Liu - * semantic/senator.el (senator-copy-tag-to-register): Move - register handling logic from register.el. (Bug#14052) + * semantic/senator.el (senator-copy-tag-to-register): + Move register handling logic from register.el. (Bug#14052) 2013-03-21 Eric Ludlam @@ -223,17 +232,17 @@ * semantic/find.el (semantic-filter-tags-by-class): New function. - * semantic/tag-ls.el (semantic-tag-similar-p-default): Add - short-circuit in case tag1 and 2 are identical. + * semantic/tag-ls.el (semantic-tag-similar-p-default): + Add short-circuit in case tag1 and 2 are identical. * semantic/analyze/fcn.el - (semantic-analyze-dereference-metatype-stack): Use - `semantic-tag-similar-p' instead of 'eq' when comparing two tags + (semantic-analyze-dereference-metatype-stack): + Use `semantic-tag-similar-p' instead of 'eq' when comparing two tags during metatype evaluation in case they are the same, but not the same node. (Tweaked patch from Tomasz Gajewski) (Tiny change) - * semantic/db-find.el (semanticdb-partial-synchronize): Fix - require to semantic/db-typecache to be correct. + * semantic/db-find.el (semanticdb-partial-synchronize): + Fix require to semantic/db-typecache to be correct. (semanticdb-find-tags-external-children-of-type): Make this a brutish search by default. @@ -243,19 +252,19 @@ input tag as the place to start searching for externally defined methods. - * semantic/db-file.el (semanticdb-default-save-directory): Doc - fix: Add ref to default value. + * semantic/db-file.el (semanticdb-default-save-directory): + Doc fix: Add ref to default value. - * semantic/complete.el (semantic-complete-post-command-hook): When - detecting if cursor is outside completion area, do so if cursor + * semantic/complete.el (semantic-complete-post-command-hook): + When detecting if cursor is outside completion area, do so if cursor moves before start of overlay, or the original starting location of the overlay (i.e., if user deletes past beginning of the overlay region). (semantic-complete-inline-tag-engine): Initialize original start of `semantic-complete-inline-overlay'. - * semantic/bovine/c.el (semantic-c-describe-environment): Update - some section titles. Test semanticdb table before printing it. + * semantic/bovine/c.el (semantic-c-describe-environment): + Update some section titles. Test semanticdb table before printing it. (semantic-c-reset-preprocessor-symbol-map): Update `semantic-lex-spp-macro-symbol-obarray' outside the loop over all the files contributing to its value. @@ -271,8 +280,8 @@ * srecode/cpp.el (srecode-semantic-handle-:c): Replace all characters in FILENAME_SYMBOL that aren't valid CPP symbol chars. - * srecode/map.el (srecode-map-validate-file-for-mode): Force - semantic to load if it is not active in the template being added + * srecode/map.el (srecode-map-validate-file-for-mode): + Force semantic to load if it is not active in the template being added to the map. * srecode/srt.el: Add local variables for setting the autoload @@ -287,7 +296,7 @@ has both a version variable and a Version: comment, always use `call-next-method'. - * ede/cpp-root.el (ede-set-project-variables): Deleted. + * ede/cpp-root.el (ede-set-project-variables): Delete. `ede-preprocessor-map' does the job this function was attempting to do with :spp-table. (ede-preprocessor-map): Update file tests to provide better @@ -302,8 +311,8 @@ 2013-03-21 David Engster * semantic/bovine/c.el (semantic-get-local-variables): Also add a - new variable 'this' if we are in an inline member function. For - detecting this, we check overlays at point if there is a class + new variable 'this' if we are in an inline member function. + For detecting this, we check overlays at point if there is a class spanning the current function. Also, the variable 'this' has to be a pointer. @@ -350,14 +359,14 @@ 2013-03-21 Tomasz Gajewski (tiny change) - * ede/cpp-root.el (ede-project-autoload, initialize-instance): Fix - EDE file symbol to match rename. Fix ede-cpp-root symbol to + * ede/cpp-root.el (ede-project-autoload, initialize-instance): + Fix EDE file symbol to match rename. Fix ede-cpp-root symbol to include -project in name. 2013-03-21 Alex Ott - * cedet-files.el (cedet-files-list-recursively): New. Recursively - find files whose names are matching to given regex. + * cedet-files.el (cedet-files-list-recursively): New. + Recursively find files whose names are matching to given regex. * ede.el (ede-current-project): Rewrite to avoid imperative style. diff --git a/lisp/cedet/data-debug.el b/lisp/cedet/data-debug.el index c468ec1046a..4658c604211 100644 --- a/lisp/cedet/data-debug.el +++ b/lisp/cedet/data-debug.el @@ -869,7 +869,8 @@ If PARENT is non-nil, it is somehow related as a parent to thing." table) "Syntax table used in data-debug macro buffers.") -(defvar data-debug-map +(define-obsolete-variable-alias 'data-debug-map 'data-debug-mode-map "24.1") +(defvar data-debug-mode-map (let ((km (make-sparse-keymap))) (suppress-keymap km) (define-key km [mouse-2] 'data-debug-expand-or-contract-mouse) @@ -887,22 +888,15 @@ If PARENT is non-nil, it is somehow related as a parent to thing." :group 'data-debug :type 'hook) -(defun data-debug-mode () +(define-derived-mode data-debug-mode fundamental-mode "DATA-DEBUG" "Major-mode for the Analyzer debugger. -\\{data-debug-map}" - (interactive) - (kill-all-local-variables) - (setq major-mode 'data-debug-mode - mode-name "DATA-DEBUG" - comment-start ";;" +\\{data-debug-mode-map}" + (setq comment-start ";;" comment-end "" buffer-read-only t) - (set (make-local-variable 'comment-start-skip) + (setq-local comment-start-skip "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *") - (set-syntax-table data-debug-mode-syntax-table) - (use-local-map data-debug-map) - (run-hooks 'data-debug-hook) (buffer-disable-undo) (set (make-local-variable 'font-lock-global-modes) nil) (font-lock-mode -1) diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el index ce658cd5d54..60c4ccadf65 100644 --- a/lisp/cedet/semantic/grammar.el +++ b/lisp/cedet/semantic/grammar.el @@ -860,7 +860,7 @@ Lisp code." ;; Use Unix EOLs, so that the file is portable to all platforms. (setq buffer-file-coding-system 'raw-text-unix) (erase-buffer) - (unless (eq major-mode 'emacs-lisp-mode) + (unless (derived-mode-p 'emacs-lisp-mode) (emacs-lisp-mode)) ;;;; Header + Prologue @@ -1102,7 +1102,9 @@ END is the limit of the search." ;;;; Define major mode ;;;; -(defvar semantic-grammar-syntax-table +(define-obsolete-variable-alias 'semantic-grammar-syntax-table + 'semantic-grammar-mode-syntax-table "24.1") +(defvar semantic-grammar-mode-syntax-table (let ((table (make-syntax-table (standard-syntax-table)))) (modify-syntax-entry ?\: "." table) ;; COLON (modify-syntax-entry ?\> "." table) ;; GT @@ -1170,7 +1172,9 @@ END is the limit of the search." semantic-grammar-mode-keywords-1 "Font Lock keywords used to highlight Semantic grammar buffers.") -(defvar semantic-grammar-map +(define-obsolete-variable-alias 'semantic-grammar-map + 'semantic-grammar-mode-map "24.1") +(defvar semantic-grammar-mode-map (let ((km (make-sparse-keymap))) (define-key km "|" 'semantic-grammar-electric-punctuation) @@ -1271,22 +1275,17 @@ the change bounds to encompass the whole nonterminal tag." (semantic-tag-start outer) (semantic-tag-end outer))))) -(defun semantic-grammar-mode () +(define-derived-mode semantic-grammar-mode + fundamental-mode "Semantic Grammar Framework" "Initialize a buffer for editing Semantic grammars. -\\{semantic-grammar-map}" - (interactive) - (kill-all-local-variables) - (setq major-mode 'semantic-grammar-mode - mode-name "Semantic Grammar Framework") +\\{semantic-grammar-mode-map}" (set (make-local-variable 'parse-sexp-ignore-comments) t) (set (make-local-variable 'comment-start) ";;") ;; Look within the line for a ; following an even number of backslashes ;; after either a non-backslash or the line beginning. (set (make-local-variable 'comment-start-skip) "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *") - (set-syntax-table semantic-grammar-syntax-table) - (use-local-map semantic-grammar-map) (set (make-local-variable 'indent-line-function) 'semantic-grammar-indent) (set (make-local-variable 'fill-paragraph-function) @@ -1335,15 +1334,14 @@ the change bounds to encompass the whole nonterminal tag." (semantic-make-local-hook 'semantic-edits-new-change-functions) (add-hook 'semantic-edits-new-change-functions 'semantic-grammar-edits-new-change-hook-fcn - nil t) - (semantic-run-mode-hooks 'semantic-grammar-mode-hook)) + nil t)) ;;;; ;;;; Useful commands ;;;; (defvar semantic-grammar-skip-quoted-syntax-table - (let ((st (copy-syntax-table semantic-grammar-syntax-table))) + (let ((st (copy-syntax-table semantic-grammar-mode-syntax-table))) (modify-syntax-entry ?\' "$" st) st) "Syntax table to skip a whole quoted expression in grammar code. diff --git a/lisp/chistory.el b/lisp/chistory.el index 509324ade88..9a77793b1e1 100644 --- a/lisp/chistory.el +++ b/lisp/chistory.el @@ -121,7 +121,9 @@ The buffer is left in Command History mode." (error "No command history") (command-history-mode))))) -(defvar command-history-map +(define-obsolete-variable-alias 'command-history-map + 'command-history-mode-map "24.1") +(defvar command-history-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map lisp-mode-shared-map) (suppress-keymap map) @@ -132,21 +134,11 @@ The buffer is left in Command History mode." map) "Keymap for `command-history-mode'.") -(defun command-history-mode () +(define-derived-mode command-history-mode fundamental-mode "Command History" "Major mode for listing and repeating recent commands. Keybindings: -\\{command-history-map}" - (interactive) - (Command-history-setup) - (setq major-mode 'command-history-mode) - (setq mode-name "Command History") - (use-local-map command-history-map) - (run-mode-hooks 'command-history-mode-hook)) - -(defun Command-history-setup () - (kill-all-local-variables) - (use-local-map command-history-map) +\\{command-history-mode-map}" (lisp-mode-variables nil) (set-syntax-table emacs-lisp-mode-syntax-table) (setq buffer-read-only t)) diff --git a/lisp/comint.el b/lisp/comint.el index 0ce7053c031..7572e8baabc 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -3793,25 +3793,21 @@ REGEXP-GROUP is the regular expression group in REGEXP to use." ;; comint-mode will take care of it. The following example, from shell.el, ;; is typical: ;; -;; (defvar shell-mode-map '()) -;; (cond ((not shell-mode-map) -;; (setq shell-mode-map (copy-keymap comint-mode-map)) -;; (define-key shell-mode-map "\C-c\C-f" 'shell-forward-command) -;; (define-key shell-mode-map "\C-c\C-b" 'shell-backward-command) -;; (define-key shell-mode-map "\t" 'completion-at-point) -;; (define-key shell-mode-map "\M-?" -;; 'comint-dynamic-list-filename-completions))) +;; (defvar shell-mode-map +;; (let ((map (make-sparse-keymap))) +;; (set-keymap-parent map comint-mode-map) +;; (define-key map "\C-c\C-f" 'shell-forward-command) +;; (define-key map "\C-c\C-b" 'shell-backward-command) +;; (define-key map "\t" 'completion-at-point) +;; (define-key map "\M-?" +;; 'comint-dynamic-list-filename-completions) +;; map)) ;; -;; (defun shell-mode () -;; (interactive) -;; (comint-mode) +;; (define-derived-mode shell-mode comint-mode "Shell" +;; "Doc." ;; (setq comint-prompt-regexp shell-prompt-pattern) -;; (setq major-mode 'shell-mode) -;; (setq mode-name "Shell") -;; (use-local-map shell-mode-map) ;; (setq-local shell-directory-stack nil) -;; (add-hook 'comint-input-filter-functions 'shell-directory-tracker) -;; (run-mode-hooks 'shell-mode-hook)) +;; (add-hook 'comint-input-filter-functions 'shell-directory-tracker)) ;; ;; ;; Completion for comint-mode users diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index 709a094e73b..6c7a0d2db1d 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el @@ -626,7 +626,7 @@ The environment used is the one when entering the activation frame at point." (put 'debugger-mode 'mode-class 'special) -(defun debugger-mode () +(define-derived-mode debugger-mode fundamental-mode "Debugger" "Mode for backtrace buffers, selected in debugger. \\ A line starts with `*' if exiting that frame will call the debugger. @@ -641,13 +641,9 @@ which functions will enter the debugger when called. Complete list of commands: \\{debugger-mode-map}" - (kill-all-local-variables) - (setq major-mode 'debugger-mode) - (setq mode-name "Debugger") (setq truncate-lines t) (set-syntax-table emacs-lisp-mode-syntax-table) - (use-local-map debugger-mode-map) - (run-mode-hooks 'debugger-mode-hook)) + (use-local-map debugger-mode-map)) (defcustom debugger-record-buffer "*Debugger-record*" "Buffer name for expression values, for \\[debugger-record-expression]." diff --git a/lisp/emulation/ws-mode.el b/lisp/emulation/ws-mode.el index 03d7076195e..dfb81b3829c 100644 --- a/lisp/emulation/ws-mode.el +++ b/lisp/emulation/ws-mode.el @@ -73,8 +73,7 @@ (define-key map "\C-x" 'save-buffers-kill-emacs) (define-key map "y" 'ws-delete-block) (define-key map "\C-y" 'ws-delete-block) - map) - "") + map)) (defvar wordstar-C-o-map (let ((map (make-keymap))) @@ -140,8 +139,7 @@ (define-key map "y" 'ws-kill-eol) (define-key map "\C-y" 'ws-kill-eol) (define-key map "\177" 'ws-kill-bol) - map) - "") + map)) (defvar wordstar-mode-map (let ((map (make-keymap))) @@ -170,17 +168,16 @@ (define-key map "\C-x" 'next-line) (define-key map "\C-y" 'kill-complete-line) (define-key map "\C-z" 'scroll-up-line) - map) - "") + map)) ;; wordstar-C-j-map not yet implemented -(defvar wordstar-C-j-map nil "") +(defvar wordstar-C-j-map nil) (put 'wordstar-mode 'mode-class 'special) ;;;###autoload -(defun wordstar-mode () +(define-derived-mode wordstar-mode fundamental-mode "WordStar" "Major mode with WordStar-like key bindings. BUGS: @@ -191,106 +188,7 @@ BUGS: - Search and replace (C-q a) is only available in forward direction No key bindings beginning with ESC are installed, they will work -Emacs-like. - -The key bindings are: - - C-a backward-word - C-b fill-paragraph - C-c scroll-up-line - C-d forward-char - C-e previous-line - C-f forward-word - C-g delete-char - C-h backward-char - C-i indent-for-tab-command - C-j help-for-help - C-k ordstar-C-k-map - C-l ws-repeat-search - C-n open-line - C-p quoted-insert - C-r scroll-down-line - C-s backward-char - C-t kill-word - C-u keyboard-quit - C-v overwrite-mode - C-w scroll-down - C-x next-line - C-y kill-complete-line - C-z scroll-up - - C-k 0 ws-set-marker-0 - C-k 1 ws-set-marker-1 - C-k 2 ws-set-marker-2 - C-k 3 ws-set-marker-3 - C-k 4 ws-set-marker-4 - C-k 5 ws-set-marker-5 - C-k 6 ws-set-marker-6 - C-k 7 ws-set-marker-7 - C-k 8 ws-set-marker-8 - C-k 9 ws-set-marker-9 - C-k b ws-begin-block - C-k c ws-copy-block - C-k d save-buffers-kill-emacs - C-k f find-file - C-k h ws-show-markers - C-k i ws-indent-block - C-k k ws-end-block - C-k p ws-print-block - C-k q kill-emacs - C-k r insert-file - C-k s save-some-buffers - C-k t ws-mark-word - C-k u ws-exdent-block - C-k C-u keyboard-quit - C-k v ws-move-block - C-k w ws-write-block - C-k x kill-emacs - C-k y ws-delete-block - - C-o c wordstar-center-line - C-o b switch-to-buffer - C-o j justify-current-line - C-o k kill-buffer - C-o l list-buffers - C-o m auto-fill-mode - C-o r set-fill-column - C-o C-u keyboard-quit - C-o wd delete-other-windows - C-o wh split-window-right - C-o wo other-window - C-o wv split-window-below - - C-q 0 ws-find-marker-0 - C-q 1 ws-find-marker-1 - C-q 2 ws-find-marker-2 - C-q 3 ws-find-marker-3 - C-q 4 ws-find-marker-4 - C-q 5 ws-find-marker-5 - C-q 6 ws-find-marker-6 - C-q 7 ws-find-marker-7 - C-q 8 ws-find-marker-8 - C-q 9 ws-find-marker-9 - C-q a ws-query-replace - C-q b ws-to-block-begin - C-q c end-of-buffer - C-q d end-of-line - C-q f ws-search - C-q k ws-to-block-end - C-q l ws-undo - C-q p ws-last-cursorp - C-q r beginning-of-buffer - C-q C-u keyboard-quit - C-q w ws-last-error - C-q y ws-kill-eol - C-q DEL ws-kill-bol -" - (interactive) - (kill-all-local-variables) - (use-local-map wordstar-mode-map) - (setq mode-name "WordStar") - (setq major-mode 'wordstar-mode) - (run-mode-hooks 'wordstar-mode-hook)) +Emacs-like.") (defun wordstar-center-paragraph () diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el index ed5fecf09ff..0d32dae7ddb 100644 --- a/lisp/eshell/esh-mode.el +++ b/lisp/eshell/esh-mode.el @@ -220,74 +220,66 @@ This is used by `eshell-watch-for-password-prompt'." (defvar eshell-last-output-end nil) (defvar eshell-currently-handling-window nil) -(defvar eshell-mode-syntax-table nil) -(defvar eshell-mode-abbrev-table nil) (define-abbrev-table 'eshell-mode-abbrev-table ()) -(if (not eshell-mode-syntax-table) - (let ((i 0)) - (setq eshell-mode-syntax-table (make-syntax-table)) - (while (< i ?0) - (modify-syntax-entry i "_ " eshell-mode-syntax-table) - (setq i (1+ i))) - (setq i (1+ ?9)) - (while (< i ?A) - (modify-syntax-entry i "_ " eshell-mode-syntax-table) - (setq i (1+ i))) - (setq i (1+ ?Z)) - (while (< i ?a) - (modify-syntax-entry i "_ " eshell-mode-syntax-table) - (setq i (1+ i))) - (setq i (1+ ?z)) - (while (< i 128) - (modify-syntax-entry i "_ " eshell-mode-syntax-table) - (setq i (1+ i))) - (modify-syntax-entry ? " " eshell-mode-syntax-table) - (modify-syntax-entry ?\t " " eshell-mode-syntax-table) - (modify-syntax-entry ?\f " " eshell-mode-syntax-table) - (modify-syntax-entry ?\n "> " eshell-mode-syntax-table) - ;; Give CR the same syntax as newline, for selective-display. - (modify-syntax-entry ?\^m "> " eshell-mode-syntax-table) -;;; (modify-syntax-entry ?\; "< " eshell-mode-syntax-table) - (modify-syntax-entry ?` "' " eshell-mode-syntax-table) - (modify-syntax-entry ?' "' " eshell-mode-syntax-table) - (modify-syntax-entry ?, "' " eshell-mode-syntax-table) - ;; Used to be singlequote; changed for flonums. - (modify-syntax-entry ?. "_ " eshell-mode-syntax-table) - (modify-syntax-entry ?- "_ " eshell-mode-syntax-table) - (modify-syntax-entry ?| ". " eshell-mode-syntax-table) - (modify-syntax-entry ?# "' " eshell-mode-syntax-table) - (modify-syntax-entry ?\" "\" " eshell-mode-syntax-table) - (modify-syntax-entry ?\\ "/ " eshell-mode-syntax-table) - (modify-syntax-entry ?\( "() " eshell-mode-syntax-table) - (modify-syntax-entry ?\) ")( " eshell-mode-syntax-table) - (modify-syntax-entry ?\{ "(} " eshell-mode-syntax-table) - (modify-syntax-entry ?\} "){ " eshell-mode-syntax-table) - (modify-syntax-entry ?\[ "(] " eshell-mode-syntax-table) - (modify-syntax-entry ?\] ")[ " eshell-mode-syntax-table) - ;; All non-word multibyte characters should be `symbol'. - (if (featurep 'xemacs) - (map-char-table - (function - (lambda (key val) - (and (characterp key) - (>= (char-int key) 256) - (/= (char-syntax key) ?w) - (modify-syntax-entry key "_ " - eshell-mode-syntax-table)))) - (standard-syntax-table)) - (map-char-table - (function - (lambda (key val) - (and (if (consp key) - (and (>= (car key) 128) - (/= (char-syntax (car key)) ?w)) - (and (>= key 256) - (/= (char-syntax key) ?w))) - (modify-syntax-entry key "_ " - eshell-mode-syntax-table)))) - (standard-syntax-table))))) +(defvar eshell-mode-syntax-table + (let ((st (make-syntax-table)) + (i 0)) + (while (< i ?0) + (modify-syntax-entry i "_ " st) + (setq i (1+ i))) + (setq i (1+ ?9)) + (while (< i ?A) + (modify-syntax-entry i "_ " st) + (setq i (1+ i))) + (setq i (1+ ?Z)) + (while (< i ?a) + (modify-syntax-entry i "_ " st) + (setq i (1+ i))) + (setq i (1+ ?z)) + (while (< i 128) + (modify-syntax-entry i "_ " st) + (setq i (1+ i))) + (modify-syntax-entry ? " " st) + (modify-syntax-entry ?\t " " st) + (modify-syntax-entry ?\f " " st) + (modify-syntax-entry ?\n "> " st) + ;; Give CR the same syntax as newline, for selective-display. + (modify-syntax-entry ?\^m "> " st) + ;; (modify-syntax-entry ?\; "< " st) + (modify-syntax-entry ?` "' " st) + (modify-syntax-entry ?' "' " st) + (modify-syntax-entry ?, "' " st) + ;; Used to be singlequote; changed for flonums. + (modify-syntax-entry ?. "_ " st) + (modify-syntax-entry ?- "_ " st) + (modify-syntax-entry ?| ". " st) + (modify-syntax-entry ?# "' " st) + (modify-syntax-entry ?\" "\" " st) + (modify-syntax-entry ?\\ "/ " st) + (modify-syntax-entry ?\( "() " st) + (modify-syntax-entry ?\) ")( " st) + (modify-syntax-entry ?\{ "(} " st) + (modify-syntax-entry ?\} "){ " st) + (modify-syntax-entry ?\[ "(] " st) + (modify-syntax-entry ?\] ")[ " st) + ;; All non-word multibyte characters should be `symbol'. + (map-char-table + (if (featurep 'xemacs) + (lambda (key val) + (and (characterp key) + (>= (char-int key) 256) + (/= (char-syntax key) ?w) + (modify-syntax-entry key "_ " st))) + (lambda (key val) + (and (if (consp key) + (and (>= (car key) 128) + (/= (char-syntax (car key)) ?w)) + (and (>= key 256) + (/= (char-syntax key) ?w))) + (modify-syntax-entry key "_ " st)))) + (standard-syntax-table)))) ;;; User Functions: @@ -303,25 +295,18 @@ and the hook `eshell-exit-hook'." (run-hooks 'eshell-exit-hook)) ;;;###autoload -(defun eshell-mode () - "Emacs shell interactive mode. +(define-derived-mode eshell-mode fundamental-mode "EShell" + "Emacs shell interactive mode." + (setq-local eshell-mode t) -\\{eshell-mode-map}" - (kill-all-local-variables) - - (setq major-mode 'eshell-mode) - (setq mode-name "EShell") - (set (make-local-variable 'eshell-mode) t) - - (make-local-variable 'eshell-mode-map) - (setq eshell-mode-map (make-sparse-keymap)) + ;; FIXME: What the hell!? + (setq-local eshell-mode-map (make-sparse-keymap)) (use-local-map eshell-mode-map) (when eshell-status-in-mode-line (make-local-variable 'eshell-command-running-string) (let ((fmt (copy-sequence mode-line-format))) - (make-local-variable 'mode-line-format) - (setq mode-line-format fmt)) + (setq-local mode-line-format fmt)) (let ((mode-line-elt (memq 'mode-line-modified mode-line-format))) (if mode-line-elt (setcar mode-line-elt 'eshell-command-running-string)))) @@ -331,11 +316,9 @@ and the hook `eshell-exit-hook'." (define-key eshell-mode-map [(meta control ?l)] 'eshell-show-output) (define-key eshell-mode-map [(control ?a)] 'eshell-bol) - (set (make-local-variable 'eshell-command-prefix) - (make-symbol "eshell-command-prefix")) + (setq-local eshell-command-prefix (make-symbol "eshell-command-prefix")) (fset eshell-command-prefix (make-sparse-keymap)) - (set (make-local-variable 'eshell-command-map) - (symbol-function eshell-command-prefix)) + (setq-local eshell-command-map (symbol-function eshell-command-prefix)) (define-key eshell-mode-map [(control ?c)] eshell-command-prefix) ;; without this, find-tag complains about read-only text being @@ -359,7 +342,6 @@ and the hook `eshell-exit-hook'." (define-key eshell-command-map [(control ?y)] 'eshell-repeat-argument) (setq local-abbrev-table eshell-mode-abbrev-table) - (set-syntax-table eshell-mode-syntax-table) (set (make-local-variable 'dired-directory) default-directory) (set (make-local-variable 'list-buffers-directory) @@ -442,7 +424,6 @@ and the hook `eshell-exit-hook'." (if eshell-first-time-p (run-hooks 'eshell-first-time-mode-hook)) - (run-mode-hooks 'eshell-mode-hook) (run-hooks 'eshell-post-command-hook)) (put 'eshell-mode 'mode-class 'special) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index c75588536a4..1bf7bb588f0 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,27 @@ +2013-09-11 Stefan Monnier + + * score-mode.el (gnus-score-mode-map): Move initialization + into declaration. + (gnus-score-mode): Use define-derived-mode. + * gnus-srvr.el (gnus-browse-mode): Use define-derived-mode. + * gnus-kill.el (gnus-kill-file-mode-map): Move initialization + into declaration. + (gnus-kill-file-mode): Use define-derived-mode. + (gnus-kill-file-edit-file, gnus-kill-file-enter-kill, gnus-kill): + Use derived-mode-p. + * gnus-group.el (gnus-group-mode): Use define-derived-mode. + (gnus-group-setup-buffer, gnus-group-name-at-point) + (gnus-group-make-web-group, gnus-group-enter-directory) + (gnus-group-suspend): Use derived-mode-p. + * gnus-cus.el (gnus-custom-mode): Use define-derived-mode. + * gnus-bookmark.el (gnus-bookmark-bmenu-mode): Use define-derived-mode. + * gnus-art.el (gnus-article-mode): Use define-derived-mode. + (gnus-article-setup-buffer, gnus-article-prepare) + (gnus-article-prepare-display, gnus-sticky-article) + (gnus-kill-sticky-article-buffer, gnus-kill-sticky-article-buffers) + (gnus-bind-safe-url-regexp, gnus-article-check-buffer) + (gnus-article-read-summary-keys): Use derived-mode-p. + 2013-08-28 Katsumi Yamaoka * mm-decode.el (mm-temp-files-delete): Fix file deletion logic. @@ -177,15 +201,15 @@ 2013-07-10 David Engster * gnus-start.el (gnus-clean-old-newsrc): Always remove 'unexist' marks - if `gnus-newsrc-file-version' does not match `gnus-version'. This - fixes a bug in Emacs trunk where the 'unexist' marks were always + if `gnus-newsrc-file-version' does not match `gnus-version'. + This fixes a bug in Emacs trunk where the 'unexist' marks were always removed at startup because "Gnus v5.13" was considered smaller than "Ma Gnus v0.03". 2013-07-10 Tassilo Horn - * gnus.el (gnus-summary-line-format): Reference - `gnus-user-date-format-alist' for the &user-date; format, not + * gnus.el (gnus-summary-line-format): + Reference `gnus-user-date-format-alist' for the &user-date; format, not `gnus-summary-user-date-format-alist'. 2013-07-08 Lars Magne Ingebrigtsen @@ -467,7 +491,7 @@ * shr.el (shr-render-td): Support horizontal alignment. - * eww.el (eww-put-color): Removed. + * eww.el (eww-put-color): Remove. (eww-colorize-region): Use `add-face-text-property'. * shr.el (shr-add-font): Append face data, so that we get the correct @@ -522,7 +546,7 @@ 2013-06-16 Rüdiger Sonderfeld - * shr.el (shr-dom-to-xml): Fixed function call. + * shr.el (shr-dom-to-xml): Fix function call. * eww.el (eww): New group. (eww-header-line-format): New custom variable. @@ -558,8 +582,8 @@ (auth-source-netrc-parse): Refactor and improve netrc parser to support single-quoted strings and multiline entries. (auth-source-netrc-parse-next-interesting) - (auth-source-netrc-parse-one, auth-source-netrc-parse-entries): New - functions to support parser. + (auth-source-netrc-parse-one, auth-source-netrc-parse-entries): + New functions to support parser. 2013-06-14 Lars Magne Ingebrigtsen @@ -707,8 +731,8 @@ * registry.el (initialize-instance, registry-lookup) (registry-lookup-breaks-before-lexbind, registry-lookup-secondary) (registry-lookup-secondary-value, registry-search, registry-delete) - (registry-insert, registry-reindex, registry-size, registry-prune): Do - not wrap methods in `eval-and-compile'. This breaks due to latest + (registry-insert, registry-reindex, registry-size, registry-prune): + Do not wrap methods in `eval-and-compile'. This breaks due to latest changes in EIEIO (introduction of eieio-core.el). 2013-05-30 Glenn Morris @@ -988,8 +1012,8 @@ 2013-03-26 Andrew Cohen * nnir.el: Major rewrite. Cleaner separation between searches and group - management. Marks are now shown in nnir summary buffers. Rudimentary - support for real (i.e. not ephemeral) nnir groups. + management. Marks are now shown in nnir summary buffers. + Rudimentary support for real (i.e. not ephemeral) nnir groups. (gnus-summary-make-nnir-group): New function for initiating searches from a summary buffer. @@ -1018,8 +1042,8 @@ 2013-02-22 David Engster * gnus-registry.el (gnus-registry-save): Provide class name when - calling `eieio-persistent-read' to avoid "unsafe call" warning. Use - `condition-case' to stay compatible with older EIEIO versions which + calling `eieio-persistent-read' to avoid "unsafe call" warning. + Use `condition-case' to stay compatible with older EIEIO versions which only accept one argument. 2013-02-17 Daiki Ueno @@ -5295,7 +5319,7 @@ a creation default, pass the whole port list down. It will be completed. - * auth-source.el (auth-source-search): Updated docs to talk about + * auth-source.el (auth-source-search): Update docs to talk about multiple creation choices. (auth-source-netrc-create): Accept a list as a value (from the search parameters) and do completion on that list. Keep a separate netrc line @@ -5362,7 +5386,7 @@ (gnus-summary-exit): Kill the correct article buffer on exit from a `C-d' group. - * gnus-start.el (gnus-use-backend-marks): Removed, since it duplicates + * gnus-start.el (gnus-use-backend-marks): Remove, since it duplicates gnus-propagate-marks. * gnus-sum.el (gnus-summary-exit-no-update): Restore the group conf @@ -18399,7 +18423,7 @@ 2005-11-19 Kevin Greiner - * gnus-sum.el (gnus-fetch-old-headers): Updated docs to warn that + * gnus-sum.el (gnus-fetch-old-headers): Update docs to warn that it can seriously impact performance as it bypasses the agent's local caches. diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index e65b9fb99e4..b80aa3a24e9 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -3683,7 +3683,7 @@ function and want to see what the date was before converting." (walk-windows (lambda (w) (set-buffer (window-buffer w)) - (when (eq major-mode 'gnus-article-mode) + (when (derived-mode-p 'gnus-article-mode) (let ((old-line (count-lines (point-min) (point))) (old-column (- (point) (line-beginning-position))) (window-start (window-start w)) @@ -4455,7 +4455,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is (defvar bookmark-make-record-function) (defvar shr-put-image-function) -(defun gnus-article-mode () +(define-derived-mode gnus-article-mode fundamental-mode "Article" "Major mode for displaying an article. All normal editing commands are switched off. @@ -4470,13 +4470,8 @@ commands: \\[gnus-article-mail]\t Send a reply to the address near point \\[gnus-article-describe-briefly]\t Describe the current mode briefly \\[gnus-info-find-node]\t Go to the Gnus info node" - (interactive) - (kill-all-local-variables) (gnus-simplify-mode-line) - (setq mode-name "Article") - (setq major-mode 'gnus-article-mode) (make-local-variable 'minor-mode-alist) - (use-local-map gnus-article-mode-map) (when (gnus-visual-p 'article-menu 'menu) (gnus-article-make-menu-bar) (when gnus-summary-tool-bar-map @@ -4504,9 +4499,7 @@ commands: (buffer-disable-undo) (setq buffer-read-only t show-trailing-whitespace nil) - (set-syntax-table gnus-article-mode-syntax-table) - (mm-enable-multibyte) - (gnus-run-mode-hooks 'gnus-article-mode-hook)) + (mm-enable-multibyte)) (defun gnus-article-setup-buffer () "Initialize the article buffer." @@ -4554,7 +4547,7 @@ commands: (setq gnus-article-mime-handle-alist nil) (buffer-disable-undo) (setq buffer-read-only t) - (unless (eq major-mode 'gnus-article-mode) + (unless (derived-mode-p 'gnus-article-mode) (gnus-article-mode)) (setq truncate-lines gnus-article-truncate-lines) (current-buffer)) @@ -4603,7 +4596,7 @@ If ARTICLE is an id, HEADER should be the article headers. If ALL-HEADERS is non-nil, no headers are hidden." (save-excursion ;; Make sure we start in a summary buffer. - (unless (eq major-mode 'gnus-summary-mode) + (unless (derived-mode-p 'gnus-summary-mode) (set-buffer gnus-summary-buffer)) (setq gnus-summary-buffer (current-buffer)) (let* ((gnus-article (if header (mail-header-number header) article)) @@ -4714,7 +4707,7 @@ If ALL-HEADERS is non-nil, no headers are hidden." (let ((gnus-article-buffer (current-buffer)) buffer-read-only (inhibit-read-only t)) - (unless (eq major-mode 'gnus-article-mode) + (unless (derived-mode-p 'gnus-article-mode) (gnus-article-mode)) (setq buffer-read-only nil gnus-article-wash-types nil @@ -4776,7 +4769,7 @@ If a prefix ARG is given, ask for a name for this sticky article buffer." "*")) (if (and (gnus-buffer-live-p new-art-buf-name) (with-current-buffer new-art-buf-name - (eq major-mode 'gnus-sticky-article-mode))) + (derived-mode-p 'gnus-sticky-article-mode))) (switch-to-buffer new-art-buf-name) (setq new-art-buf-name (rename-buffer new-art-buf-name t))) (gnus-sticky-article-mode)) @@ -4792,7 +4785,7 @@ If none is given, assume the current buffer and kill it if it has (unless buffer (setq buffer (current-buffer))) (with-current-buffer buffer - (when (eq major-mode 'gnus-sticky-article-mode) + (when (derived-mode-p 'gnus-sticky-article-mode) (gnus-kill-buffer buffer)))) (defun gnus-kill-sticky-article-buffers (arg) @@ -4801,11 +4794,11 @@ If a prefix ARG is given, ask for confirmation." (interactive "P") (dolist (buf (gnus-buffers)) (with-current-buffer buf - (when (eq major-mode 'gnus-sticky-article-mode) - (if (not arg) - (gnus-kill-buffer buf) - (when (yes-or-no-p (concat "Kill buffer " (buffer-name buf) "? ")) - (gnus-kill-buffer buf))))))) + (when (derived-mode-p 'gnus-sticky-article-mode) + (if (not arg) + (gnus-kill-buffer buf) + (when (yes-or-no-p (concat "Kill buffer " (buffer-name buf) "? ")) + (gnus-kill-buffer buf))))))) ;;; ;;; Gnus MIME viewing functions @@ -4893,7 +4886,7 @@ General format specifiers can also be used. See Info node (defmacro gnus-bind-safe-url-regexp (&rest body) "Bind `mm-w3m-safe-url-regexp' according to `gnus-safe-html-newsgroups'." `(let ((mm-w3m-safe-url-regexp - (let ((group (if (and (eq major-mode 'gnus-article-mode) + (let ((group (if (and (derived-mode-p 'gnus-article-mode) (gnus-buffer-live-p gnus-article-current-summary)) (with-current-buffer gnus-article-current-summary @@ -6477,7 +6470,7 @@ not have a face in `gnus-article-boring-faces'." (defun gnus-article-check-buffer () "Beep if not in an article buffer." - (unless (equal major-mode 'gnus-article-mode) + (unless (derived-mode-p 'gnus-article-mode) (error "Command invoked outside of a Gnus article buffer"))) (defun gnus-article-read-summary-keys (&optional arg key not-restore-window) @@ -6592,7 +6585,7 @@ not have a face in `gnus-article-boring-faces'." new-sum-point (window-live-p win) (with-current-buffer (window-buffer win) - (eq major-mode 'gnus-summary-mode))) + (derived-mode-p 'gnus-summary-mode))) (set-window-point win new-sum-point) (set-window-start win new-sum-start) (set-window-hscroll win new-sum-hscroll)))) diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el index 7a3d273622a..c31cb1aef36 100644 --- a/lisp/gnus/gnus-bookmark.el +++ b/lisp/gnus/gnus-bookmark.el @@ -190,7 +190,7 @@ So the cdr of each bookmark is an alist too.") "Set a bookmark for this article." (interactive) (gnus-bookmark-maybe-load-default-file) - (if (or (not (eq major-mode 'gnus-summary-mode)) + (if (or (not (derived-mode-p 'gnus-summary-mode)) (not gnus-article-current)) (error "Please select an article in the Gnus summary buffer") (let* ((group (car gnus-article-current)) @@ -473,7 +473,7 @@ That is, all information but the name." ;; Been to lazy to use gnus-bookmark-save... (defalias 'gnus-bookmark-bmenu-save 'gnus-bookmark-write-file) -(defun gnus-bookmark-bmenu-mode () +(define-derived-mode gnus-bookmark-bmenu-mode fundamental-mode "Bookmark Menu" "Major mode for editing a list of Gnus bookmarks. Each line describes one of the bookmarks in Gnus. Letters do not insert themselves; instead, they are commands. @@ -497,13 +497,8 @@ Gnus bookmarks names preceded by a \"*\" have annotations. in another buffer. \\[gnus-bookmark-bmenu-show-all-annotations] -- show the annotations of all bookmarks in another buffer. \\[gnus-bookmark-bmenu-edit-annotation] -- edit the annotation for the current bookmark." - (kill-all-local-variables) - (use-local-map gnus-bookmark-bmenu-mode-map) (setq truncate-lines t) - (setq buffer-read-only t) - (setq major-mode 'gnus-bookmark-bmenu-mode) - (setq mode-name "Bookmark Menu") - (gnus-run-mode-hooks 'gnus-bookmark-bmenu-mode-hook)) + (setq buffer-read-only t)) ;; avoid compilation warnings (defvar gnus-bookmark-bmenu-toggle-infos nil) diff --git a/lisp/gnus/gnus-cus.el b/lisp/gnus/gnus-cus.el index c8fb5b5dc73..247c081a20f 100644 --- a/lisp/gnus/gnus-cus.el +++ b/lisp/gnus/gnus-cus.el @@ -33,7 +33,7 @@ ;;; Widgets: -(defun gnus-custom-mode () +(define-derived-mode gnus-custom-mode fundamental-mode "Gnus Customize" "Major mode for editing Gnus customization buffers. The following commands are available: @@ -45,9 +45,6 @@ The following commands are available: Entry to this mode calls the value of `gnus-custom-mode-hook' if that value is non-nil." - (kill-all-local-variables) - (setq major-mode 'gnus-custom-mode - mode-name "Gnus Customize") (use-local-map widget-keymap) ;; Emacs stuff: (when (and (facep 'custom-button-face) @@ -63,8 +60,7 @@ if that value is non-nil." (set (make-local-variable 'widget-push-button-prefix) "") (set (make-local-variable 'widget-push-button-suffix) "") (set (make-local-variable 'widget-link-prefix) "") - (set (make-local-variable 'widget-link-suffix) "")) - (gnus-run-mode-hooks 'gnus-custom-mode-hook)) + (set (make-local-variable 'widget-link-suffix) ""))) ;;; Group Customization: diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 9533f5819a4..c8945e57531 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -1105,7 +1105,7 @@ When FORCE, rebuild the tool bar." (set (make-local-variable 'tool-bar-map) map)))) gnus-group-tool-bar-map) -(defun gnus-group-mode () +(define-derived-mode gnus-group-mode fundamental-mode "Group" "Major mode for reading news. All normal editing commands are switched off. @@ -1122,17 +1122,12 @@ For more in-depth information on this mode, read the manual (`\\[gnus-info-find- The following commands are available: \\{gnus-group-mode-map}" - (interactive) - (kill-all-local-variables) (when (gnus-visual-p 'group-menu 'menu) (gnus-group-make-menu-bar) (gnus-group-make-tool-bar)) (gnus-simplify-mode-line) - (setq major-mode 'gnus-group-mode) - (setq mode-name "Group") (gnus-group-set-mode-line) (setq mode-line-process nil) - (use-local-map gnus-group-mode-map) (buffer-disable-undo) (setq truncate-lines t) (setq buffer-read-only t @@ -1143,8 +1138,7 @@ The following commands are available: (when gnus-use-undo (gnus-undo-mode 1)) (when gnus-slave - (gnus-slave-mode)) - (gnus-run-mode-hooks 'gnus-group-mode-hook)) + (gnus-slave-mode))) (defun gnus-update-group-mark-positions () (save-excursion @@ -1193,7 +1187,7 @@ The following commands are available: (defun gnus-group-setup-buffer () (set-buffer (gnus-get-buffer-create gnus-group-buffer)) - (unless (eq major-mode 'gnus-group-mode) + (unless (derived-mode-p 'gnus-group-mode) (gnus-group-mode))) (defun gnus-group-name-charset (method group) @@ -2147,7 +2141,7 @@ be permanent." (defun gnus-group-name-at-point () "Return a group name from around point if it exists, or nil." - (if (eq major-mode 'gnus-group-mode) + (if (derived-mode-p 'gnus-group-mode) (let ((group (gnus-group-group-name))) (when group (gnus-group-decoded-name group))) @@ -3114,7 +3108,7 @@ If SOLID (the prefix), create a solid group." (gnus-group-read-ephemeral-group group method t (cons (current-buffer) - (if (eq major-mode 'gnus-summary-mode) 'summary 'group)))))) + (if (derived-mode-p 'gnus-summary-mode) 'summary 'group)))))) (defvar nnrss-group-alist) (eval-when-compile @@ -3229,7 +3223,7 @@ mail messages or news articles in files that have numeric names." (unless (gnus-group-read-ephemeral-group name method t (cons (current-buffer) - (if (eq major-mode 'gnus-summary-mode) + (if (derived-mode-p 'gnus-summary-mode) 'summary 'group))) (error "Couldn't enter %s" dir)))) @@ -4319,7 +4313,7 @@ The hook `gnus-suspend-gnus-hook' is called before actually suspending." (unless (or (eq buf group-buf) (eq buf gnus-dribble-buffer) (with-current-buffer buf - (eq major-mode 'message-mode))) + (derived-mode-p 'message-mode))) (gnus-kill-buffer buf))) (setq gnus-backlog-articles nil) (gnus-kill-gnus-frames) diff --git a/lisp/gnus/gnus-kill.el b/lisp/gnus/gnus-kill.el index b3f06de0868..011288e280b 100644 --- a/lisp/gnus/gnus-kill.el +++ b/lisp/gnus/gnus-kill.el @@ -75,20 +75,20 @@ of time." ;;; Gnus Kill File Mode ;;; -(defvar gnus-kill-file-mode-map nil) +(defvar gnus-kill-file-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map emacs-lisp-mode-map) + (gnus-define-keymap map + "\C-c\C-k\C-s" gnus-kill-file-kill-by-subject + "\C-c\C-k\C-a" gnus-kill-file-kill-by-author + "\C-c\C-k\C-t" gnus-kill-file-kill-by-thread + "\C-c\C-k\C-x" gnus-kill-file-kill-by-xref + "\C-c\C-a" gnus-kill-file-apply-buffer + "\C-c\C-e" gnus-kill-file-apply-last-sexp + "\C-c\C-c" gnus-kill-file-exit) + map)) -(unless gnus-kill-file-mode-map - (gnus-define-keymap (setq gnus-kill-file-mode-map - (copy-keymap emacs-lisp-mode-map)) - "\C-c\C-k\C-s" gnus-kill-file-kill-by-subject - "\C-c\C-k\C-a" gnus-kill-file-kill-by-author - "\C-c\C-k\C-t" gnus-kill-file-kill-by-thread - "\C-c\C-k\C-x" gnus-kill-file-kill-by-xref - "\C-c\C-a" gnus-kill-file-apply-buffer - "\C-c\C-e" gnus-kill-file-apply-last-sexp - "\C-c\C-c" gnus-kill-file-exit)) - -(defun gnus-kill-file-mode () +(define-derived-mode gnus-kill-file-mode emacs-lisp-mode "Kill" "Major mode for editing kill files. If you are using this mode - you probably shouldn't. Kill files @@ -151,15 +151,7 @@ which are marked as read in the previous Gnus sessions. Marks other than `D' should be used for articles which should really be deleted. Entry to this mode calls emacs-lisp-mode-hook and -gnus-kill-file-mode-hook with no arguments, if that value is non-nil." - (interactive) - (kill-all-local-variables) - (use-local-map gnus-kill-file-mode-map) - (set-syntax-table emacs-lisp-mode-syntax-table) - (setq major-mode 'gnus-kill-file-mode) - (setq mode-name "Kill") - (lisp-mode-variables nil) - (gnus-run-mode-hooks 'emacs-lisp-mode-hook 'gnus-kill-file-mode-hook)) +gnus-kill-file-mode-hook with no arguments, if that value is non-nil.") (defun gnus-kill-file-edit-file (newsgroup) "Begin editing a kill file for NEWSGROUP. @@ -175,10 +167,10 @@ If NEWSGROUP is nil, the global kill file is selected." (let ((buffer (find-file-noselect file))) (cond ((get-buffer-window buffer) (pop-to-buffer buffer)) - ((eq major-mode 'gnus-group-mode) + ((derived-mode-p 'gnus-group-mode) (gnus-configure-windows 'group) ;Take all windows. (pop-to-buffer buffer)) - ((eq major-mode 'gnus-summary-mode) + ((derived-mode-p 'gnus-summary-mode) (gnus-configure-windows 'article) (pop-to-buffer gnus-article-buffer) (bury-buffer gnus-article-buffer) @@ -201,7 +193,7 @@ If NEWSGROUP is nil, the global kill file is selected." ;; REGEXP: The string to kill. (save-excursion (let (string) - (unless (eq major-mode 'gnus-kill-file-mode) + (unless (derived-mode-p 'gnus-kill-file-mode) (gnus-kill-set-kill-buffer)) (unless dont-move (goto-char (point-max))) @@ -520,7 +512,7 @@ COMMAND must be a Lisp expression or a string representing a key sequence." (setq kill-list (cdr kill-list)))) (gnus-execute field kill-list command nil (not all)))))) (switch-to-buffer old-buffer) - (when (and (eq major-mode 'gnus-kill-file-mode) regexp (not silent)) + (when (and (derived-mode-p 'gnus-kill-file-mode) regexp (not silent)) (gnus-pp-gnus-kill (nconc (list 'gnus-kill field (if (consp regexp) (list 'quote regexp) regexp)) diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el index 69774587d80..2f151e570d7 100644 --- a/lisp/gnus/gnus-srvr.el +++ b/lisp/gnus/gnus-srvr.el @@ -244,6 +244,7 @@ For more in-depth information on this mode, read the manual The following commands are available: \\{gnus-server-mode-map}" + ;; FIXME: Use define-derived-mode. (interactive) (when (gnus-visual-p 'server-menu 'menu) (gnus-server-make-menu-bar)) @@ -869,7 +870,7 @@ claim them." (gnus-message 5 "Connecting to %s...done" (nth 1 method)) t)))) -(defun gnus-browse-mode () +(define-derived-mode gnus-browse-mode fundamental-mode "Browse Server" "Major mode for browsing a foreign server. All normal editing commands are switched off. @@ -884,20 +885,14 @@ buffer. 2) `\\[gnus-browse-read-group]' to read a group ephemerally. 3) `\\[gnus-browse-exit]' to return to the group buffer." - (interactive) - (kill-all-local-variables) (when (gnus-visual-p 'browse-menu 'menu) (gnus-browse-make-menu-bar)) (gnus-simplify-mode-line) - (setq major-mode 'gnus-browse-mode) - (setq mode-name "Browse Server") (setq mode-line-process nil) - (use-local-map gnus-browse-mode-map) (buffer-disable-undo) (setq truncate-lines t) (gnus-set-default-directory) - (setq buffer-read-only t) - (gnus-run-mode-hooks 'gnus-browse-mode-hook)) + (setq buffer-read-only t)) (defun gnus-browse-read-group (&optional no-article number) "Enter the group at the current line. @@ -1022,7 +1017,7 @@ doing the deletion." (defun gnus-browse-exit () "Quit browsing and return to the group buffer." (interactive) - (when (eq major-mode 'gnus-browse-mode) + (when (derived-mode-p 'gnus-browse-mode) (gnus-kill-buffer (current-buffer))) ;; Insert the newly subscribed groups in the group buffer. (with-current-buffer gnus-group-buffer diff --git a/lisp/gnus/score-mode.el b/lisp/gnus/score-mode.el index ec24f1f9670..58767cfcc7a 100644 --- a/lisp/gnus/score-mode.el +++ b/lisp/gnus/score-mode.el @@ -40,13 +40,13 @@ (defvar gnus-score-edit-exit-function nil "Function run on exit from the score buffer.") -(defvar gnus-score-mode-map nil) -(unless gnus-score-mode-map - (setq gnus-score-mode-map (make-sparse-keymap)) - (set-keymap-parent gnus-score-mode-map emacs-lisp-mode-map) - (define-key gnus-score-mode-map "\C-c\C-c" 'gnus-score-edit-exit) - (define-key gnus-score-mode-map "\C-c\C-d" 'gnus-score-edit-insert-date) - (define-key gnus-score-mode-map "\C-c\C-p" 'gnus-score-pretty-print)) +(defvar gnus-score-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map emacs-lisp-mode-map) + (define-key map "\C-c\C-c" 'gnus-score-edit-exit) + (define-key map "\C-c\C-d" 'gnus-score-edit-insert-date) + (define-key map "\C-c\C-p" 'gnus-score-pretty-print) + map)) (defvar score-mode-syntax-table (let ((table (copy-syntax-table lisp-mode-syntax-table))) @@ -58,21 +58,13 @@ (defvar score-mode-coding-system mm-universal-coding-system) ;;;###autoload -(defun gnus-score-mode () +(define-derived-mode gnus-score-mode emacs-lisp-mode "Score" "Mode for editing Gnus score files. This mode is an extended emacs-lisp mode. \\{gnus-score-mode-map}" - (interactive) - (kill-all-local-variables) - (use-local-map gnus-score-mode-map) (gnus-score-make-menu-bar) - (set-syntax-table score-mode-syntax-table) - (setq major-mode 'gnus-score-mode) - (setq mode-name "Score") - (lisp-mode-variables nil) - (make-local-variable 'gnus-score-edit-exit-function) - (gnus-run-mode-hooks 'emacs-lisp-mode-hook 'gnus-score-mode-hook)) + (make-local-variable 'gnus-score-edit-exit-function)) (defun gnus-score-make-menu-bar () (unless (boundp 'gnus-score-menu) diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index ce29505d6f2..8356a186f13 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -156,7 +156,7 @@ elisp byte-compiler." (null buffer-file-name)) italic) (30 (memq major-mode ibuffer-help-buffer-modes) font-lock-comment-face) - (35 (eq major-mode 'dired-mode) font-lock-function-name-face)) + (35 (derived-mode-p 'dired-mode) font-lock-function-name-face)) "An alist describing how to fontify buffers. Each element should be of the form (PRIORITY FORM FACE), where PRIORITY is an integer, FORM is an arbitrary form to evaluate in the @@ -2358,7 +2358,7 @@ FORMATS is the value to use for `ibuffer-formats'. ;; We switch to the buffer's window in order to be able ;; to modify the value of point (select-window (get-buffer-window buf 0)) - (or (eq major-mode 'ibuffer-mode) + (or (derived-mode-p 'ibuffer-mode) (ibuffer-mode)) (setq ibuffer-restore-window-config-on-quit other-window-p) (when shrink @@ -2383,7 +2383,7 @@ FORMATS is the value to use for `ibuffer-formats'. (message "Commands: m, u, t, RET, g, k, S, D, Q; q to quit; h for help")))))) (put 'ibuffer-mode 'mode-class 'special) -(defun ibuffer-mode () +(define-derived-mode ibuffer-mode special-mode "IBuffer" "A major mode for viewing a list of buffers. In Ibuffer, you can conveniently perform many operations on the currently open buffers, in addition to filtering your view to a @@ -2564,10 +2564,6 @@ filter groups are displayed in this order of precedence. You may rearrange filter groups by using the regular '\\[ibuffer-kill-line]' and '\\[ibuffer-yank]' pair. Yanked groups will be inserted before the group at point." - (kill-all-local-variables) - (use-local-map ibuffer-mode-map) - (setq major-mode 'ibuffer-mode) - (setq mode-name "Ibuffer") ;; Include state info next to the mode name. (set (make-local-variable 'mode-line-process) '(" by " @@ -2627,13 +2623,12 @@ will be inserted before the group at point." (ibuffer-update-format) (when ibuffer-default-directory (setq default-directory ibuffer-default-directory)) - (add-hook 'change-major-mode-hook 'font-lock-defontify nil t) - (run-mode-hooks 'ibuffer-mode-hook)) + (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)) ;;; Start of automatically extracted autoloads. -;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "d06b2735a74954e0c6922a811de7608c") +;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "85795a4045d20654599b73b88e8e1bc9") ;;; Generated autoloads from ibuf-ext.el (autoload 'ibuffer-auto-mode "ibuf-ext" "\ diff --git a/lisp/info.el b/lisp/info.el index 65cd7eddcfd..93442689319 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -790,7 +790,7 @@ See a list of available Info commands in `Info-mode'." (defun info-setup (file-or-node buffer) "Display Info node FILE-OR-NODE in BUFFER." - (if (and buffer (not (eq major-mode 'Info-mode))) + (if (and buffer (not (derived-mode-p 'Info-mode))) (Info-mode)) (if file-or-node ;; If argument already contains parentheses, don't add another set @@ -931,7 +931,7 @@ STRICT-CASE is non-nil)." (info-initialize) (setq filename (Info-find-file filename)) ;; Go into Info buffer. - (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*")) + (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*")) ;; Record the node we are leaving, if we were in one. (and (not no-going-back) Info-current-file @@ -961,7 +961,7 @@ otherwise, that defaults to `Top'." "Go to an Info node FILENAME and NODENAME, re-reading disk contents. When *info* is already displaying FILENAME and NODENAME, the window position is preserved, if possible." - (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*")) + (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*")) (let ((old-filename Info-current-file) (old-nodename Info-current-node) (window-selected (eq (selected-window) (get-buffer-window))) @@ -1065,7 +1065,7 @@ is non-nil)." (defun Info-find-node-2 (filename nodename &optional no-going-back strict-case) (buffer-disable-undo (current-buffer)) - (or (eq major-mode 'Info-mode) + (or (derived-mode-p 'Info-mode) (Info-mode)) (widen) (setq Info-current-node nil) @@ -2212,7 +2212,7 @@ End of submatch 0, 1, and 3 are the same, so you can safely concat." (interactive) ;; In case another window is currently selected (save-window-excursion - (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*")) + (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*")) (Info-goto-node (Info-extract-pointer "next")))) (defun Info-prev () @@ -2220,7 +2220,7 @@ End of submatch 0, 1, and 3 are the same, so you can safely concat." (interactive) ;; In case another window is currently selected (save-window-excursion - (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*")) + (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*")) (Info-goto-node (Info-extract-pointer "prev[ious]*" "previous")))) (defun Info-up (&optional same-file) @@ -2229,7 +2229,7 @@ If SAME-FILE is non-nil, do not move to a different Info file." (interactive) ;; In case another window is currently selected (save-window-excursion - (or (eq major-mode 'Info-mode) (switch-to-buffer "*info*")) + (or (derived-mode-p 'Info-mode) (switch-to-buffer "*info*")) (let ((old-node Info-current-node) (old-file Info-current-file) (node (Info-extract-pointer "up")) p) @@ -4082,7 +4082,7 @@ If FORK is non-nil, it is passed to `Info-goto-node'." (defun Info-menu-update () "Update the Info menu for the current node." (condition-case nil - (if (or (not (eq major-mode 'Info-mode)) + (if (or (not (derived-mode-p 'Info-mode)) (equal (list Info-current-file Info-current-node) Info-menu-last-node)) () @@ -4285,7 +4285,7 @@ Advanced commands: ;; When an Info buffer is killed, make sure the associated tags buffer ;; is killed too. (defun Info-kill-buffer () - (and (eq major-mode 'Info-mode) + (and (derived-mode-p 'Info-mode) Info-tag-table-buffer (kill-buffer Info-tag-table-buffer))) @@ -4302,10 +4302,11 @@ Advanced commands: (copy-marker (marker-position m))) (make-marker)))))) -(defvar Info-edit-map (let ((map (make-sparse-keymap))) - (set-keymap-parent map text-mode-map) - (define-key map "\C-c\C-c" 'Info-cease-edit) - map) +(define-obsolete-variable-alias 'Info-edit-map 'Info-edit-mode-map "24.1") +(defvar Info-edit-mode-map (let ((map (make-sparse-keymap))) + (set-keymap-parent map text-mode-map) + (define-key map "\C-c\C-c" 'Info-cease-edit) + map) "Local keymap used within `e' command of Info.") (make-obsolete-variable 'Info-edit-map @@ -4315,19 +4316,14 @@ Advanced commands: ;; Info-edit mode is suitable only for specially formatted data. (put 'Info-edit-mode 'mode-class 'special) -(defun Info-edit-mode () +(define-derived-mode Info-edit-mode text-mode "Info Edit" "Major mode for editing the contents of an Info node. Like text mode with the addition of `Info-cease-edit' which returns to Info mode for browsing. \\{Info-edit-map}" - (use-local-map Info-edit-map) - (setq major-mode 'Info-edit-mode) - (setq mode-name "Info Edit") - (kill-local-variable 'mode-line-buffer-identification) (setq buffer-read-only nil) (force-mode-line-update) - (buffer-enable-undo (current-buffer)) - (run-mode-hooks 'Info-edit-mode-hook)) + (buffer-enable-undo (current-buffer))) (make-obsolete 'Info-edit-mode "editing Info nodes by hand is not recommended." "24.4") @@ -4352,11 +4348,7 @@ This feature will be removed in future.") (and (buffer-modified-p) (y-or-n-p "Save the file? ") (save-buffer)) - (use-local-map Info-mode-map) - (setq major-mode 'Info-mode) - (setq mode-name "Info") - (Info-set-mode-line) - (setq buffer-read-only t) + (Info-mode) (force-mode-line-update) (and (marker-position Info-tag-table-marker) (buffer-modified-p) @@ -4469,7 +4461,7 @@ COMMAND must be a symbol or string." ;; Get Info running, and pop to it in another window. (save-window-excursion (info)) - (or (eq major-mode 'Info-mode) (pop-to-buffer "*info*")) + (or (derived-mode-p 'Info-mode) (pop-to-buffer "*info*")) ;; Bind Info-history to nil, to prevent the last Index node ;; visited by Info-find-emacs-command-nodes from being ;; pushed onto the history. @@ -5133,7 +5125,7 @@ INDENT is the current indentation depth." NODESPEC is a string of the form: (file)node." ;; Set up a buffer we can use to fake-out Info. (with-current-buffer (get-buffer-create " *info-browse-tmp*") - (if (not (equal major-mode 'Info-mode)) + (if (not (derived-mode-p 'Info-mode)) (Info-mode)) ;; Get the node into this buffer (if (not (string-match "^(\\([^)]+\\))\\([^.]+\\)$" nodespec)) diff --git a/lisp/locate.el b/lisp/locate.el index ab0417070e7..99a99853da9 100644 --- a/lisp/locate.el +++ b/lisp/locate.el @@ -95,7 +95,7 @@ ;; ;; (defadvice dired-make-relative (before set-no-error activate) ;; "For locate mode and Windows, don't return errors" -;; (if (and (eq major-mode 'locate-mode) +;; (if (and (derived-mode-p 'locate-mode) ;; (memq system-type '(windows-nt ms-dos))) ;; (ad-set-arg 2 t) ;; )) @@ -448,7 +448,7 @@ file name or is inside a subdirectory." ;; Define a mode for locate ;; Default directory is set to "/" so that dired commands, which ;; expect to be in a tree, will work properly -(defun locate-mode () +(define-derived-mode locate-mode special-mode "Locate" "Major mode for the `*Locate*' buffer made by \\[locate]. \\\ In that buffer, you can use almost all the usual dired bindings. @@ -463,39 +463,31 @@ Specific `locate-mode' commands, such as \\[locate-find-directory], do not work in subdirectories. \\{locate-mode-map}" - ;; Not to be called interactively. - (kill-all-local-variables) ;; Avoid clobbering this variable (make-local-variable 'dired-subdir-alist) - (use-local-map locate-mode-map) - (setq major-mode 'locate-mode - mode-name "Locate" - default-directory "/" + (setq default-directory "/" buffer-read-only t selective-display t) (dired-alist-add-1 default-directory (point-min-marker)) (set (make-local-variable 'dired-directory) "/") (set (make-local-variable 'dired-subdir-switches) locate-ls-subdir-switches) (setq dired-switches-alist nil) - (make-local-variable 'directory-listing-before-filename-regexp) ;; This should support both Unix and Windoze style names - (setq directory-listing-before-filename-regexp - (concat "^.\\(" - (make-string (1- locate-filename-indentation) ?\s) - "\\)\\|" - (default-value 'directory-listing-before-filename-regexp))) - (make-local-variable 'dired-actual-switches) - (setq dired-actual-switches "") - (make-local-variable 'dired-permission-flags-regexp) - (setq dired-permission-flags-regexp - (concat "^.\\(" - (make-string (1- locate-filename-indentation) ?\s) - "\\)\\|" - (default-value 'dired-permission-flags-regexp))) - (make-local-variable 'revert-buffer-function) - (setq revert-buffer-function 'locate-update) - (set (make-local-variable 'page-delimiter) "\n\n") - (run-mode-hooks 'locate-mode-hook)) + (setq-local directory-listing-before-filename-regexp + (concat "^.\\(" + (make-string (1- locate-filename-indentation) ?\s) + "\\)\\|" + (default-value + 'directory-listing-before-filename-regexp))) + (setq-local dired-actual-switches "") + (setq-local dired-permission-flags-regexp + (concat "^.\\(" + (make-string (1- locate-filename-indentation) ?\s) + "\\)\\|" + (default-value 'dired-permission-flags-regexp))) + + (setq-local revert-buffer-function #'locate-update) + (setq-local page-delimiter "\n\n")) (put 'locate-mode 'derived-mode-parent 'dired-mode) (defun locate-do-setup (search-string) diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el index 5e01a7149a8..b2618ef42db 100644 --- a/lisp/mail/mspools.el +++ b/lisp/mail/mspools.el @@ -344,19 +344,13 @@ nil." (interactive) (kill-buffer mspools-buffer)) -(defun mspools-mode () +(define-derived-mode mspools-mode special-mode "MSpools" "Major mode for output from mspools-show. \\Move point to one of the items in this buffer, then use \\[mspools-visit-spool] to go to the spool that the current line refers to. \\[revert-buffer] to regenerate the list of spools. \\{mspools-mode-map}" - (kill-all-local-variables) - (make-local-variable 'revert-buffer-function) - (setq revert-buffer-function 'mspools-revert-buffer) - (use-local-map mspools-mode-map) - (setq major-mode 'mspools-mode) - (setq mode-name "MSpools") - (run-mode-hooks 'mspools-mode-hook)) + (setq-local revert-buffer-function 'mspools-revert-buffer)) (defun mspools-get-spool-files () "Find the list of spool files and display them in *spools* buffer." diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el index 3a0a7824ad8..cced2231522 100644 --- a/lisp/mail/rmailsum.el +++ b/lisp/mail/rmailsum.el @@ -408,7 +408,7 @@ If FUNCTION is nil, includes all messages." (unless rmail-buffer (error "No RMAIL buffer found")) (let (mesg was-in-summary sumbuf) - (if (eq major-mode 'rmail-summary-mode) + (if (derived-mode-p 'rmail-summary-mode) (setq was-in-summary t)) (with-current-buffer rmail-buffer (setq rmail-summary-buffer (rmail-new-summary-1 desc redo function args) @@ -1035,7 +1035,7 @@ Optional prefix ARG means undelete ARG previous messages." ;; Rmail Summary mode is suitable only for specially formatted data. (put 'rmail-summary-mode 'mode-class 'special) -(defun rmail-summary-mode () +(define-derived-mode rmail-summary-mode special-mode "RMAIL Summary" "Rmail Summary Mode is invoked from Rmail Mode by using \\\\[rmail-summary]. As commands are issued in the summary buffer, they are applied to the corresponding mail messages in the rmail buffer. @@ -1058,10 +1058,6 @@ Commands for sorting the summary: \\[rmail-summary-sort-by-correspondent] Sort by correspondent. \\[rmail-summary-sort-by-lines] Sort by lines. \\[rmail-summary-sort-by-labels] Sort by labels." - (interactive) - (kill-all-local-variables) - (setq major-mode 'rmail-summary-mode) - (setq mode-name "RMAIL Summary") (setq truncate-lines t) (setq buffer-read-only t) (set-syntax-table text-mode-syntax-table) @@ -1074,8 +1070,7 @@ Commands for sorting the summary: (make-local-variable 'revert-buffer-function) (make-local-variable 'font-lock-defaults) (setq font-lock-defaults '(rmail-summary-font-lock-keywords t)) - (rmail-summary-enable) - (run-mode-hooks 'rmail-summary-mode-hook)) + (rmail-summary-enable)) ;; Summary features need to be disabled during edit mode. (defun rmail-summary-disable () diff --git a/lisp/man.el b/lisp/man.el index 34131f43692..9eb0ccd719a 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -413,7 +413,7 @@ Otherwise, the value is whatever the function (defvar Man-topic-history nil "Topic read history.") -(defvar man-mode-syntax-table +(defvar Man-mode-syntax-table (let ((table (copy-syntax-table (standard-syntax-table)))) (modify-syntax-entry ?. "w" table) (modify-syntax-entry ?_ "w" table) @@ -1350,7 +1350,7 @@ manpage command." (put 'Man-mode 'mode-class 'special) -(defun Man-mode () +(define-derived-mode Man-mode fundamental-mode "Man" "A mode for browsing Un*x manual pages. The following man commands are available in the buffer. Try @@ -1387,11 +1387,7 @@ The following variables may be of some use. Try The following key bindings are currently in effect in the buffer: \\{Man-mode-map}" - (interactive) - (kill-all-local-variables) - (setq major-mode 'Man-mode - mode-name "Man" - buffer-auto-save-file-name nil + (setq buffer-auto-save-file-name nil mode-line-buffer-identification (list (default-value 'mode-line-buffer-identification) " {" 'Man-page-mode-string "}") @@ -1399,8 +1395,6 @@ The following key bindings are currently in effect in the buffer: buffer-read-only t) (buffer-disable-undo) (auto-fill-mode -1) - (use-local-map Man-mode-map) - (set-syntax-table man-mode-syntax-table) (setq imenu-generic-expression (list (list nil Man-heading-regexp 0))) (set (make-local-variable 'outline-regexp) Man-heading-regexp) (set (make-local-variable 'outline-level) (lambda () 1)) @@ -1409,8 +1403,7 @@ The following key bindings are currently in effect in the buffer: (Man-build-page-list) (Man-strip-page-headers) (Man-unindent) - (Man-goto-page 1 t) - (run-mode-hooks 'Man-mode-hook)) + (Man-goto-page 1 t)) (defsubst Man-build-section-alist () "Build the list of manpage sections." diff --git a/lisp/net/eudc-hotlist.el b/lisp/net/eudc-hotlist.el index a8a51b7d61b..57675a483b2 100644 --- a/lisp/net/eudc-hotlist.el +++ b/lisp/net/eudc-hotlist.el @@ -44,7 +44,7 @@ (define-key map "x" 'kill-this-buffer) map)) -(defun eudc-hotlist-mode () +(define-derived-mode eudc-hotlist-mode fundamental-mode "EUDC-Servers" "Major mode used to edit the hotlist of servers. These are the special commands of this mode: @@ -54,18 +54,12 @@ These are the special commands of this mode: t -- Transpose the server at point and the previous one q -- Commit the changes and quit. x -- Quit without committing the changes." - (interactive) - (kill-all-local-variables) - (setq major-mode 'eudc-hotlist-mode) - (setq mode-name "EUDC-Servers") - (use-local-map eudc-hotlist-mode-map) (when (featurep 'xemacs) (setq mode-popup-menu eudc-hotlist-menu) (when (featurep 'menubar) (set-buffer-menubar current-menubar) (add-submenu nil (cons "EUDC-Hotlist" (cdr (cdr eudc-hotlist-menu)))))) - (setq buffer-read-only t) - (run-mode-hooks 'eudc-hotlist-mode-hook)) + (setq buffer-read-only t)) ;;;###autoload (defun eudc-edit-hotlist () @@ -76,10 +70,8 @@ These are the special commands of this mode: (switch-to-buffer (get-buffer-create "*EUDC Servers*")) (setq buffer-read-only nil) (erase-buffer) - (mapc (function - (lambda (entry) - (setq proto-col (max (length (car entry)) proto-col)))) - eudc-server-hotlist) + (dolist (entry eudc-server-hotlist) + (setq proto-col (max (length (car entry)) proto-col))) (setq proto-col (+ 3 proto-col)) (setq gap (make-string (- proto-col 6) ?\ )) (insert " EUDC Servers\n" @@ -89,17 +81,16 @@ These are the special commands of this mode: "------" gap "--------\n" "\n") (setq eudc-hotlist-list-beginning (point)) - (mapc (lambda (entry) - (insert (car entry)) - (indent-to proto-col) - (insert (symbol-name (cdr entry)) "\n")) - eudc-server-hotlist) - (eudc-hotlist-mode))) + (dolist (entry eudc-server-hotlist) + (insert (car entry)) + (indent-to proto-col) + (insert (symbol-name (cdr entry)) "\n")) + (eudc-hotlist-mode))) (defun eudc-hotlist-add-server () "Add a new server to the list after current one." (interactive) - (if (not (eq major-mode 'eudc-hotlist-mode)) + (if (not (derived-mode-p 'eudc-hotlist-mode)) (error "Not in a EUDC hotlist edit buffer")) (let ((server (read-from-minibuffer "Server: ")) (protocol (completing-read "Protocol: " @@ -117,7 +108,7 @@ These are the special commands of this mode: (defun eudc-hotlist-delete-server () "Delete the server at point from the list." (interactive) - (if (not (eq major-mode 'eudc-hotlist-mode)) + (if (not (derived-mode-p 'eudc-hotlist-mode)) (error "Not in a EUDC hotlist edit buffer")) (let ((buffer-read-only nil)) (save-excursion @@ -130,7 +121,7 @@ These are the special commands of this mode: (defun eudc-hotlist-quit-edit () "Quit the hotlist editing mode and save changes to the hotlist." (interactive) - (if (not (eq major-mode 'eudc-hotlist-mode)) + (if (not (derived-mode-p 'eudc-hotlist-mode)) (error "Not in a EUDC hotlist edit buffer")) (let (hotlist) (goto-char eudc-hotlist-list-beginning) @@ -149,7 +140,7 @@ These are the special commands of this mode: (defun eudc-hotlist-select-server () "Select the server at point as the current server." (interactive) - (if (not (eq major-mode 'eudc-hotlist-mode)) + (if (not (derived-mode-p 'eudc-hotlist-mode)) (error "Not in a EUDC hotlist edit buffer")) (save-excursion (beginning-of-line) @@ -163,7 +154,7 @@ These are the special commands of this mode: (defun eudc-hotlist-transpose-servers () "Swap the order of the server with the previous one in the list." (interactive) - (if (not (eq major-mode 'eudc-hotlist-mode)) + (if (not (derived-mode-p 'eudc-hotlist-mode)) (error "Not in a EUDC hotlist edit buffer")) (let ((buffer-read-only nil)) (save-excursion diff --git a/lisp/net/eudc.el b/lisp/net/eudc.el index c474ac9380d..453c19b27f9 100644 --- a/lisp/net/eudc.el +++ b/lisp/net/eudc.el @@ -652,7 +652,7 @@ Each copy is added a new field containing one of the values of FIELD." result)) -(defun eudc-mode () +(define-derived-mode eudc-mode special-mode "EUDC" "Major mode used in buffers displaying the results of directory queries. There is no sense in calling this command from a buffer other than one containing the results of a directory query. @@ -663,15 +663,9 @@ These are the special commands of EUDC mode: n -- Move to next record. p -- Move to previous record. b -- Insert record at point into the BBDB database." - (interactive) - (kill-all-local-variables) - (setq major-mode 'eudc-mode) - (setq mode-name "EUDC") - (use-local-map eudc-mode-map) (if (not (featurep 'xemacs)) (easy-menu-define eudc-emacs-menu eudc-mode-map "" (eudc-menu)) - (setq mode-popup-menu (eudc-menu))) - (run-mode-hooks 'eudc-mode-hook)) + (setq mode-popup-menu (eudc-menu)))) ;;}}} @@ -1084,7 +1078,7 @@ queries the server for the existing fields and displays a corresponding form." (defun eudc-move-to-next-record () "Move to next record, in a buffer displaying directory query results." (interactive) - (if (not (eq major-mode 'eudc-mode)) + (if (not (derived-mode-p 'eudc-mode)) (error "Not in a EUDC buffer") (let ((pt (next-overlay-change (point)))) (if (< pt (point-max)) @@ -1094,7 +1088,7 @@ queries the server for the existing fields and displays a corresponding form." (defun eudc-move-to-previous-record () "Move to previous record, in a buffer displaying directory query results." (interactive) - (if (not (eq major-mode 'eudc-mode)) + (if (not (derived-mode-p 'eudc-mode)) (error "Not in a EUDC buffer") (let ((pt (previous-overlay-change (point)))) (if (> pt (point-min)) @@ -1122,7 +1116,7 @@ queries the server for the existing fields and displays a corresponding form." (overlay-get (car (overlays-at (point))) 'eudc-record)) :help "Insert record at point into the BBDB database"] ["Insert All Records into BBDB" eudc-batch-export-records-to-bbdb - (and (eq major-mode 'eudc-mode) + (and (derived-mode-p 'eudc-mode) (or (featurep 'bbdb) (prog1 (locate-library "bbdb") (message "")))) :help "Insert all the records returned by a directory query into BBDB"] diff --git a/lisp/net/mairix.el b/lisp/net/mairix.el index e6a5f8299ac..f2d404afa58 100644 --- a/lisp/net/mairix.el +++ b/lisp/net/mairix.el @@ -757,31 +757,24 @@ VALUES may contain values for editable fields from current article." map) "'mairix-searches-mode' keymap.") -(defvar mairix-searches-mode-font-lock-keywords) +(defvar mairix-searches-mode-font-lock-keywords + '(("^\\([0-9]+\\)" + (1 font-lock-constant-face)) + ("^[0-9 ]+\\(Name:\\) \\(.*\\)" + (1 font-lock-keyword-face) (2 font-lock-string-face)) + ("^[ ]+\\(Query:\\) \\(.*\\) , " + (1 font-lock-keyword-face) (2 font-lock-string-face)) + (", \\(Threads:\\) \\(.*\\)" + (1 font-lock-keyword-face) (2 font-lock-constant-face)) + ("^\\([A-Z].*\\)$" + (1 font-lock-comment-face)) + ("^[ ]+\\(Folder:\\) \\(.*\\)" + (1 font-lock-keyword-face) (2 font-lock-string-face)))) -(defun mairix-searches-mode () +(define-derived-mode mairix-searches-mode fundamental-mode "mairix-searches" "Major mode for editing mairix searches." - (interactive) - (kill-all-local-variables) - (setq major-mode 'mairix-searches-mode) - (setq mode-name "mairix-searches") - (set-syntax-table text-mode-syntax-table) - (use-local-map mairix-searches-mode-map) - (make-local-variable 'font-lock-defaults) - (setq mairix-searches-mode-font-lock-keywords - (list (list "^\\([0-9]+\\)" - '(1 font-lock-constant-face)) - (list "^[0-9 ]+\\(Name:\\) \\(.*\\)" - '(1 font-lock-keyword-face) '(2 font-lock-string-face)) - (list "^[ ]+\\(Query:\\) \\(.*\\) , " - '(1 font-lock-keyword-face) '(2 font-lock-string-face)) - (list ", \\(Threads:\\) \\(.*\\)" - '(1 font-lock-keyword-face) '(2 font-lock-constant-face)) - (list "^\\([A-Z].*\\)$" - '(1 font-lock-comment-face)) - (list "^[ ]+\\(Folder:\\) \\(.*\\)" - '(1 font-lock-keyword-face) '(2 font-lock-string-face)))) - (setq font-lock-defaults '(mairix-searches-mode-font-lock-keywords))) + :syntax-table text-mode-syntax-table + (setq-local font-lock-defaults '(mairix-searches-mode-font-lock-keywords))) (defun mairix-build-search-list () "Display saved searches in current buffer." diff --git a/lisp/net/newst-treeview.el b/lisp/net/newst-treeview.el index d6c8f6f557d..411d4dfdb43 100644 --- a/lisp/net/newst-treeview.el +++ b/lisp/net/newst-treeview.el @@ -1909,13 +1909,9 @@ Return t if groups have changed, nil otherwise." map) "Mode map for newsticker treeview.") -(defun newsticker-treeview-mode () +(define-derived-mode newsticker-treeview-mode fundamental-mode "Newsticker TV" "Major mode for Newsticker Treeview. \\{newsticker-treeview-mode-map}" - (kill-all-local-variables) - (use-local-map newsticker-treeview-mode-map) - (setq major-mode 'newsticker-treeview-mode) - (setq mode-name "Newsticker TV") (if (boundp 'tool-bar-map) (set (make-local-variable 'tool-bar-map) newsticker-treeview-tool-bar-map)) diff --git a/lisp/net/quickurl.el b/lisp/net/quickurl.el index 1e05d8db336..08ae9574a33 100644 --- a/lisp/net/quickurl.el +++ b/lisp/net/quickurl.el @@ -429,18 +429,12 @@ current buffer, this default action can be modified via (put 'quickurl-list-mode 'mode-class 'special) ;;;###autoload -(defun quickurl-list-mode () +(define-derived-mode quickurl-list-mode fundamental-mode "quickurl list" "A mode for browsing the quickurl URL list. The key bindings for `quickurl-list-mode' are: \\{quickurl-list-mode-map}" - (interactive) - (kill-all-local-variables) - (use-local-map quickurl-list-mode-map) - (setq major-mode 'quickurl-list-mode - mode-name "quickurl list") - (run-mode-hooks 'quickurl-list-mode-hook) (setq buffer-read-only t truncate-lines t)) diff --git a/lisp/obsolete/options.el b/lisp/obsolete/options.el index f25003e5652..16941167fb6 100644 --- a/lisp/obsolete/options.el +++ b/lisp/obsolete/options.el @@ -88,7 +88,7 @@ The Custom feature is intended to make this obsolete." ;; Edit Options mode is suitable only for specially formatted data. (put 'Edit-options-mode 'mode-class 'special) -(defun Edit-options-mode () +(define-derived-mode Edit-options-mode emacs-lisp-mode "Options" "\\\ Major mode for editing Emacs user option settings. Special commands are: @@ -100,17 +100,9 @@ Changed values made by these commands take effect immediately. Each variable description is a paragraph. For convenience, the characters \\[backward-paragraph] and \\[forward-paragraph] move back and forward by paragraphs." - (kill-all-local-variables) - (set-syntax-table emacs-lisp-mode-syntax-table) - (use-local-map Edit-options-mode-map) - (make-local-variable 'paragraph-separate) - (setq paragraph-separate "[^\^@-\^?]") - (make-local-variable 'paragraph-start) - (setq paragraph-start "\t") - (setq truncate-lines t) - (setq major-mode 'Edit-options-mode) - (setq mode-name "Options") - (run-mode-hooks 'Edit-options-mode-hook)) + (setq-local paragraph-separate "[^\^@-\^?]") + (setq-local paragraph-start "\t") + (setq-local truncate-lines t)) (defun Edit-options-set () (interactive) (Edit-options-modify diff --git a/lisp/play/5x5.el b/lisp/play/5x5.el index 2e3f500766f..4bd0c4ddcf4 100644 --- a/lisp/play/5x5.el +++ b/lisp/play/5x5.el @@ -185,19 +185,8 @@ GRID is the grid of positions to click.") ;; Gameplay functions. -(put '5x5-mode 'mode-class 'special) - -(defun 5x5-mode () - "A mode for playing `5x5'. - -The key bindings for `5x5-mode' are: - -\\{5x5-mode-map}" - (kill-all-local-variables) - (use-local-map 5x5-mode-map) - (setq major-mode '5x5-mode - mode-name "5x5") - (run-mode-hooks '5x5-mode-hook) +(define-derived-mode 5x5-mode special-mode "5x5" + "A mode for playing `5x5'." (setq buffer-read-only t truncate-lines t) (buffer-disable-undo)) diff --git a/lisp/play/blackbox.el b/lisp/play/blackbox.el index d38f799756b..ce2c928db0d 100644 --- a/lisp/play/blackbox.el +++ b/lisp/play/blackbox.el @@ -113,9 +113,8 @@ map)) ;; Blackbox mode is suitable only for specially formatted data. -(put 'blackbox-mode 'mode-class 'special) -(defun blackbox-mode () +(define-derived-mode blackbox-mode special-mode "Blackbox" "Major mode for playing blackbox. To learn how to play blackbox, see the documentation for function `blackbox'. @@ -124,13 +123,7 @@ The usual mnemonic keys move the cursor around the box. \\[bb-romp] -- send in a ray from point, or toggle a ball at point \\[bb-done] -- end game and get score" - (interactive) - (kill-all-local-variables) - (use-local-map blackbox-mode-map) - (setq truncate-lines t) - (setq major-mode 'blackbox-mode) - (setq mode-name "Blackbox") - (run-mode-hooks 'blackbox-mode-hook)) + (setq truncate-lines t)) ;;;###autoload (defun blackbox (num) diff --git a/lisp/play/landmark.el b/lisp/play/landmark.el index cf86d7a9de5..b995da4513c 100644 --- a/lisp/play/landmark.el +++ b/lisp/play/landmark.el @@ -233,10 +233,8 @@ (put 'landmark-mode 'intangible 1) ;; This one is for when they set view-read-only to t: Landmark cannot ;; allow View Mode to be activated in its buffer. -(put 'landmark-mode 'mode-class 'special) - -(defun landmark-mode () - "Major mode for playing Landmark against Emacs. +(define-derived-mode lm-mode special-mode "Lm" + "Major mode for playing Lm against Emacs. You and Emacs play in turn by marking a free square. You mark it with X and Emacs marks it with O. The winner is the first to get five contiguous marks horizontally, vertically or in diagonal. @@ -247,16 +245,9 @@ Other useful commands: \\{landmark-mode-map} Entry to this mode calls the value of `landmark-mode-hook' if that value is non-nil. One interesting value is `turn-on-font-lock'." - (interactive) - (kill-all-local-variables) - (setq major-mode 'landmark-mode - mode-name "Landmark") - (landmark-display-statistics) - (use-local-map landmark-mode-map) - (make-local-variable 'font-lock-defaults) - (setq font-lock-defaults '(landmark-font-lock-keywords t) - buffer-read-only t) - (run-mode-hooks 'landmark-mode-hook)) + (lm-display-statistics) + (setq-local font-lock-defaults '(lm-font-lock-keywords t)) + (setq buffer-read-only t)) ;;;_ + THE SCORE TABLE. diff --git a/lisp/play/mpuz.el b/lisp/play/mpuz.el index e4e627a5293..f4c26bfc6c4 100644 --- a/lisp/play/mpuz.el +++ b/lisp/play/mpuz.el @@ -94,7 +94,9 @@ The value t means never ding, and `error' means only ding on wrong input." map) "Local keymap to use in Mult Puzzle.") -(defun mpuz-mode () + + +(define-derived-mode mpuz-mode fundamental-mode "Mult Puzzle" "Multiplication puzzle mode. You have to guess which letters stand for which digits in the @@ -106,13 +108,7 @@ then the digit. Thus, to guess that A=3, type `A 3'. To leave the game to do other editing work, just switch buffers. Then you may resume the game with M-x mpuz. You may abort a game by typing \\\\[mpuz-offer-abort]." - (interactive) - (kill-all-local-variables) - (setq major-mode 'mpuz-mode - mode-name "Mult Puzzle" - tab-width 30) - (use-local-map mpuz-mode-map) - (run-mode-hooks 'mpuz-mode-hook)) + (setq tab-width 30)) ;; Some variables for statistics diff --git a/lisp/play/snake.el b/lisp/play/snake.el index 85acfb116d2..4c110914298 100644 --- a/lisp/play/snake.el +++ b/lisp/play/snake.el @@ -353,21 +353,13 @@ Argument SNAKE-BUFFER is the name of the buffer." (put 'snake-mode 'mode-class 'special) -(defun snake-mode () - "A mode for playing Snake. - -Snake mode keybindings: - \\{snake-mode-map} -" - (kill-all-local-variables) +(define-derived-mode snake-mode special-mode "Snake" + "A mode for playing Snake." (add-hook 'kill-buffer-hook 'gamegrid-kill-timer nil t) (use-local-map snake-null-map) - (setq major-mode 'snake-mode) - (setq mode-name "Snake") - (unless (featurep 'emacs) (setq mode-popup-menu '("Snake Commands" @@ -382,9 +374,7 @@ Snake mode keybindings: (setq gamegrid-use-glyphs snake-use-glyphs-flag) (setq gamegrid-use-color snake-use-color-flag) - (gamegrid-init (snake-display-options)) - - (run-mode-hooks 'snake-mode-hook)) + (gamegrid-init (snake-display-options))) ;;;###autoload (defun snake () From ebb99847285bca912e04f79dd3d9dcc84769ccf6 Mon Sep 17 00:00:00 2001 From: Barry O'Reilly Date: Wed, 11 Sep 2013 01:03:23 -0400 Subject: [PATCH 059/321] Change comparison functions =, <, >, <=, >= to take many arguments. * src/data.c: Change comparison functions' interface and implementation * src/lisp.h: Make arithcompare available for efficient two arg comparisons * src/bytecode.c: Use arithcompare * src/fileio.c: Use new interface * test/automated/data-tests.el: New tests for comparison functions * etc/NEWS --- etc/NEWS | 2 + src/bytecode.c | 8 ++-- src/data.c | 76 ++++++++++++++++++++---------------- src/fileio.c | 3 +- src/lisp.h | 10 +++++ test/automated/data-tests.el | 75 +++++++++++++++++++++++++++++++++++ 6 files changed, 136 insertions(+), 38 deletions(-) create mode 100644 test/automated/data-tests.el diff --git a/etc/NEWS b/etc/NEWS index 78f99dbc621..929c86a7ba6 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -625,6 +625,8 @@ actually using interpreter-mode-alist for something. * Lisp Changes in Emacs 24.4 +** Comparison functions =, <, >, <=, >= now take many arguments. + ** The second argument of `eval' can now be a lexical-environment. ** `with-demoted-errors' takes an additional argument `format'. diff --git a/src/bytecode.c b/src/bytecode.c index e0e7b22ea13..3ac8b452fbe 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -1367,7 +1367,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, Lisp_Object v1; BEFORE_POTENTIAL_GC (); v1 = POP; - TOP = Fgtr (TOP, v1); + TOP = arithcompare (TOP, v1, ARITH_GRTR); AFTER_POTENTIAL_GC (); NEXT; } @@ -1377,7 +1377,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, Lisp_Object v1; BEFORE_POTENTIAL_GC (); v1 = POP; - TOP = Flss (TOP, v1); + TOP = arithcompare (TOP, v1, ARITH_LESS); AFTER_POTENTIAL_GC (); NEXT; } @@ -1387,7 +1387,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, Lisp_Object v1; BEFORE_POTENTIAL_GC (); v1 = POP; - TOP = Fleq (TOP, v1); + TOP = arithcompare (TOP, v1, ARITH_LESS_OR_EQUAL); AFTER_POTENTIAL_GC (); NEXT; } @@ -1397,7 +1397,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, Lisp_Object v1; BEFORE_POTENTIAL_GC (); v1 = POP; - TOP = Fgeq (TOP, v1); + TOP = arithcompare (TOP, v1, ARITH_GRTR_OR_EQUAL); AFTER_POTENTIAL_GC (); NEXT; } diff --git a/src/data.c b/src/data.c index 9f4bd1f1c02..7f28028f604 100644 --- a/src/data.c +++ b/src/data.c @@ -2255,10 +2255,8 @@ bool-vector. IDX starts at 0. */) /* Arithmetic functions */ -enum comparison { equal, notequal, less, grtr, less_or_equal, grtr_or_equal }; - -static Lisp_Object -arithcompare (Lisp_Object num1, Lisp_Object num2, enum comparison comparison) +Lisp_Object +arithcompare (Lisp_Object num1, Lisp_Object num2, enum Arith_Comparison comparison) { double f1 = 0, f2 = 0; bool floatp = 0; @@ -2275,32 +2273,32 @@ arithcompare (Lisp_Object num1, Lisp_Object num2, enum comparison comparison) switch (comparison) { - case equal: + case ARITH_EQUAL: if (floatp ? f1 == f2 : XINT (num1) == XINT (num2)) return Qt; return Qnil; - case notequal: + case ARITH_NOTEQUAL: if (floatp ? f1 != f2 : XINT (num1) != XINT (num2)) return Qt; return Qnil; - case less: + case ARITH_LESS: if (floatp ? f1 < f2 : XINT (num1) < XINT (num2)) return Qt; return Qnil; - case less_or_equal: + case ARITH_LESS_OR_EQUAL: if (floatp ? f1 <= f2 : XINT (num1) <= XINT (num2)) return Qt; return Qnil; - case grtr: + case ARITH_GRTR: if (floatp ? f1 > f2 : XINT (num1) > XINT (num2)) return Qt; return Qnil; - case grtr_or_equal: + case ARITH_GRTR_OR_EQUAL: if (floatp ? f1 >= f2 : XINT (num1) >= XINT (num2)) return Qt; return Qnil; @@ -2310,48 +2308,60 @@ arithcompare (Lisp_Object num1, Lisp_Object num2, enum comparison comparison) } } -DEFUN ("=", Feqlsign, Seqlsign, 2, 2, 0, - doc: /* Return t if two args, both numbers or markers, are equal. */) - (register Lisp_Object num1, Lisp_Object num2) +static Lisp_Object +arithcompare_driver (ptrdiff_t nargs, Lisp_Object *args, + enum Arith_Comparison comparison) { - return arithcompare (num1, num2, equal); + for (ptrdiff_t argnum = 1; argnum < nargs; ++argnum) + { + if (EQ (Qnil, arithcompare (args[argnum-1], args[argnum], comparison))) + return Qnil; + } + return Qt; } -DEFUN ("<", Flss, Slss, 2, 2, 0, - doc: /* Return t if first arg is less than second arg. Both must be numbers or markers. */) - (register Lisp_Object num1, Lisp_Object num2) +DEFUN ("=", Feqlsign, Seqlsign, 1, MANY, 0, + doc: /* Return t if args, all numbers or markers, are equal. */) + (ptrdiff_t nargs, Lisp_Object *args) { - return arithcompare (num1, num2, less); + return arithcompare_driver (nargs, args, ARITH_EQUAL); } -DEFUN (">", Fgtr, Sgtr, 2, 2, 0, - doc: /* Return t if first arg is greater than second arg. Both must be numbers or markers. */) - (register Lisp_Object num1, Lisp_Object num2) +DEFUN ("<", Flss, Slss, 1, MANY, 0, + doc: /* Return t if each arg is less than the next arg. All must be numbers or markers. */) + (ptrdiff_t nargs, Lisp_Object *args) { - return arithcompare (num1, num2, grtr); + return arithcompare_driver (nargs, args, ARITH_LESS); } -DEFUN ("<=", Fleq, Sleq, 2, 2, 0, - doc: /* Return t if first arg is less than or equal to second arg. -Both must be numbers or markers. */) - (register Lisp_Object num1, Lisp_Object num2) +DEFUN (">", Fgtr, Sgtr, 1, MANY, 0, + doc: /* Return t if each arg is greater than the next arg. All must be numbers or markers. */) + (ptrdiff_t nargs, Lisp_Object *args) { - return arithcompare (num1, num2, less_or_equal); + return arithcompare_driver (nargs, args, ARITH_GRTR); } -DEFUN (">=", Fgeq, Sgeq, 2, 2, 0, - doc: /* Return t if first arg is greater than or equal to second arg. -Both must be numbers or markers. */) - (register Lisp_Object num1, Lisp_Object num2) +DEFUN ("<=", Fleq, Sleq, 1, MANY, 0, + doc: /* Return t if each arg is less than or equal to the next arg. +All must be numbers or markers. */) + (ptrdiff_t nargs, Lisp_Object *args) { - return arithcompare (num1, num2, grtr_or_equal); + return arithcompare_driver (nargs, args, ARITH_LESS_OR_EQUAL); +} + +DEFUN (">=", Fgeq, Sgeq, 1, MANY, 0, + doc: /* Return t if each arg is greater than or equal to the next arg. +All must be numbers or markers. */) + (ptrdiff_t nargs, Lisp_Object *args) +{ + return arithcompare_driver (nargs, args, ARITH_GRTR_OR_EQUAL); } DEFUN ("/=", Fneq, Sneq, 2, 2, 0, doc: /* Return t if first arg is not equal to second arg. Both must be numbers or markers. */) (register Lisp_Object num1, Lisp_Object num2) { - return arithcompare (num1, num2, notequal); + return arithcompare (num1, num2, ARITH_NOTEQUAL); } DEFUN ("zerop", Fzerop, Szerop, 1, 1, 0, diff --git a/src/fileio.c b/src/fileio.c index 0e6113f349d..1a2bdfa237c 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -5121,7 +5121,8 @@ DEFUN ("car-less-than-car", Fcar_less_than_car, Scar_less_than_car, 2, 2, 0, doc: /* Return t if (car A) is numerically less than (car B). */) (Lisp_Object a, Lisp_Object b) { - return Flss (Fcar (a), Fcar (b)); + Lisp_Object args[2] = { Fcar (a), Fcar (b), }; + return Flss (2, args); } /* Build the complete list of annotations appropriate for writing out diff --git a/src/lisp.h b/src/lisp.h index 38b538d9bc2..2b1af1faa19 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3160,6 +3160,16 @@ EXFUN (Fbyteorder, 0) ATTRIBUTE_CONST; /* Defined in data.c. */ extern Lisp_Object indirect_function (Lisp_Object); extern Lisp_Object find_symbol_value (Lisp_Object); +enum Arith_Comparison { + ARITH_EQUAL, + ARITH_NOTEQUAL, + ARITH_LESS, + ARITH_GRTR, + ARITH_LESS_OR_EQUAL, + ARITH_GRTR_OR_EQUAL +}; +extern Lisp_Object arithcompare (Lisp_Object num1, Lisp_Object num2, + enum Arith_Comparison comparison); /* Convert the integer I to an Emacs representation, either the integer itself, or a cons of two or three integers, or if all else fails a float. diff --git a/test/automated/data-tests.el b/test/automated/data-tests.el new file mode 100644 index 00000000000..2298fa3fe71 --- /dev/null +++ b/test/automated/data-tests.el @@ -0,0 +1,75 @@ +;;; data-tests.el --- tests for src/data.c + +;; Copyright (C) 2013 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; This program is free software: you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation, either version 3 of the +;; License, or (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see `http://www.gnu.org/licenses/'. + +;;; Commentary: + +;;; Code: + +(ert-deftest data-tests-= () + (should-error (=)) + (should (= 1)) + (should (= 2 2)) + (should (= 9 9 9 9 9 9 9 9 9)) + (should-not (apply #'= '(3 8 3))) + (should-error (= 9 9 'foo)) + ;; Short circuits before getting to bad arg + (should-not (= 9 8 'foo))) + +(ert-deftest data-tests-< () + (should-error (<)) + (should (< 1)) + (should (< 2 3)) + (should (< -6 -1 0 2 3 4 8 9 999)) + (should-not (apply #'< '(3 8 3))) + (should-error (< 9 10 'foo)) + ;; Short circuits before getting to bad arg + (should-not (< 9 8 'foo))) + +(ert-deftest data-tests-> () + (should-error (>)) + (should (> 1)) + (should (> 3 2)) + (should (> 6 1 0 -2 -3 -4 -8 -9 -999)) + (should-not (apply #'> '(3 8 3))) + (should-error (> 9 8 'foo)) + ;; Short circuits before getting to bad arg + (should-not (> 8 9 'foo))) + +(ert-deftest data-tests-<= () + (should-error (<=)) + (should (<= 1)) + (should (<= 2 3)) + (should (<= -6 -1 -1 0 0 0 2 3 4 8 999)) + (should-not (apply #'<= '(3 8 3 3))) + (should-error (<= 9 10 'foo)) + ;; Short circuits before getting to bad arg + (should-not (<= 9 8 'foo))) + +(ert-deftest data-tests->= () + (should-error (>=)) + (should (>= 1)) + (should (>= 3 2)) + (should (>= 666 1 0 0 -2 -3 -3 -3 -4 -8 -8 -9 -999)) + (should-not (apply #'>= '(3 8 3))) + (should-error (>= 9 8 'foo)) + ;; Short circuits before getting to bad arg + (should-not (>= 8 9 'foo))) + +;;; data-tests.el ends here + From cb55925848ce8359ac695b69bf7b278024c304c0 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 10 Sep 2013 23:33:28 -0700 Subject: [PATCH 060/321] Comment formatting --- lisp/progmodes/cperl-mode.el | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 1eea6972707..cc6c8234dd2 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -412,15 +412,15 @@ Affects: `cperl-font-lock', `cperl-electric-lbrace-space', "use cperl-vc-rcs-header or cperl-vc-sccs-header instead." "22.1") -;;; (defcustom cperl-clobber-mode-lists -;;; (not -;;; (and -;;; (boundp 'interpreter-mode-alist) -;;; (assoc "miniperl" interpreter-mode-alist) -;;; (assoc "\\.\\([pP][Llm]\\|al\\)$" auto-mode-alist))) -;;; "*Whether to install us into `interpreter-' and `extension' mode lists." -;;; :type 'boolean -;;; :group 'cperl) +;; (defcustom cperl-clobber-mode-lists +;; (not +;; (and +;; (boundp 'interpreter-mode-alist) +;; (assoc "miniperl" interpreter-mode-alist) +;; (assoc "\\.\\([pP][Llm]\\|al\\)$" auto-mode-alist))) +;; "*Whether to install us into `interpreter-' and `extension' mode lists." +;; :type 'boolean +;; :group 'cperl) (defcustom cperl-info-on-command-no-prompt nil "*Not-nil (and non-null) means not to prompt on C-h f. From 2a08047aed0017cc2b639e189fc3b5d41c46fcbd Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 10 Sep 2013 23:44:35 -0700 Subject: [PATCH 061/321] Improve previous interpreter-mode-alist change * lisp/files.el (interpreter-mode-alist): Remove \\` \\' parts. (set-auto-mode): Don't regexp-quote elements. * lisp/progmodes/python.el (interpreter-mode-alist): Remove \\` \\'. * lisp/progmodes/cc-mode.el (interpreter-mode-alist): * lisp/progmodes/ruby-mode.el (interpreter-mode-alist): Revert previous change. * etc/NEWS: Update. --- etc/NEWS | 8 ++--- lisp/ChangeLog | 9 +++++ lisp/files.el | 65 +++++++++++++++---------------------- lisp/progmodes/cc-mode.el | 7 ++-- lisp/progmodes/python.el | 2 +- lisp/progmodes/ruby-mode.el | 3 +- 6 files changed, 47 insertions(+), 47 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 929c86a7ba6..a5da8eaa893 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -616,11 +616,9 @@ Formerly it returned a list (-1 LOW USEC PSEC), but this was ambiguous in the presence of files with negative time stamps. ** The cars of the elements in `interpreter-mode-alist' are now treated -as regexps rather than literal strings. For the time being, any -element whose car does not start with "\\" is still treated as a -literal string, so this change should not cause any incompatibilities -if you have code that just adds elements to the list, only if you are -actually using interpreter-mode-alist for something. +as regexps rather than literal strings. Technically this is an +incompatible change, but unless you are using interpreter-mode-alist +for something (not just adding elements to it), it ought not to affect you. * Lisp Changes in Emacs 24.4 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e1f1aaa1888..89610870f10 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2013-09-11 Glenn Morris + + * files.el (interpreter-mode-alist): Remove \\` \\' parts. + (set-auto-mode): Don't regexp-quote elements. + * progmodes/python.el (interpreter-mode-alist): Remove \\` \\'. + * progmodes/cc-mode.el (interpreter-mode-alist): + * progmodes/ruby-mode.el (interpreter-mode-alist): + Revert previous change. + 2013-09-11 Stefan Monnier * play/snake.el (snake-mode): diff --git a/lisp/files.el b/lisp/files.el index 2315448c549..5d8fbda6154 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2447,43 +2447,34 @@ and `magic-mode-alist', which determines modes based on file contents.") (mapcar (lambda (l) (cons (purecopy (car l)) (cdr l))) - '(("\\`\\(mini\\)?perl5?\\'" . perl-mode) - ("\\`wishx?\\'" . tcl-mode) - ("\\`tcl\\(sh\\)?\\'" . tcl-mode) - ("\\`expect\\'" . tcl-mode) - ("\\`scm\\'" . scheme-mode) - ("\\`[acjkwz]sh\\'" . sh-mode) - ("\\`bash2?\\'" . sh-mode) - ("\\`dtksh\\'" . sh-mode) - ("\\`es\\'" . sh-mode) - ("\\`itcsh\\'" . sh-mode) - ("\\`oash\\'" . sh-mode) - ("\\`pdksh\\'" . sh-mode) - ("\\`rbash\\'" . sh-mode) - ("\\`rc\\'" . sh-mode) - ("\\`rpm\\'" . sh-mode) - ("\\`sh5?\\'" . sh-mode) - ("\\`tcsh\\'" . sh-mode) - ("\\`wksh\\'" . sh-mode) - ("\\`tail\\'" . text-mode) - ("\\`more\\'" . text-mode) - ("\\`less\\'" . text-mode) - ("\\`pg\\'" . text-mode) - ("\\`make\\'" . makefile-gmake-mode) ; Debian uses this - ("\\`guile\\'" . scheme-mode) - ("\\`clisp\\'" . lisp-mode) - ("\\`emacs\\'" . emacs-lisp-mode))) + '(("\\(mini\\)?perl5?" . perl-mode) + ("wishx?" . tcl-mode) + ("tcl\\(sh\\)?" . tcl-mode) + ("expect" . tcl-mode) + ("scm" . scheme-mode) + ("[acjkwz]sh" . sh-mode) + ("r?bash2?" . sh-mode) + ("\\(dt\\|pd\\|w\\)ksh" . sh-mode) + ("es" . sh-mode) + ("i?tcsh" . sh-mode) + ("oash" . sh-mode) + ("rc" . sh-mode) + ("rpm" . sh-mode) + ("sh5?" . sh-mode) + ("tail" . text-mode) + ("more" . text-mode) + ("less" . text-mode) + ("pg" . text-mode) + ("make" . makefile-gmake-mode) ; Debian uses this + ("guile" . scheme-mode) + ("clisp" . lisp-mode) + ("emacs" . emacs-lisp-mode))) "Alist mapping interpreter names to major modes. This is used for files whose first lines match `auto-mode-interpreter-regexp'. Each element looks like (REGEXP . MODE). -If REGEXP matches the name (minus any directory part) of the interpreter -specified in the first line of a script, enable major mode MODE. - -Emacs versions earlier than 24.4 treat the car of each element as a -literal string that must match the entire name, rather than a regexp. -For backwards compatibility, any REGEXP that does not begin with \"\\\\\" -continues to be treated in this way. This behavior may be removed in -future and should not be relied upon. +If \\\\`REGEXP\\\\' matches the name (minus any directory part) of +the interpreter specified in the first line of a script, enable +major mode MODE. See also `auto-mode-alist'.") @@ -2687,13 +2678,11 @@ we don't actually set it to the same mode the buffer already has." ;; same time. (setq done (assoc-default (file-name-nondirectory mode) - ;; Backwards compat: if car of i-m-alist does not start - ;; with "\\", treat as literal string. (mapcar (lambda (e) - (if (string-match-p "\\`\\\\" (car e)) + (if (string-match-p "\\`\\\\`" (car e)) e (cons - (format "\\`%s\\'" (regexp-quote (car e))) + (format "\\`%s\\'" (car e)) (cdr e)))) interpreter-mode-alist) #'string-match-p)) diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index bffc5b95d25..e977a415d62 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -1555,7 +1555,7 @@ Key bindings: (cons "Pike" (c-lang-const c-mode-menu pike))) ;;;###autoload (add-to-list 'auto-mode-alist '("\\.\\(u?lpc\\|pike\\|pmod\\(\\.in\\)?\\)\\'" . pike-mode)) -;;;###autoload (add-to-list 'interpreter-mode-alist '("\\`pike\\'" . pike-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("pike" . pike-mode)) ;;;###autoload (define-derived-mode pike-mode prog-mode "Pike" @@ -1589,7 +1589,10 @@ Key bindings: ;; Support for AWK ;;;###autoload (add-to-list 'auto-mode-alist '("\\.awk\\'" . awk-mode)) -;;;###autoload (add-to-list 'interpreter-mode-alist '("\\`[gmn]?awk\\'" . awk-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("awk" . awk-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("mawk" . awk-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("nawk" . awk-mode)) +;;;###autoload (add-to-list 'interpreter-mode-alist '("gawk" . awk-mode)) (c-define-abbrev-table 'awk-mode-abbrev-table '(("else" "else" c-electric-continued-statement 0) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 5eecc347f03..5f919bf495f 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -225,7 +225,7 @@ ;;;###autoload (add-to-list 'auto-mode-alist (cons (purecopy "\\.py\\'") 'python-mode)) ;;;###autoload -(add-to-list 'interpreter-mode-alist (cons (purecopy "\\`python[0-9.]*\\'") 'python-mode)) +(add-to-list 'interpreter-mode-alist (cons (purecopy "python[0-9.]*") 'python-mode)) (defgroup python nil "Python Language's flying circus support for Emacs." diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 9dc2c4fb6c9..0f868255589 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1968,7 +1968,8 @@ The variable `ruby-indent-level' controls the amount of indentation. "\\)\\'")) 'ruby-mode)) ;;;###autoload -(add-to-list 'interpreter-mode-alist (cons (purecopy "\\`\\(rbx\\|j?ruby\\(1\\.[89]\\)?\\)\\'") 'ruby-mode)) +(dolist (name (list "ruby" "rbx" "jruby" "ruby1.9" "ruby1.8")) + (add-to-list 'interpreter-mode-alist (cons (purecopy name) 'ruby-mode))) (provide 'ruby-mode) From 53482f41157f37a7f6afb7f19be8fc63b015f6ed Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 11 Sep 2013 11:20:20 +0400 Subject: [PATCH 062/321] Fix last change. * data.c (Feqlsign, Flss, Fgtr, Fleq, Fgeq): Add convenient 'usage' docstring entry to pacify make-docfile. --- src/ChangeLog | 15 +++++++++++++++ src/data.c | 15 ++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e609c38be7e..f51e6a147bf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,18 @@ +2013-09-11 Dmitry Antipov + + Fix last change. + * data.c (Feqlsign, Flss, Fgtr, Fleq, Fgeq): Add convenient + 'usage' docstring entry to pacify make-docfile. + +2013-09-11 Barry O'Reilly + + Change comparison functions =, <, >, <=, >= to take many arguments. + * data.c: Change comparison functions' interface and implementation. + * lisp.h: Make arithcompare available for efficient two arg + comparisons. + * bytecode.c: Use arithcompare. + * fileio.c: Use new interface. + 2013-09-11 Stefan Monnier * keyboard.c (read_char): Don't break immediate_echo (bug#15332). diff --git a/src/data.c b/src/data.c index 7f28028f604..51b0266eca1 100644 --- a/src/data.c +++ b/src/data.c @@ -2321,21 +2321,24 @@ arithcompare_driver (ptrdiff_t nargs, Lisp_Object *args, } DEFUN ("=", Feqlsign, Seqlsign, 1, MANY, 0, - doc: /* Return t if args, all numbers or markers, are equal. */) + doc: /* Return t if args, all numbers or markers, are equal. +usage: (= NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */) (ptrdiff_t nargs, Lisp_Object *args) { return arithcompare_driver (nargs, args, ARITH_EQUAL); } DEFUN ("<", Flss, Slss, 1, MANY, 0, - doc: /* Return t if each arg is less than the next arg. All must be numbers or markers. */) + doc: /* Return t if each arg is less than the next arg. All must be numbers or markers. +usage: (< NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */) (ptrdiff_t nargs, Lisp_Object *args) { return arithcompare_driver (nargs, args, ARITH_LESS); } DEFUN (">", Fgtr, Sgtr, 1, MANY, 0, - doc: /* Return t if each arg is greater than the next arg. All must be numbers or markers. */) + doc: /* Return t if each arg is greater than the next arg. All must be numbers or markers. +usage: (> NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */) (ptrdiff_t nargs, Lisp_Object *args) { return arithcompare_driver (nargs, args, ARITH_GRTR); @@ -2343,7 +2346,8 @@ DEFUN (">", Fgtr, Sgtr, 1, MANY, 0, DEFUN ("<=", Fleq, Sleq, 1, MANY, 0, doc: /* Return t if each arg is less than or equal to the next arg. -All must be numbers or markers. */) +All must be numbers or markers. +usage: (<= NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */) (ptrdiff_t nargs, Lisp_Object *args) { return arithcompare_driver (nargs, args, ARITH_LESS_OR_EQUAL); @@ -2351,7 +2355,8 @@ All must be numbers or markers. */) DEFUN (">=", Fgeq, Sgeq, 1, MANY, 0, doc: /* Return t if each arg is greater than or equal to the next arg. -All must be numbers or markers. */) +All must be numbers or markers. +usage: (= NUMBER-OR-MARKER &rest NUMBERS-OR-MARKERS) */) (ptrdiff_t nargs, Lisp_Object *args) { return arithcompare_driver (nargs, args, ARITH_GRTR_OR_EQUAL); From 73f82c7e8eb6a009248f4ea6360b2182d06f55e2 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 11 Sep 2013 01:24:05 -0700 Subject: [PATCH 063/321] Fix corruption with multiple emacsclient -t instances. This bug was introduced by my 2013-08-26 patch, which incorrectly assumed that the terminfo implementation doesn't use termcap buffers. * term.c (init_tty) [TERMINFO]: Remove optimization, as these buffers apparently are used after all. * termchar.h (TERMCAP_BUFFER_SIZE) [TERMINFO]: Define here too. (struct tty_display_info): Define members termcap_term_buffer and termcap_strings_buffer even if TERMINFO. Fixes: debbugs:15222 --- src/ChangeLog | 11 +++++++++++ src/term.c | 10 ---------- src/termchar.h | 4 ---- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index f51e6a147bf..21cb47eeeaa 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2013-09-11 Paul Eggert + + Fix corruption with multiple emacsclient -t instances (Bug#15222). + This bug was introduced by my 2013-08-26 patch, which incorrectly + assumed that the terminfo implementation doesn't use termcap buffers. + * term.c (init_tty) [TERMINFO]: Remove optimization, as + these buffers apparently are used after all. + * termchar.h (TERMCAP_BUFFER_SIZE) [TERMINFO]: Define here too. + (struct tty_display_info): Define members termcap_term_buffer and + termcap_strings_buffer even if TERMINFO. + 2013-09-11 Dmitry Antipov Fix last change. diff --git a/src/term.c b/src/term.c index 0270c1eefa6..fd5ea5a1b8d 100644 --- a/src/term.c +++ b/src/term.c @@ -2917,12 +2917,8 @@ dissociate_if_controlling_tty (int fd) struct terminal * init_tty (const char *name, const char *terminal_type, bool must_succeed) { -#ifdef TERMINFO - char **address = 0; -#else char *area; char **address = &area; -#endif int status; struct tty_display_info *tty = NULL; struct terminal *terminal = NULL; @@ -3013,13 +3009,9 @@ init_tty (const char *name, const char *terminal_type, bool must_succeed) /* On some systems, tgetent tries to access the controlling terminal. */ block_tty_out_signal (); -#ifdef TERMINFO - status = tgetent (0, terminal_type); -#else status = tgetent (tty->termcap_term_buffer, terminal_type); if (tty->termcap_term_buffer[TERMCAP_BUFFER_SIZE - 1]) emacs_abort (); -#endif unblock_tty_out_signal (); if (status < 0) @@ -3050,9 +3042,7 @@ use the Bourne shell command `TERM=... export TERM' (C-shell:\n\ terminal_type); } -#ifndef TERMINFO area = tty->termcap_strings_buffer; -#endif tty->TS_ins_line = tgetstr ("al", address); tty->TS_ins_multi_lines = tgetstr ("AL", address); tty->TS_bell = tgetstr ("bl", address); diff --git a/src/termchar.h b/src/termchar.h index 687f7fbd119..11cea34df23 100644 --- a/src/termchar.h +++ b/src/termchar.h @@ -30,9 +30,7 @@ struct tty_output /* There is nothing else here at the moment... */ }; -#ifndef TERMINFO enum { TERMCAP_BUFFER_SIZE = 4096 }; -#endif /* Parameters that are shared between frames on the same tty device. */ @@ -78,7 +76,6 @@ struct tty_display_info mouse-face. */ Mouse_HLInfo mouse_highlight; -#ifndef TERMINFO /* Buffer used internally by termcap (see tgetent in the Termcap manual). Only init_tty should use this. */ char termcap_term_buffer[TERMCAP_BUFFER_SIZE]; @@ -86,7 +83,6 @@ struct tty_display_info /* Buffer storing terminal description strings (see tgetstr in the Termcap manual). Only init_tty should use this. */ char termcap_strings_buffer[TERMCAP_BUFFER_SIZE]; -#endif /* Strings, numbers and flags taken from the termcap entry. */ From 742516e02048d3bbfba4e6e13dd19afa097bbd3b Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 11 Sep 2013 12:56:33 +0400 Subject: [PATCH 064/321] Ifdef away frame tool bar code when it is not really used. * frame.h (struct frame) [HAVE_WINDOW_SYSTEM && !USE_GTK && !HAVE_NS]: Move tool_bar_window, desired_tool_bar_string, current_tool_bar_string and minimize_tool_bar_window_p under the above. (fset_current_tool_bar_string, fset_desired_tool_bar_string) (fset_tool_bar_window): Likewise. * dispnew.c (clear_current_matrices, clear_desired_matrices) (adjust_frame_glyphs_for_window_redisplay, free_glyphs, update_frame) (change_frame_size_1): * window.c (window_from_coordinates, Frecenter): Adjust users. * window.h (WINDOW_TOOL_BAR_P): Define to zero when frame tool bar code is not really used. * xdisp.c (build_desired_tool_bar_string, display_tool_bar_line) (tool_bar_lines_needed, MAX_FRAME_TOOL_BAR_HEIGHT, tool_bar_item_info) (get_tool_bar_item, handle_tool_bar_click, note_tool_bar_highlight) [!USE_GTK && !HAVE_NS]: Define as such. (Ftool_bar_lines_needed, redisplay_tool_bar, show_mouse_face) (note_mouse_highlight, expose_frame): * xfns.c (x_set_tool_bar_lines): * xterm.c (handle_one_xevent): Adjust users. --- src/ChangeLog | 23 +++++++++++++++++++++++ src/dispnew.c | 19 +++++++++++++------ src/frame.h | 34 ++++++++++++++++++++-------------- src/window.c | 6 ++++-- src/window.h | 5 ++++- src/xdisp.c | 36 ++++++++++++++++++++++++------------ src/xfns.c | 11 +++++++---- src/xterm.c | 13 +++++++------ 8 files changed, 102 insertions(+), 45 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 21cb47eeeaa..83e5dbcdaff 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,26 @@ +2013-09-11 Dmitry Antipov + + Ifdef away frame tool bar code when it is not really used. + * frame.h (struct frame) [HAVE_WINDOW_SYSTEM && !USE_GTK && !HAVE_NS]: + Move tool_bar_window, desired_tool_bar_string, current_tool_bar_string + and minimize_tool_bar_window_p under the above. + (fset_current_tool_bar_string, fset_desired_tool_bar_string) + (fset_tool_bar_window): Likewise. + * dispnew.c (clear_current_matrices, clear_desired_matrices) + (adjust_frame_glyphs_for_window_redisplay, free_glyphs, update_frame) + (change_frame_size_1): + * window.c (window_from_coordinates, Frecenter): Adjust users. + * window.h (WINDOW_TOOL_BAR_P): Define to zero when frame tool bar + code is not really used. + * xdisp.c (build_desired_tool_bar_string, display_tool_bar_line) + (tool_bar_lines_needed, MAX_FRAME_TOOL_BAR_HEIGHT, tool_bar_item_info) + (get_tool_bar_item, handle_tool_bar_click, note_tool_bar_highlight) + [!USE_GTK && !HAVE_NS]: Define as such. + (Ftool_bar_lines_needed, redisplay_tool_bar, show_mouse_face) + (note_mouse_highlight, expose_frame): + * xfns.c (x_set_tool_bar_lines): + * xterm.c (handle_one_xevent): Adjust users. + 2013-09-11 Paul Eggert Fix corruption with multiple emacsclient -t instances (Bug#15222). diff --git a/src/dispnew.c b/src/dispnew.c index a42b3da5fc5..2b16e881c80 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -783,9 +783,11 @@ clear_current_matrices (register struct frame *f) clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix); #endif +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) /* Clear the matrix of the tool-bar window, if any. */ if (WINDOWP (f->tool_bar_window)) clear_glyph_matrix (XWINDOW (f->tool_bar_window)->current_matrix); +#endif /* Clear current window matrices. */ eassert (WINDOWP (FRAME_ROOT_WINDOW (f))); @@ -806,8 +808,10 @@ clear_desired_matrices (register struct frame *f) clear_glyph_matrix (XWINDOW (f->menu_bar_window)->desired_matrix); #endif +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) if (WINDOWP (f->tool_bar_window)) clear_glyph_matrix (XWINDOW (f->tool_bar_window)->desired_matrix); +#endif /* Do it for window matrices. */ eassert (WINDOWP (FRAME_ROOT_WINDOW (f))); @@ -2041,10 +2045,9 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f) /* Allocate/reallocate window matrices. */ allocate_matrices_for_window_redisplay (XWINDOW (FRAME_ROOT_WINDOW (f))); -#ifdef HAVE_X_WINDOWS +#if defined (HAVE_X_WINDOWS) && ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) /* Allocate/ reallocate matrices of the dummy window used to display the menu bar under X when no X toolkit support is available. */ -#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) { /* Allocate a dummy window if not already done. */ struct window *w; @@ -2068,10 +2071,9 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f) w->total_cols = FRAME_TOTAL_COLS (f); allocate_matrices_for_window_redisplay (w); } -#endif /* not USE_X_TOOLKIT && not USE_GTK */ -#endif /* HAVE_X_WINDOWS */ +#endif -#ifndef USE_GTK +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) { /* Allocate/ reallocate matrices of the tool bar window. If we don't have a tool bar window yet, make one. */ @@ -2145,6 +2147,7 @@ free_glyphs (struct frame *f) } #endif +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) /* Free the tool bar window and its glyph matrices. */ if (!NILP (f->tool_bar_window)) { @@ -2154,6 +2157,7 @@ free_glyphs (struct frame *f) w->desired_matrix = w->current_matrix = NULL; fset_tool_bar_window (f, Qnil); } +#endif /* Release frame glyph matrices. Reset fields to zero in case we are called a second time. */ @@ -3036,6 +3040,7 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p) update_window (XWINDOW (f->menu_bar_window), 1); #endif +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) /* Update the tool-bar window, if present. */ if (WINDOWP (f->tool_bar_window)) { @@ -3056,7 +3061,7 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p) fset_desired_tool_bar_string (f, tem); } } - +#endif /* Update windows. */ paused_p = update_window_tree (root_window, force_p); @@ -5488,8 +5493,10 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth, if ((FRAME_TERMCAP_P (f) && !pretend) || FRAME_MSDOS_P (f)) FrameCols (FRAME_TTY (f)) = newwidth; +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) if (WINDOWP (f->tool_bar_window)) XWINDOW (f->tool_bar_window)->total_cols = newwidth; +#endif } FRAME_LINES (f) = newheight; diff --git a/src/frame.h b/src/frame.h index 87e218ee938..3aea0cfa27c 100644 --- a/src/frame.h +++ b/src/frame.h @@ -145,9 +145,15 @@ struct frame Lisp_Object menu_bar_window; #endif +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) /* A window used to display the tool-bar of a frame. */ Lisp_Object tool_bar_window; + /* Desired and current contents displayed in that window. */ + Lisp_Object desired_tool_bar_string; + Lisp_Object current_tool_bar_string; +#endif + /* Desired and current tool-bar items. */ Lisp_Object tool_bar_items; @@ -155,10 +161,6 @@ struct frame tool bar only supports top. */ Lisp_Object tool_bar_position; - /* Desired and current contents displayed in tool_bar_window. */ - Lisp_Object desired_tool_bar_string; - Lisp_Object current_tool_bar_string; - /* Beyond here, there should be no more Lisp_Object components. */ /* Cache of realized faces. */ @@ -197,9 +199,11 @@ struct frame /* Set to non-zero when current redisplay has updated frame. */ unsigned updated_p : 1; +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) /* Set to non-zero to minimize tool-bar height even when auto-resize-tool-bar is set to grow-only. */ unsigned minimize_tool_bar_window_p : 1; +#endif #if defined (USE_GTK) || defined (HAVE_NS) /* Nonzero means using a tool bar that comes from the toolkit. */ @@ -455,16 +459,6 @@ fset_condemned_scroll_bars (struct frame *f, Lisp_Object val) f->condemned_scroll_bars = val; } FRAME_INLINE void -fset_current_tool_bar_string (struct frame *f, Lisp_Object val) -{ - f->current_tool_bar_string = val; -} -FRAME_INLINE void -fset_desired_tool_bar_string (struct frame *f, Lisp_Object val) -{ - f->desired_tool_bar_string = val; -} -FRAME_INLINE void fset_face_alist (struct frame *f, Lisp_Object val) { f->face_alist = val; @@ -536,11 +530,23 @@ fset_tool_bar_position (struct frame *f, Lisp_Object val) { f->tool_bar_position = val; } +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) FRAME_INLINE void fset_tool_bar_window (struct frame *f, Lisp_Object val) { f->tool_bar_window = val; } +FRAME_INLINE void +fset_current_tool_bar_string (struct frame *f, Lisp_Object val) +{ + f->current_tool_bar_string = val; +} +FRAME_INLINE void +fset_desired_tool_bar_string (struct frame *f, Lisp_Object val) +{ + f->desired_tool_bar_string = val; +} +#endif /* HAVE_WINDOW_SYSTEM && !USE_GTK && !HAVE_NS */ #define NUMVAL(X) ((INTEGERP (X) || FLOATP (X)) ? XFLOATINT (X) : -1) diff --git a/src/window.c b/src/window.c index 6a52ed7e166..677cb991025 100644 --- a/src/window.c +++ b/src/window.c @@ -1379,6 +1379,7 @@ window_from_coordinates (struct frame *f, int x, int y, cw.window = &window, cw.x = x, cw.y = y; cw.part = part; foreach_window (f, check_window_containing, &cw); +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) /* If not found above, see if it's in the tool bar window, if a tool bar exists. */ if (NILP (window) @@ -1391,6 +1392,7 @@ window_from_coordinates (struct frame *f, int x, int y, *part = ON_TEXT; window = f->tool_bar_window; } +#endif return window; } @@ -5112,9 +5114,9 @@ and redisplay normally--don't erase and redraw the frame. */) /* Invalidate pixel data calculated for all compositions. */ for (i = 0; i < n_compositions; i++) composition_table[i]->font = NULL; - +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) WINDOW_XFRAME (w)->minimize_tool_bar_window_p = 1; - +#endif Fredraw_frame (WINDOW_FRAME (w)); SET_FRAME_GARBAGED (WINDOW_XFRAME (w)); } diff --git a/src/window.h b/src/window.h index f5ae81149b3..a419bf7e7f0 100644 --- a/src/window.h +++ b/src/window.h @@ -525,10 +525,13 @@ wset_next_buffers (struct window *w, Lisp_Object val) #endif /* 1 if W is a tool bar window. */ - +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) #define WINDOW_TOOL_BAR_P(W) \ (WINDOWP (WINDOW_XFRAME (W)->tool_bar_window) \ && (W) == XWINDOW (WINDOW_XFRAME (W)->tool_bar_window)) +#else +#define WINDOW_TOOL_BAR_P(W) (0) +#endif /* Return the frame y-position at which window W starts. This includes a header line, if any. */ diff --git a/src/xdisp.c b/src/xdisp.c index df3fa366803..484f95164fb 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -913,11 +913,8 @@ static int in_ellipses_for_invisible_text_p (struct display_pos *, #ifdef HAVE_WINDOW_SYSTEM static void x_consider_frame_title (Lisp_Object); -static int tool_bar_lines_needed (struct frame *, int *); static void update_tool_bar (struct frame *, int); -static void build_desired_tool_bar_string (struct frame *f); static int redisplay_tool_bar (struct frame *); -static void display_tool_bar_line (struct it *, int); static void notice_overwritten_cursor (struct window *, enum glyph_row_area, int, int, int, int); @@ -11566,6 +11563,7 @@ update_tool_bar (struct frame *f, int save_match_data) } } +#if ! defined (USE_GTK) && ! defined (HAVE_NS) /* Set F->desired_tool_bar_string to a Lisp string representing frame F's desired tool-bar contents. F->tool_bar_items must have @@ -11903,6 +11901,7 @@ tool_bar_lines_needed (struct frame *f, int *n_rows) return (it.current_y + FRAME_LINE_HEIGHT (f) - 1) / FRAME_LINE_HEIGHT (f); } +#endif /* !USE_GTK && !HAVE_NS */ DEFUN ("tool-bar-lines-needed", Ftool_bar_lines_needed, Stool_bar_lines_needed, 0, 1, 0, @@ -11910,9 +11909,10 @@ DEFUN ("tool-bar-lines-needed", Ftool_bar_lines_needed, Stool_bar_lines_needed, If FRAME is nil or omitted, use the selected frame. */) (Lisp_Object frame) { + int nlines = 0; +#if ! defined (USE_GTK) && ! defined (HAVE_NS) struct frame *f = decode_any_frame (frame); struct window *w; - int nlines = 0; if (WINDOWP (f->tool_bar_window) && (w = XWINDOW (f->tool_bar_window), @@ -11925,7 +11925,7 @@ If FRAME is nil or omitted, use the selected frame. */) nlines = tool_bar_lines_needed (f, NULL); } } - +#endif return make_number (nlines); } @@ -11936,15 +11936,17 @@ If FRAME is nil or omitted, use the selected frame. */) static int redisplay_tool_bar (struct frame *f) { - struct window *w; - struct it it; - struct glyph_row *row; - #if defined (USE_GTK) || defined (HAVE_NS) + if (FRAME_EXTERNAL_TOOL_BAR (f)) update_frame_tool_bar (f); return 0; -#endif + +#else /* !USE_GTK && !HAVE_NS */ + + struct window *w; + struct it it; + struct glyph_row *row; /* If frame hasn't a tool-bar window or if it is zero-height, don't do anything. This means you must start with tool-bar-lines @@ -12100,8 +12102,11 @@ redisplay_tool_bar (struct frame *f) f->minimize_tool_bar_window_p = 0; return 0; + +#endif /* USE_GTK || HAVE_NS */ } +#if ! defined (USE_GTK) && ! defined (HAVE_NS) /* Get information about the tool-bar item which is displayed in GLYPH on frame F. Return in *PROP_IDX the index where tool-bar item @@ -12345,6 +12350,8 @@ note_tool_bar_highlight (struct frame *f, int x, int y) help_echo_string = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_CAPTION); } +#endif /* !USE_GTK && !HAVE_NS */ + #endif /* HAVE_WINDOW_SYSTEM */ @@ -26691,10 +26698,13 @@ show_mouse_face (Mouse_HLInfo *hlinfo, enum draw_glyphs_face draw) /* Change the mouse cursor. */ if (FRAME_WINDOW_P (f)) { +#if ! defined (USE_GTK) && ! defined (HAVE_NS) if (draw == DRAW_NORMAL_TEXT && !EQ (hlinfo->mouse_face_window, f->tool_bar_window)) FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor); - else if (draw == DRAW_MOUSE_FACE) + else +#endif + if (draw == DRAW_MOUSE_FACE) FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor); else FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->nontext_cursor); @@ -28032,7 +28042,7 @@ note_mouse_highlight (struct frame *f, int x, int y) w = XWINDOW (window); frame_to_window_pixel_xy (w, &x, &y); -#ifdef HAVE_WINDOW_SYSTEM +#if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) /* Handle tool-bar window differently since it doesn't display a buffer. */ if (EQ (window, f->tool_bar_window)) @@ -28945,9 +28955,11 @@ expose_frame (struct frame *f, int x, int y, int w, int h) TRACE ((stderr, "(%d, %d, %d, %d)\n", r.x, r.y, r.width, r.height)); mouse_face_overwritten_p = expose_window_tree (XWINDOW (f->root_window), &r); +#if ! defined (USE_GTK) && ! defined (HAVE_NS) if (WINDOWP (f->tool_bar_window)) mouse_face_overwritten_p |= expose_window (XWINDOW (f->tool_bar_window), &r); +#endif #ifdef HAVE_X_WINDOWS #ifndef MSDOS diff --git a/src/xfns.c b/src/xfns.c index 4e8442dd3a3..1626e2177cb 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -1215,8 +1215,11 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) void x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) { - int delta, nlines, root_height; + int nlines; +#if ! defined (USE_GTK) + int delta, root_height; Lisp_Object root_window; +#endif /* Treat tool bars like menu bars. */ if (FRAME_MINIBUF_ONLY_P (f)) @@ -1229,6 +1232,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) nlines = 0; #ifdef USE_GTK + FRAME_TOOL_BAR_LINES (f) = 0; if (nlines) { @@ -1245,8 +1249,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) FRAME_EXTERNAL_TOOL_BAR (f) = 0; } - return; -#endif +#else /* !USE_GTK */ /* Make sure we redisplay all windows in this frame. */ ++windows_or_buffers_changed; @@ -1301,7 +1304,7 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) } run_window_configuration_change_hook (f); - +#endif /* USE_GTK */ } diff --git a/src/xterm.c b/src/xterm.c index d12173297e8..22671a5f168 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -6225,6 +6225,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, f = x_any_window_to_frame (dpyinfo, event.xkey.window); +#if ! defined (USE_GTK) /* If mouse-highlight is an integer, input clears out mouse highlighting. */ if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight) @@ -6234,6 +6235,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, clear_mouse_face (hlinfo); hlinfo->mouse_face_hidden = 1; } +#endif #if defined USE_MOTIF && defined USE_TOOLKIT_SCROLL_BARS if (f == 0) @@ -6773,6 +6775,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #endif if (f) { +#if ! defined (USE_GTK) /* Is this in the tool-bar? */ if (WINDOWP (f->tool_bar_window) && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window))) @@ -6785,13 +6788,11 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, tool_bar_p = EQ (window, f->tool_bar_window); if (tool_bar_p && event.xbutton.button < 4) - { - handle_tool_bar_click (f, x, y, - event.xbutton.type == ButtonPress, - x_x_to_emacs_modifiers (dpyinfo, - event.xbutton.state)); - } + handle_tool_bar_click + (f, x, y, event.xbutton.type == ButtonPress, + x_x_to_emacs_modifiers (dpyinfo, event.xbutton.state)); } +#endif /* !USE_GTK */ if (!tool_bar_p) #if defined (USE_X_TOOLKIT) || defined (USE_GTK) From 16471df3529174d8a298beace3e94b62e1eea677 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 06:19:47 -0400 Subject: [PATCH 065/321] Auto-commit of loaddefs files. --- lisp/mail/rmail.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index aa244ddae81..bb4801a523d 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -4768,7 +4768,7 @@ If prefix argument REVERSE is non-nil, sorts in reverse order. ;;;*** -;;;### (autoloads nil "rmailsum" "rmailsum.el" "a9b3bbd9b82dd566524a1209b5cdb7dd") +;;;### (autoloads nil "rmailsum" "rmailsum.el" "9005bd5da3e21d1cc173e86fd9fec3c9") ;;; Generated autoloads from rmailsum.el (autoload 'rmail-summary "rmailsum" "\ From f5dacaaec042fe230859469ebd5e307f78448ac4 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 11 Sep 2013 03:24:48 -0700 Subject: [PATCH 066/321] * xdisp.c (Ftool_bar_lines_needed): Declare as 'const' if ifdeffed out, avoiding a GCC warning. --- src/ChangeLog | 5 +++++ src/xdisp.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 83e5dbcdaff..6e527b996dd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-11 Paul Eggert + + * xdisp.c (Ftool_bar_lines_needed): Declare as 'const' if ifdeffed out, + avoiding a GCC warning. + 2013-09-11 Dmitry Antipov Ifdef away frame tool bar code when it is not really used. diff --git a/src/xdisp.c b/src/xdisp.c index 484f95164fb..58316a0667f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11903,6 +11903,10 @@ tool_bar_lines_needed (struct frame *f, int *n_rows) #endif /* !USE_GTK && !HAVE_NS */ +#if defined USE_GTK || defined HAVE_NS +EXFUN (Ftool_bar_lines_needed, 1) ATTRIBUTE_CONST; +#endif + DEFUN ("tool-bar-lines-needed", Ftool_bar_lines_needed, Stool_bar_lines_needed, 0, 1, 0, doc: /* Return the number of lines occupied by the tool bar of FRAME. From 71b28baa2be2a084c45a75383eea7eb93ce79db1 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 11 Sep 2013 08:28:01 -0400 Subject: [PATCH 067/321] * src/insdel.c (insert_from_buffer_1): Don't mark buffer as modified when insert-buffer-substring an empty string. --- src/ChangeLog | 5 +++++ src/insdel.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 6e527b996dd..db08fe6aae8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-11 Stefan Monnier + + * insdel.c (insert_from_buffer_1): Don't mark buffer as modified when + insert-buffer-substring an empty string. + 2013-09-11 Paul Eggert * xdisp.c (Ftool_bar_lines_needed): Declare as 'const' if ifdeffed out, diff --git a/src/insdel.c b/src/insdel.c index f746fd34330..ebd096a2927 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -1057,6 +1057,9 @@ insert_from_buffer_1 (struct buffer *buf, ptrdiff_t outgoing_nbytes = incoming_nbytes; INTERVAL intervals; + if (nchars == 0) + return; + /* Make OUTGOING_NBYTES describe the text as it will be inserted in this buffer. */ From feeff482d80b9f37d083497b2d3a9fec8bc58757 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 11 Sep 2013 08:36:59 -0400 Subject: [PATCH 068/321] * lisp/files.el (set-auto-mode): Simplify a bit further. --- lisp/ChangeLog | 4 ++++ lisp/files.el | 8 +++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 89610870f10..f5c4ee1b19e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-11 Stefan Monnier + + * files.el (set-auto-mode): Simplify a bit further. + 2013-09-11 Glenn Morris * files.el (interpreter-mode-alist): Remove \\` \\' parts. diff --git a/lisp/files.el b/lisp/files.el index 5d8fbda6154..85bbc8596be 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2679,11 +2679,9 @@ we don't actually set it to the same mode the buffer already has." (setq done (assoc-default (file-name-nondirectory mode) (mapcar (lambda (e) - (if (string-match-p "\\`\\\\`" (car e)) - e - (cons - (format "\\`%s\\'" (car e)) - (cdr e)))) + (cons + (format "\\`%s\\'" (car e)) + (cdr e))) interpreter-mode-alist) #'string-match-p)) ;; If we found an interpreter mode to use, invoke it now. From 927eec55795f20df2e4817e4678939a108325012 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 11 Sep 2013 17:35:28 +0400 Subject: [PATCH 069/321] Cleaning up a few X scroll bar bits. * termhooks.h (enum scroll_bar_part): Add scroll_bar_nowhere member. * xterm.h (struct scroll_bar) [USE_TOOLKIT_SCROLL_BARS && USE_LUCID]: New member last_seen_part, going to replace... * xterm.c [USE_TOOLKIT_SCROLL_BARS]: ...global last_scroll_bar_part. (xt_action_hook) [USE_LUCID]: Adjust user. (xm_scroll_callback, xg_scroll_callback): Do not bloat with Lucid-specific scroll bar support. (xaw_jump_callback, xaw_scroll_callback): Prefer enum scroll_par_part to int and adjust to use last_seen_part member. (x_set_toolkit_scroll_bar_thumb) [USE_LUCID]: Adjust user. (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS && USE_LUCID]: Initialize last_seen_part. --- src/ChangeLog | 16 ++++++++++++++++ src/termhooks.h | 1 + src/xterm.c | 30 +++++++++++++++--------------- src/xterm.h | 5 +++++ 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index db08fe6aae8..41e20465d57 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,19 @@ +2013-09-11 Dmitry Antipov + + Cleaning up a few X scroll bar bits. + * termhooks.h (enum scroll_bar_part): Add scroll_bar_nowhere member. + * xterm.h (struct scroll_bar) [USE_TOOLKIT_SCROLL_BARS && USE_LUCID]: + New member last_seen_part, going to replace... + * xterm.c [USE_TOOLKIT_SCROLL_BARS]: ...global last_scroll_bar_part. + (xt_action_hook) [USE_LUCID]: Adjust user. + (xm_scroll_callback, xg_scroll_callback): Do not bloat with + Lucid-specific scroll bar support. + (xaw_jump_callback, xaw_scroll_callback): Prefer enum scroll_par_part + to int and adjust to use last_seen_part member. + (x_set_toolkit_scroll_bar_thumb) [USE_LUCID]: Adjust user. + (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS && USE_LUCID]: + Initialize last_seen_part. + 2013-09-11 Stefan Monnier * insdel.c (insert_from_buffer_1): Don't mark buffer as modified when diff --git a/src/termhooks.h b/src/termhooks.h index 77f98938edb..30ac7957317 100644 --- a/src/termhooks.h +++ b/src/termhooks.h @@ -31,6 +31,7 @@ INLINE_HEADER_BEGIN #endif enum scroll_bar_part { + scroll_bar_nowhere = -1, scroll_bar_above_handle, scroll_bar_handle, scroll_bar_below_handle, diff --git a/src/xterm.c b/src/xterm.c index 22671a5f168..7ad790edd61 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -4081,10 +4081,6 @@ static void x_set_toolkit_scroll_bar_thumb (struct scroll_bar *, static Lisp_Object window_being_scrolled; -/* Last scroll bar part sent in xm_scroll_callback. */ - -static int last_scroll_bar_part; - /* Whether this is an Xaw with arrow-scrollbars. This should imply that movements of 1/20 of the screen size are mapped to up/down. */ @@ -4126,20 +4122,23 @@ xt_action_hook (Widget widget, XtPointer client_data, String action_name, && WINDOWP (window_being_scrolled)) { struct window *w; + struct scroll_bar *bar; x_send_scroll_bar_event (window_being_scrolled, scroll_bar_end_scroll, 0, 0); w = XWINDOW (window_being_scrolled); + bar = XSCROLL_BAR (w->vertical_scroll_bar); - if (XSCROLL_BAR (w->vertical_scroll_bar)->dragging != -1) + if (bar->dragging != -1) { - XSCROLL_BAR (w->vertical_scroll_bar)->dragging = -1; + bar->dragging = -1; /* The thumb size is incorrect while dragging: fix it. */ set_vertical_scroll_bar (w); } window_being_scrolled = Qnil; - last_scroll_bar_part = -1; - +#if defined (USE_LUCID) + bar->last_seen_part = scroll_bar_nowhere; +#endif /* Xt timeouts no longer needed. */ toolkit_scroll_bar_interaction = 0; } @@ -4323,7 +4322,6 @@ xm_scroll_callback (Widget widget, XtPointer client_data, XtPointer call_data) if (part >= 0) { window_being_scrolled = bar->window; - last_scroll_bar_part = part; x_send_scroll_bar_event (bar->window, part, portion, whole); } } @@ -4384,7 +4382,6 @@ xg_scroll_callback (GtkRange *range, if (part >= 0) { window_being_scrolled = bar->window; - last_scroll_bar_part = part; x_send_scroll_bar_event (bar->window, part, portion, whole); } @@ -4426,7 +4423,7 @@ xaw_jump_callback (Widget widget, XtPointer client_data, XtPointer call_data) float top = *top_addr; float shown; int whole, portion, height; - int part; + enum scroll_bar_part part; /* Get the size of the thumb, a value between 0 and 1. */ block_input (); @@ -4448,7 +4445,7 @@ xaw_jump_callback (Widget widget, XtPointer client_data, XtPointer call_data) window_being_scrolled = bar->window; bar->dragging = portion; - last_scroll_bar_part = part; + bar->last_seen_part = part; x_send_scroll_bar_event (bar->window, part, portion, whole); } @@ -4468,7 +4465,7 @@ xaw_scroll_callback (Widget widget, XtPointer client_data, XtPointer call_data) /* The position really is stored cast to a pointer. */ int position = (intptr_t) call_data; Dimension height; - int part; + enum scroll_bar_part part; /* Get the height of the scroll bar. */ block_input (); @@ -4487,7 +4484,7 @@ xaw_scroll_callback (Widget widget, XtPointer client_data, XtPointer call_data) window_being_scrolled = bar->window; bar->dragging = -1; - last_scroll_bar_part = part; + bar->last_seen_part = part; x_send_scroll_bar_event (bar->window, part, position, height); } @@ -4797,7 +4794,7 @@ x_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar, int portion, int positio NULL); /* Massage the top+shown values. */ - if (bar->dragging == -1 || last_scroll_bar_part == scroll_bar_down_arrow) + if (bar->dragging == -1 || bar->last_seen_part == scroll_bar_down_arrow) top = max (0, min (1, top)); else top = old_top; @@ -4902,6 +4899,9 @@ x_scroll_bar_create (struct window *w, int top, int left, int width, int height) bar->end = 0; bar->dragging = -1; bar->fringe_extended_p = 0; +#if defined (USE_TOOLKIT_SCROLL_BARS) && defined (USE_LUCID) + bar->last_seen_part = scroll_bar_nowhere; +#endif /* Add bar to its frame's list of scroll bars. */ bar->next = FRAME_SCROLL_BARS (f); diff --git a/src/xterm.h b/src/xterm.h index 883a249629d..f4a2d4c01b2 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -801,6 +801,11 @@ struct scroll_bar being dragged, this is -1. */ int dragging; +#if defined (USE_TOOLKIT_SCROLL_BARS) && defined (USE_LUCID) + /* Last scroll bar part seen in xaw_jump_callback and xaw_scroll_callback. */ + enum scroll_bar_part last_seen_part; +#endif + /* 1 if the background of the fringe that is adjacent to a scroll bar is extended to the gap between the fringe and the bar. */ unsigned fringe_extended_p : 1; From fb55b9d11ee8a83b9c2662e72af336d8deeb7a37 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 11 Sep 2013 17:56:46 +0400 Subject: [PATCH 070/321] * termhooks.h (fullscreen_hook): Remove the leftover. (struct terminal): Fix typo in comment. --- src/ChangeLog | 5 +++++ src/termhooks.h | 7 +------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 41e20465d57..dda202af89f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-11 Dmitry Antipov + + * termhooks.h (fullscreen_hook): Remove the leftover. + (struct terminal): Fix typo in comment. + 2013-09-11 Dmitry Antipov Cleaning up a few X scroll bar bits. diff --git a/src/termhooks.h b/src/termhooks.h index 30ac7957317..a050c3292c2 100644 --- a/src/termhooks.h +++ b/src/termhooks.h @@ -43,11 +43,6 @@ enum scroll_bar_part { scroll_bar_move_ratio }; -/* If the value of the frame parameter changed, whis hook is called. - For example, if going from fullscreen to not fullscreen this hook - may do something OS dependent, like extended window manager hints on X11. */ -extern void (*fullscreen_hook) (struct frame *f); - /* Output method of a terminal (and frames on this terminal, respectively). */ enum output_method @@ -499,7 +494,7 @@ struct terminal windows. */ void (*frame_raise_lower_hook) (struct frame *f, int raise_flag); - /* If the value of the frame parameter changed, whis hook is called. + /* If the value of the frame parameter changed, this hook is called. For example, if going from fullscreen to not fullscreen this hook may do something OS dependent, like extended window manager hints on X11. */ void (*fullscreen_hook) (struct frame *f); From 412a09723c5cf5f8b8a28fc0ef104750de3a6d7f Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Wed, 11 Sep 2013 22:06:22 +0800 Subject: [PATCH 071/321] Minor fixes for ido.texi. * doc/misc/ido.texi (Interactive Substring Matching): Use @key{RET} instead of @kbd{RET}. (Prefix Matching): Add an index. --- doc/emacs/trouble.texi | 1 + doc/lispref/nonascii.texi | 2 ++ doc/misc/ChangeLog | 6 ++++++ doc/misc/ido.texi | 3 ++- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi index 0d5ce6820c7..34783796899 100644 --- a/doc/emacs/trouble.texi +++ b/doc/emacs/trouble.texi @@ -1140,6 +1140,7 @@ Please help us keep up with the workload by designing the patch in a form that is clearly safe to install. @end itemize +@c FIXME: Include the node above? @node Contributing @section Contributing to Emacs Development @cindex contributing to Emacs diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi index f351829e4cf..ec949b37684 100644 --- a/doc/lispref/nonascii.texi +++ b/doc/lispref/nonascii.texi @@ -549,6 +549,8 @@ is @code{nil}, which means the character itself. @defun get-char-code-property char propname This function returns the value of @var{char}'s @var{propname} property. +@c FIXME: Use ‘?\s’ instead of ‘? ’ for the space character in the +@c first example? --xfq @example @group (get-char-code-property ? 'general-category) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index e3ad5688f22..aa1e69891a2 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,9 @@ +2013-09-11 Xue Fuqiao + + * ido.texi (Interactive Substring Matching): Use @key{RET} instead + of @kbd{RET}. + (Prefix Matching): Add an index. + 2013-09-08 Glenn Morris * emacs-gnutls.texi: Tweak direntry. diff --git a/doc/misc/ido.texi b/doc/misc/ido.texi index 623fb4bfa79..64885179259 100644 --- a/doc/misc/ido.texi +++ b/doc/misc/ido.texi @@ -258,7 +258,7 @@ Buffer: 23@{123456 | 123@} At this point, you still have two matching buffers. If you want the first buffer in the list, you can simply press @key{RET}. If you want the second in the list, you can press @kbd{C-s} to move it to the top -of the list and then press @kbd{RET} to select it. +of the list and then press @key{RET} to select it. However, if you type @kbd{4}, you'll only have one match left: @@ -366,6 +366,7 @@ users Ido offers in addition to the default substring matching method the only difference to the description of the substring matching above. +@cindex toggle prefix matching You can toggle prefix matching with @kbd{C-p} (@code{ido-toggle-prefix}). From 656bd483888ec1620eafdb4037f65af8fe0276ef Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 11 Sep 2013 12:00:37 -0400 Subject: [PATCH 072/321] * lisp/eshell/esh-mode.el (eshell-mode-syntax-table): Fix up initialization. (eshell-self-insert-command, eshell-send-invisible): Remove unused argument. (eshell-handle-control-codes): Remove unused var `orig'. Avoid delete-backward-char. Fixes: debbugs:15338 --- lisp/ChangeLog | 9 +++++- lisp/eshell/esh-mode.el | 67 ++++++++++++++++++++--------------------- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f5c4ee1b19e..7a79110f4a0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,12 @@ 2013-09-11 Stefan Monnier + * eshell/esh-mode.el (eshell-mode-syntax-table): Fix up initialization + (bug#15338). + (eshell-self-insert-command, eshell-send-invisible): Remove + unused argument. + (eshell-handle-control-codes): Remove unused var `orig'. + Avoid delete-backward-char. + * files.el (set-auto-mode): Simplify a bit further. 2013-09-11 Glenn Morris @@ -74,7 +81,7 @@ 2013-09-10 Stefan Monnier * simple.el: Use set-temporary-overlay-map for universal-argument. - (universal-argument-map): Don't use default-bindings. + (universal-argument-map): Don't use default-bindings (bug#15317). Bind switch-frame explicitly. Replace universal-argument-minus with a conditional binding. (universal-argument-num-events, saved-overriding-map): Remove. diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el index 0d32dae7ddb..54a36428d58 100644 --- a/lisp/eshell/esh-mode.el +++ b/lisp/eshell/esh-mode.el @@ -267,19 +267,20 @@ This is used by `eshell-watch-for-password-prompt'." ;; All non-word multibyte characters should be `symbol'. (map-char-table (if (featurep 'xemacs) - (lambda (key val) + (lambda (key _val) (and (characterp key) (>= (char-int key) 256) (/= (char-syntax key) ?w) (modify-syntax-entry key "_ " st))) - (lambda (key val) + (lambda (key _val) (and (if (consp key) (and (>= (car key) 128) (/= (char-syntax (car key)) ?w)) (and (>= key 256) (/= (char-syntax key) ?w))) (modify-syntax-entry key "_ " st)))) - (standard-syntax-table)))) + (standard-syntax-table)) + st)) ;;; User Functions: @@ -451,8 +452,8 @@ and the hook `eshell-exit-hook'." (add-hook 'pre-command-hook 'eshell-intercept-commands t t) (message "Sending subprocess input directly"))) -(defun eshell-self-insert-command (N) - (interactive "i") +(defun eshell-self-insert-command () + (interactive) (process-send-string (eshell-interactive-process) (char-to-string (if (symbolp last-command-event) @@ -925,10 +926,10 @@ a key." (custom-add-option 'eshell-output-filter-functions 'eshell-truncate-buffer) -(defun eshell-send-invisible (str) +(defun eshell-send-invisible () "Read a string without echoing. Then send it to the process running in the current buffer." - (interactive "P") ; Defeat snooping via C-x ESC ESC + (interactive) ; Don't pass str as argument, to avoid snooping via C-x ESC ESC (let ((str (read-passwd (format "%s Password: " (process-name (eshell-interactive-process)))))) @@ -950,7 +951,7 @@ This function could be in the list `eshell-output-filter-functions'." (beginning-of-line) (if (re-search-forward eshell-password-prompt-regexp eshell-last-output-end t) - (eshell-send-invisible nil))))) + (eshell-send-invisible))))) (custom-add-option 'eshell-output-filter-functions 'eshell-watch-for-password-prompt) @@ -958,32 +959,30 @@ This function could be in the list `eshell-output-filter-functions'." (defun eshell-handle-control-codes () "Act properly when certain control codes are seen." (save-excursion - (let ((orig (point))) - (goto-char eshell-last-output-block-begin) - (unless (eolp) - (beginning-of-line)) - (while (< (point) eshell-last-output-end) - (let ((char (char-after))) - (cond - ((eq char ?\r) - (if (< (1+ (point)) eshell-last-output-end) - (if (memq (char-after (1+ (point))) - '(?\n ?\r)) - (delete-char 1) - (let ((end (1+ (point)))) - (beginning-of-line) - (delete-region (point) end))) - (add-text-properties (point) (1+ (point)) - '(invisible t)) - (forward-char))) - ((eq char ?\a) - (delete-char 1) - (beep)) - ((eq char ?\C-h) - (delete-backward-char 1) - (delete-char 1)) - (t - (forward-char)))))))) + (goto-char eshell-last-output-block-begin) + (unless (eolp) + (beginning-of-line)) + (while (< (point) eshell-last-output-end) + (let ((char (char-after))) + (cond + ((eq char ?\r) + (if (< (1+ (point)) eshell-last-output-end) + (if (memq (char-after (1+ (point))) + '(?\n ?\r)) + (delete-char 1) + (let ((end (1+ (point)))) + (beginning-of-line) + (delete-region (point) end))) + (add-text-properties (point) (1+ (point)) + '(invisible t)) + (forward-char))) + ((eq char ?\a) + (delete-char 1) + (beep)) + ((eq char ?\C-h) + (delete-region (1- (point)) (1+ (point)))) + (t + (forward-char))))))) (custom-add-option 'eshell-output-filter-functions 'eshell-handle-control-codes) From 8d2db8be5bccf0d772e0690e612a1f499be4cb48 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 11 Sep 2013 20:03:42 +0400 Subject: [PATCH 073/321] * nsterm.m (syms_of_nsterm): Use Qns. * w32fns.c (Fx_open_connection): Remove old '#if 0' code. * w32term.c (w32_create_terminal, syms_of_w32term): Use Qw32. * xfns.c (x_display_info_for_name, Fx_open_connection): Remove old '#if 0' code. (syms_of_xfns): Use Qx. --- src/ChangeLog | 6 ++++++ src/nsterm.m | 4 ++-- src/w32fns.c | 5 ----- src/w32term.c | 5 +++-- src/xfns.c | 13 ++----------- 5 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index dda202af89f..e3fd6e96ec2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,11 @@ 2013-09-11 Dmitry Antipov + * nsterm.m (syms_of_nsterm): Use Qns. + * w32fns.c (Fx_open_connection): Remove old '#if 0' code. + * w32term.c (w32_create_terminal, syms_of_w32term): Use Qw32. + * xfns.c (x_display_info_for_name, Fx_open_connection): + Remove old '#if 0' code. + (syms_of_xfns): Use Qx. * termhooks.h (fullscreen_hook): Remove the leftover. (struct terminal): Fix typo in comment. diff --git a/src/nsterm.m b/src/nsterm.m index 38d76e9389c..59627a38087 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -7433,6 +7433,6 @@ Nil means use fullscreen the old (< 10.7) way. The old way works better with baseline level. The default value is nil. */); x_underline_at_descent_line = 0; - /* Tell emacs about this window system. */ - Fprovide (intern ("ns"), Qnil); + /* Tell Emacs about this window system. */ + Fprovide (Qns, Qnil); } diff --git a/src/w32fns.c b/src/w32fns.c index 58c63d959ef..a8b444e0409 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -5201,11 +5201,6 @@ terminate Emacs if we can't open the connection. if (! NILP (xrm_string)) CHECK_STRING (xrm_string); -#if 0 - if (! EQ (Vwindow_system, intern ("w32"))) - error ("Not using Microsoft Windows"); -#endif - /* Allow color mapping to be defined externally; first look in user's HOME directory, then in Emacs etc dir for a file called rgb.txt. */ { diff --git a/src/w32term.c b/src/w32term.c index 681f70b5888..d47509e4ece 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -6338,7 +6338,7 @@ w32_create_terminal (struct w32_display_info *dpyinfo) terminal like X does. */ terminal->kboard = xmalloc (sizeof (KBOARD)); init_kboard (terminal->kboard); - kset_window_system (terminal->kboard, intern ("w32")); + kset_window_system (terminal->kboard, Qw32); terminal->kboard->next_kboard = all_kboards; all_kboards = terminal->kboard; /* Don't let the initial kboard remain current longer than necessary. @@ -6691,5 +6691,6 @@ With MS Windows or Nextstep, the value is t. */); staticpro (&last_mouse_motion_frame); last_mouse_motion_frame = Qnil; - Fprovide (intern_c_string ("w32"), Qnil); + /* Tell Emacs about this window system. */ + Fprovide (Qw32, Qnil); } diff --git a/src/xfns.c b/src/xfns.c index 1626e2177cb..9b3bf79c088 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -4434,11 +4434,6 @@ x_display_info_for_name (Lisp_Object name) CHECK_STRING (name); -#if 0 - if (! EQ (Vinitial_window_system, intern ("x"))) - error ("Not using X Windows"); /* That doesn't stop us anymore. */ -#endif - for (dpyinfo = x_display_list, names = x_display_name_list; dpyinfo; dpyinfo = dpyinfo->next, names = XCDR (names)) @@ -4482,11 +4477,6 @@ terminate Emacs if we can't open the connection. if (! NILP (xrm_string)) CHECK_STRING (xrm_string); -#if 0 - if (! EQ (Vinitial_window_system, intern ("x"))) - error ("Not using X Windows"); /* That doesn't stop us anymore. */ -#endif - xrm_option = NILP (xrm_string) ? 0 : SSDATA (xrm_string); validate_x_resource_name (); @@ -6299,7 +6289,8 @@ Otherwise use Emacs own tooltip implementation. When using Gtk+ tooltips, the tooltip face is not used. */); x_gtk_use_system_tooltips = 1; - Fprovide (intern_c_string ("x"), Qnil); + /* Tell Emacs about this window system. */ + Fprovide (Qx, Qnil); #ifdef USE_X_TOOLKIT Fprovide (intern_c_string ("x-toolkit"), Qnil); From 5c91a2b88d1efef802d6b76910ead67ff8048289 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 13:27:22 -0400 Subject: [PATCH 074/321] * lisp/savehist.el: No need for cl when compiling on Emacs. --- lisp/ChangeLog | 4 ++++ lisp/savehist.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7a79110f4a0..c7e08e40480 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-11 Glenn Morris + + * savehist.el: No need for cl when compiling on Emacs. + 2013-09-11 Stefan Monnier * eshell/esh-mode.el (eshell-mode-syntax-table): Fix up initialization diff --git a/lisp/savehist.el b/lisp/savehist.el index 374e57feb1f..379818b2707 100644 --- a/lisp/savehist.el +++ b/lisp/savehist.el @@ -49,7 +49,7 @@ (require 'custom) (eval-when-compile - (require 'cl)) + (if (featurep 'xemacs) (require 'cl))) ;; User variables From 5ec0337a36f61c2bd6c7c3ef8102f7deeeafd09a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 13:31:29 -0400 Subject: [PATCH 075/321] * src/emacs.c (usage_message): Possessive apostrophe tweak. Likewise in some comments. --- src/ChangeLog | 4 ++++ src/emacs.c | 6 +++--- src/w32proc.c | 2 +- src/xfns.c | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e3fd6e96ec2..e1276f54d03 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2013-09-11 Glenn Morris + + * emacs.c (usage_message): Possessive apostrophe tweak. + 2013-09-11 Dmitry Antipov * nsterm.m (syms_of_nsterm): Use Qns. diff --git a/src/emacs.c b/src/emacs.c index 05384145330..dc4c23b3991 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -1,7 +1,7 @@ /* Fully extensible Emacs, running on Unix, intended for GNU. -Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2013 Free Software -Foundation, Inc. +Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2013 + Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -310,7 +310,7 @@ example, -batch as well as --batch. You can use any unambiguous\n\ abbreviation for a --option.\n\ \n\ Various environment variables and window system resources also affect\n\ -Emacs' operation. See the main documentation.\n\ +the operation of Emacs. See the main documentation.\n\ \n\ Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs\n\ section of the Emacs manual or the file BUGS.\n" diff --git a/src/w32proc.c b/src/w32proc.c index dabaa62f71c..221b42fb7b2 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -1144,7 +1144,7 @@ create_child (char *exe, char *cmdline, char *env, int is_gui_app, return FALSE; } -/* create_child doesn't know what emacs' file handle will be for waiting +/* create_child doesn't know what emacs's file handle will be for waiting on output from the child, so we need to make this additional call to register the handle with the process This way the select emulator knows how to match file handles with diff --git a/src/xfns.c b/src/xfns.c index 9b3bf79c088..74bc7a8b1d0 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -1031,7 +1031,7 @@ x_set_border_pixel (struct frame *f, int pix) Note: this is done in two routines because of the way X10 works. Note: under X11, this is normally the province of the window manager, - and so emacs' border colors may be overridden. */ + and so emacs's border colors may be overridden. */ static void x_set_border_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) From d3506ca5a0a4deca042d9cf91e5cbba083675220 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 14:31:45 -0400 Subject: [PATCH 076/321] * lisp/vc/vc-cvs.el (cvs-append-to-ignore): Fix arg spec. Check cvs-sort-ignore-file is bound. --- lisp/ChangeLog | 3 +++ lisp/vc/vc-cvs.el | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c7e08e40480..cf1fa06aee8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-11 Glenn Morris + * vc/vc-cvs.el (cvs-append-to-ignore): Fix arg spec. + Check cvs-sort-ignore-file is bound. + * savehist.el: No need for cl when compiling on Emacs. 2013-09-11 Stefan Monnier diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el index 931193c46e0..75b54450926 100644 --- a/lisp/vc/vc-cvs.el +++ b/lisp/vc/vc-cvs.el @@ -1226,7 +1226,7 @@ is non-nil." table (lambda () (vc-cvs-revision-table (car files)))))) table)) -(defun vc-cvs-ignore (file) +(defun vc-cvs-ignore (file &optional _directory _remove) "Ignore FILE under CVS." (cvs-append-to-ignore (file-name-directory file) file)) @@ -1245,7 +1245,9 @@ to hear about anymore." (goto-char (point-max)) (unless (bolp) (insert "\n")) (insert str (if old-dir "/\n" "\n")) - (if cvs-sort-ignore-file (sort-lines nil (point-min) (point-max))) + ;; FIXME this is a pcvs variable. + (if (bound-and-true-p cvs-sort-ignore-file) + (sort-lines nil (point-min) (point-max))) (save-buffer))) (provide 'vc-cvs) From 512e4cdc0d3e5d00ac1d5ae5b4be74d090d034c2 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 14:32:32 -0400 Subject: [PATCH 077/321] * lisp/play/landmark.el (landmark-mode): Fix typos. --- lisp/ChangeLog | 2 ++ lisp/play/landmark.el | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cf1fa06aee8..315e0d42e74 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-11 Glenn Morris + * play/landmark.el (landmark-mode): Fix typos. + * vc/vc-cvs.el (cvs-append-to-ignore): Fix arg spec. Check cvs-sort-ignore-file is bound. diff --git a/lisp/play/landmark.el b/lisp/play/landmark.el index b995da4513c..3dc5dd2173c 100644 --- a/lisp/play/landmark.el +++ b/lisp/play/landmark.el @@ -233,7 +233,7 @@ (put 'landmark-mode 'intangible 1) ;; This one is for when they set view-read-only to t: Landmark cannot ;; allow View Mode to be activated in its buffer. -(define-derived-mode lm-mode special-mode "Lm" +(define-derived-mode landmark-mode special-mode "Lm" "Major mode for playing Lm against Emacs. You and Emacs play in turn by marking a free square. You mark it with X and Emacs marks it with O. The winner is the first to get five contiguous @@ -245,7 +245,7 @@ Other useful commands: \\{landmark-mode-map} Entry to this mode calls the value of `landmark-mode-hook' if that value is non-nil. One interesting value is `turn-on-font-lock'." - (lm-display-statistics) + (landmark-display-statistics) (setq-local font-lock-defaults '(lm-font-lock-keywords t)) (setq buffer-read-only t)) From da712f22f9fe22e0477a3ec1fe81da6bd49ed058 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 14:33:58 -0400 Subject: [PATCH 078/321] * lisp/echistory.el (electric-command-history): Remove call to deleted func. --- lisp/ChangeLog | 3 +++ lisp/echistory.el | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 315e0d42e74..06c30cdb624 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-11 Glenn Morris + * echistory.el (electric-command-history): Remove call to deleted func. + * play/landmark.el (landmark-mode): Fix typos. * vc/vc-cvs.el (cvs-append-to-ignore): Fix arg spec. @@ -61,6 +63,7 @@ * chistory.el (command-history-mode-map): Rename from command-history-map. (command-history-mode): Use define-derived-mode. + (Command-history-setup): Remove function. * calc/calc.el (calc-trail-mode-map): New var. (calc-trail-mode): Use define-derived-mode. (calc-trail-buffer): Set calc-main-buffer manually. diff --git a/lisp/echistory.el b/lisp/echistory.el index fc576aa6484..5989c9b8445 100644 --- a/lisp/echistory.el +++ b/lisp/echistory.el @@ -117,7 +117,6 @@ The Command History listing is recomputed each time this mode is invoked." (save-window-excursion (list-command-history) (set-buffer "*Command History*") - (Command-history-setup) (setq major-mode 'electric-command-history) (setq mode-name "Electric History") (use-local-map electric-history-map)) From ed88649ee1bf7e63e8c164b869ee945d2c35e399 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 14:36:51 -0400 Subject: [PATCH 079/321] * lisp/play/landmark.el: Yet more typo fixes. --- lisp/play/landmark.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/play/landmark.el b/lisp/play/landmark.el index 3dc5dd2173c..8ee633e3917 100644 --- a/lisp/play/landmark.el +++ b/lisp/play/landmark.el @@ -246,7 +246,7 @@ Other useful commands: Entry to this mode calls the value of `landmark-mode-hook' if that value is non-nil. One interesting value is `turn-on-font-lock'." (landmark-display-statistics) - (setq-local font-lock-defaults '(lm-font-lock-keywords t)) + (setq-local font-lock-defaults '(landmark-font-lock-keywords t)) (setq buffer-read-only t)) From aab6e902f93767b1ade593dff7ddfccd159124a6 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 14:40:06 -0400 Subject: [PATCH 080/321] Comment --- lisp/vc/vc-cvs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el index 75b54450926..11a30991391 100644 --- a/lisp/vc/vc-cvs.el +++ b/lisp/vc/vc-cvs.el @@ -1230,6 +1230,7 @@ is non-nil." "Ignore FILE under CVS." (cvs-append-to-ignore (file-name-directory file) file)) +;; FIXME This should be in the vc-cvs- namespace if it is to live here. (defun cvs-append-to-ignore (dir str &optional old-dir) "In DIR, add STR to the .cvsignore file. If OLD-DIR is non-nil, then this is a directory that we don't want From 44ee21472c20889fdf7fde888060a6951da7843b Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Thu, 12 Sep 2013 07:05:21 +0800 Subject: [PATCH 081/321] Character properties fix in lispref. * doc/lispref/nonascii.texi (Character Properties): Character properties fix for decimal-digit-value and digit-value. --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/nonascii.texi | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 145d595b1d2..574aba493c0 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2013-09-11 Xue Fuqiao + + * nonascii.texi (Character Properties): Character properties fix + for decimal-digit-value and digit-value. + 2013-09-08 Stefan Monnier * macros.texi (Defining Macros): Prefer "function" to "lambda diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi index ec949b37684..64c0033847c 100644 --- a/doc/lispref/nonascii.texi +++ b/doc/lispref/nonascii.texi @@ -478,14 +478,14 @@ unassigned codepoints, the value is the character itself. @item decimal-digit-value Corresponds to the Unicode @code{Numeric_Value} property for -characters whose @code{Numeric_Type} is @samp{Digit}. The value is an -integer number. For unassigned codepoints, the value is @code{nil}, -which means @acronym{NaN}, or ``not-a-number''. +characters whose @code{Numeric_Type} is @samp{Decimal}. The value is +an integer number. For unassigned codepoints, the value is +@code{nil}, which means @acronym{NaN}, or ``not-a-number''. @item digit-value Corresponds to the Unicode @code{Numeric_Value} property for -characters whose @code{Numeric_Type} is @samp{Decimal}. The value is -an integer number. Examples of such characters include compatibility +characters whose @code{Numeric_Type} is @samp{Digit}. The value is an +integer number. Examples of such characters include compatibility subscript and superscript digits, for which the value is the corresponding number. For unassigned codepoints, the value is @code{nil}, which means @acronym{NaN}. From 56834f3b631601f6bfdb681a53fef77c3d777435 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 21:32:45 -0400 Subject: [PATCH 082/321] * lisp/term/ns-win.el (global-map): Remove binding for ispell-next, deleted 1999-05-29. Fixes: debbugs:15357 --- lisp/ChangeLog | 5 +++++ lisp/term/ns-win.el | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 06c30cdb624..9fe56865046 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-12 Glenn Morris + + * term/ns-win.el (global-map): Remove binding for ispell-next, + deleted 1999-05-29. (Bug#15357) + 2013-09-11 Glenn Morris * echistory.el (electric-command-history): Remove call to deleted func. diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el index b92ca1244fb..b4693a5451a 100644 --- a/lisp/term/ns-win.el +++ b/lisp/term/ns-win.el @@ -104,7 +104,6 @@ The properties returned may include `top', `left', `height', and `width'." (define-key global-map [?\s-~] 'ns-prev-frame) (define-key global-map [?\s--] 'center-line) (define-key global-map [?\s-:] 'ispell) -(define-key global-map [?\s-\;] 'ispell-next) (define-key global-map [?\s-?] 'info) (define-key global-map [?\s-^] 'kill-some-buffers) (define-key global-map [?\s-&] 'kill-this-buffer) From d3b049e6015c09a2d1ea101e5fb466c6ce9f61e0 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 12 Sep 2013 00:56:51 -0400 Subject: [PATCH 083/321] * lisp/autorevert.el (auto-revert-notify-handler): Use `cl-dolist' since we rely on cl-return. --- lisp/ChangeLog | 9 +++++++-- lisp/autorevert.el | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9fe56865046..61e9c9bf708 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-12 Stefan Monnier + + * autorevert.el (auto-revert-notify-handler): Use `cl-dolist' since we + rely on cl-return. + 2013-09-12 Glenn Morris * term/ns-win.el (global-map): Remove binding for ispell-next, @@ -18,8 +23,8 @@ * eshell/esh-mode.el (eshell-mode-syntax-table): Fix up initialization (bug#15338). - (eshell-self-insert-command, eshell-send-invisible): Remove - unused argument. + (eshell-self-insert-command, eshell-send-invisible): + Remove unused argument. (eshell-handle-control-codes): Remove unused var `orig'. Avoid delete-backward-char. diff --git a/lisp/autorevert.el b/lisp/autorevert.el index 0e2b6f32cf3..65526f07e1b 100644 --- a/lisp/autorevert.el +++ b/lisp/autorevert.el @@ -548,7 +548,7 @@ will use an up-to-date value of `auto-revert-interval'" (cl-assert (stringp file)) (when (eq action 'renamed) (cl-assert (stringp file1))) ;; Loop over all buffers, in order to find the intended one. - (dolist (buffer buffers) + (cl-dolist (buffer buffers) (when (buffer-live-p buffer) (with-current-buffer buffer (when (and (stringp buffer-file-name) From 170266d096bc4d0952bee907532d14503e882bf6 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 12 Sep 2013 01:20:07 -0400 Subject: [PATCH 084/321] Cleanup Eshell to rely less on dynamic scoping. * lisp/eshell/esh-opt.el (eshell-eval-using-options): Don't bind usage-msg, last-value, and ext-command here. Bind `args' closer to `body'. (temp-args, last-value, usage-msg, ext-command, args): Don't defvar. (eshell--args): Declare new dynamic var. (eshell-do-opt): Add argument `args'. Bind our own usage-msg, last-value, and ext-command. Pass `args' to `body'. (eshell-process-args): Bind eshell--args. (eshell-set-option): Use eshell--args. * lisp/eshell/eshell.el (eshell): Use derived-mode-p. * lisp/eshell/esh-var.el (eshell-parse-variable): Use backquote. (eshell-parse-variable-ref): Remove unused vars `end' and `err'. (eshell-glob-function): Declare. * lisp/eshell/esh-util.el: Require cl-lib. (eshell-read-hosts-file): Avoid add-to-list. * lisp/eshell/esh-cmd.el (eshell-parse-lisp-argument): Remove unused var `err'. * lisp/eshell/em-unix.el (compilation-scroll-output, locate-history-list): Declare. (eshell/diff): Remove unused var `err'. * lisp/eshell/em-rebind.el (eshell-delete-backward-char): Remove unused arg `killflag'. * lisp/eshell/em-pred.el (eshell-parse-modifiers): Remove unused var `err'. * lisp/eshell/em-ls.el (eshell-ls-highlight-alist): Move defvars before first use. * lisp/eshell/em-glob.el (eshell-glob-matches, message-shown): Move declaration before first use. * lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias): Use backquotes. * autorevert.el (auto-revert-notify-handler): Use `cl-dolist' since we rely on cl-return. --- lisp/ChangeLog | 28 +++++++++ lisp/eshell/em-alias.el | 17 ++---- lisp/eshell/em-glob.el | 5 +- lisp/eshell/em-ls.el | 38 ++++++------ lisp/eshell/em-pred.el | 2 +- lisp/eshell/em-rebind.el | 2 +- lisp/eshell/em-unix.el | 6 +- lisp/eshell/esh-arg.el | 2 +- lisp/eshell/esh-cmd.el | 2 +- lisp/eshell/esh-opt.el | 59 +++++++++--------- lisp/eshell/esh-util.el | 10 +-- lisp/eshell/esh-var.el | 128 +++++++++++++++++++-------------------- lisp/eshell/eshell.el | 2 +- 13 files changed, 161 insertions(+), 140 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 61e9c9bf708..7984dc214c4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,33 @@ 2013-09-12 Stefan Monnier + Cleanup Eshell to rely less on dynamic scoping. + * eshell/esh-opt.el (eshell-eval-using-options): Don't bind usage-msg, + last-value, and ext-command here. Bind `args' closer to `body'. + (temp-args, last-value, usage-msg, ext-command, args): Don't defvar. + (eshell--args): Declare new dynamic var. + (eshell-do-opt): Add argument `args'. Bind our own usage-msg, + last-value, and ext-command. Pass `args' to `body'. + (eshell-process-args): Bind eshell--args. + (eshell-set-option): Use eshell--args. + * eshell/eshell.el (eshell): Use derived-mode-p. + * eshell/esh-var.el (eshell-parse-variable): Use backquote. + (eshell-parse-variable-ref): Remove unused vars `end' and `err'. + (eshell-glob-function): Declare. + * eshell/esh-util.el: Require cl-lib. + (eshell-read-hosts-file): Avoid add-to-list. + * eshell/esh-cmd.el (eshell-parse-lisp-argument): Remove unused var + `err'. + * eshell/em-unix.el (compilation-scroll-output, locate-history-list): + Declare. + (eshell/diff): Remove unused var `err'. + * eshell/em-rebind.el (eshell-delete-backward-char): Remove unused arg + `killflag'. + * eshell/em-pred.el (eshell-parse-modifiers): Remove unused var `err'. + * eshell/em-ls.el (eshell-ls-highlight-alist): Move defvars before + first use. + * eshell/em-glob.el (eshell-glob-matches, message-shown): + Move declaration before first use. + * eshell/em-alias.el (eshell-maybe-replace-by-alias): Use backquotes. * autorevert.el (auto-revert-notify-handler): Use `cl-dolist' since we rely on cl-return. diff --git a/lisp/eshell/em-alias.el b/lisp/eshell/em-alias.el index a46b48c01b3..9a9cc4cd567 100644 --- a/lisp/eshell/em-alias.el +++ b/lisp/eshell/em-alias.el @@ -221,18 +221,11 @@ file named by `eshell-aliases-file'.") (let ((alias (eshell-lookup-alias command))) (if alias (throw 'eshell-replace-command - (list - 'let - (list - (list 'eshell-command-name - (list 'quote eshell-last-command-name)) - (list 'eshell-command-arguments - (list 'quote eshell-last-arguments)) - (list 'eshell-prevent-alias-expansion - (list 'quote - (cons command - eshell-prevent-alias-expansion)))) - (eshell-parse-command (nth 1 alias)))))))) + `(let ((eshell-command-name ',eshell-last-command-name) + (eshell-command-arguments ',eshell-last-arguments) + (eshell-prevent-alias-expansion + ',(cons command eshell-prevent-alias-expansion))) + ,(eshell-parse-command (nth 1 alias)))))))) (defun eshell-alias-completions (name) "Find all possible completions for NAME. diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el index a58c7730ded..b5ca8119470 100644 --- a/lisp/eshell/em-glob.el +++ b/lisp/eshell/em-glob.el @@ -180,6 +180,8 @@ interpretation." (goto-char (1+ end)))))))))) (defvar eshell-glob-chars-regexp nil) +(defvar eshell-glob-matches) +(defvar message-shown) (defun eshell-glob-regexp (pattern) "Convert glob-pattern PATTERN to a regular expression. @@ -262,9 +264,6 @@ the form: (error "No matches found: %s" glob) glob)))) -(defvar eshell-glob-matches) -(defvar message-shown) - ;; FIXME does this really need to abuse eshell-glob-matches, message-shown? (defun eshell-glob-entries (path globs &optional recurse-p) "Glob the entries in PATHS, possibly recursing if RECURSE-P is non-nil." diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el index 41db4cd03d1..3dee1adb58a 100644 --- a/lisp/eshell/em-ls.el +++ b/lisp/eshell/em-ls.el @@ -268,6 +268,25 @@ scope during the evaluation of TEST-SEXP." :type '(repeat (cons function face)) :group 'eshell-ls) +(defvar block-size) +(defvar dereference-links) +(defvar dir-literal) +(defvar error-func) +(defvar flush-func) +(defvar human-readable) +(defvar ignore-pattern) +(defvar insert-func) +(defvar listing-style) +(defvar numeric-uid-gid) +(defvar reverse-list) +(defvar show-all) +(defvar show-almost-all) +(defvar show-recursive) +(defvar show-size) +(defvar sort-method) +(defvar ange-cache) +(defvar dired-flag) + ;;; Functions: (defun eshell-ls-insert-directory @@ -315,25 +334,6 @@ instead." (put 'eshell/ls 'eshell-no-numeric-conversions t) -(defvar block-size) -(defvar dereference-links) -(defvar dir-literal) -(defvar error-func) -(defvar flush-func) -(defvar human-readable) -(defvar ignore-pattern) -(defvar insert-func) -(defvar listing-style) -(defvar numeric-uid-gid) -(defvar reverse-list) -(defvar show-all) -(defvar show-almost-all) -(defvar show-recursive) -(defvar show-size) -(defvar sort-method) -(defvar ange-cache) -(defvar dired-flag) - (declare-function eshell-glob-regexp "em-glob" (pattern)) (defun eshell-do-ls (&rest args) diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el index 3a7f46ebe83..14d3020530f 100644 --- a/lisp/eshell/em-pred.el +++ b/lisp/eshell/em-pred.el @@ -307,7 +307,7 @@ functions. PRED-FUNCS take a filename and return t if the test succeeds; MOD-FUNCS take any string and preform a modification, returning the resultant string." (let (result negate follow preds mods) - (condition-case err + (condition-case nil (while (not (eobp)) (let ((char (char-after))) (cond diff --git a/lisp/eshell/em-rebind.el b/lisp/eshell/em-rebind.el index 341191fc62f..a526d590307 100644 --- a/lisp/eshell/em-rebind.el +++ b/lisp/eshell/em-rebind.el @@ -218,7 +218,7 @@ lock it at that." (cdar bindings)) (setq bindings (cdr bindings))))) -(defun eshell-delete-backward-char (n &optional killflag) +(defun eshell-delete-backward-char (n) "Delete the last character, unless it's part of the output." (interactive "P") (let ((count (prefix-numeric-value n))) diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index af54d875cb0..b9b1c1635a5 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -714,6 +714,8 @@ available..." (goto-char (point-min)) (resize-temp-buffer-window)))))) +(defvar compilation-scroll-output) + (defun eshell-grep (command args &optional maybe-use-occur) "Generic service function for the various grep aliases. It calls Emacs's grep utility if the command is not redirecting output, @@ -989,7 +991,7 @@ Show wall-clock time elapsed during execution of COMMAND.") (setq args nil) (setcdr (last args 3) nil)) (with-current-buffer - (condition-case err + (condition-case nil (diff-no-select old new (nil-blank-string (eshell-flatten-and-stringify args))) @@ -1014,6 +1016,8 @@ Show wall-clock time elapsed during execution of COMMAND.") (put 'eshell/diff 'eshell-no-numeric-conversions t) +(defvar locate-history-list) + (defun eshell/locate (&rest args) "Alias \"locate\" to call Emacs `locate' function." (if (or eshell-plain-locate-behavior diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el index d7dfd27d8d3..e3a12d5ece5 100644 --- a/lisp/eshell/esh-arg.el +++ b/lisp/eshell/esh-arg.el @@ -278,7 +278,7 @@ Point is left at the end of the arguments." (eshell-resolve-current-argument) eshell-current-argument)) -(defsubst eshell-operator (&rest args) +(defsubst eshell-operator (&rest _args) "A stub function that generates an error if a floating operator is found." (error "Unhandled operator in input text")) diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index ef8a53f3c0b..c2922983ae2 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -650,7 +650,7 @@ For an external command, it means an exit code of 0." (looking-at eshell-lisp-regexp)) (let* ((here (point)) (obj - (condition-case err + (condition-case nil (read (current-buffer)) (end-of-file (throw 'eshell-incomplete ?\())))) diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el index 33625433022..c62cbc7e1dc 100644 --- a/lisp/eshell/esh-opt.el +++ b/lisp/eshell/esh-opt.el @@ -28,11 +28,11 @@ (require 'esh-ext) ;; Unused. -;;; (defgroup eshell-opt nil -;;; "The options processing code handles command argument parsing for -;;; Eshell commands implemented in Lisp." -;;; :tag "Command options processing" -;;; :group 'eshell) +;; (defgroup eshell-opt nil +;; "The options processing code handles command argument parsing for +;; Eshell commands implemented in Lisp." +;; :tag "Command options processing" +;; :group 'eshell) ;;; User Functions: @@ -103,32 +103,25 @@ interned variable `args' (created using a `let' form)." macro-args (list 'eshell-stringify-list (list 'eshell-flatten-list macro-args))))) - (let ,(append (delq nil (mapcar (lambda (opt) + (let ,(delq nil (mapcar (lambda (opt) (and (listp opt) (nth 3 opt))) (cadr options))) - '(usage-msg last-value ext-command args)) ;; FIXME: `options' ends up hiding some variable names under `quote', ;; which is incompatible with lexical scoping!! - (eshell-do-opt ,name ,options (lambda () ,@body-forms))))) + (eshell-do-opt ,name ,options (lambda (args) ,@body-forms) temp-args)))) ;;; Internal Functions: -(defvar temp-args) -(defvar last-value) -(defvar usage-msg) -(defvar ext-command) ;; Documented part of the interface; see eshell-eval-using-options. -(defvar args) +(defvar eshell--args) -(defun eshell-do-opt (name options body-fun) +(defun eshell-do-opt (name options body-fun args) "Helper function for `eshell-eval-using-options'. This code doesn't really need to be macro expanded everywhere." - (setq args temp-args) - (if (setq - ext-command + (let* (last-value + (ext-command (catch 'eshell-ext-command - (when (setq - usage-msg + (let ((usage-msg (catch 'eshell-usage (setq last-value nil) (if (and (= (length args) 0) @@ -136,12 +129,14 @@ This code doesn't really need to be macro expanded everywhere." (throw 'eshell-usage (eshell-show-usage name options))) (setq args (eshell-process-args name args options) - last-value (funcall body-fun)) - nil)) - (error "%s" usage-msg)))) + last-value (funcall body-fun args)) + nil))) + (when usage-msg + (error "%s" usage-msg)))))) + (if ext-command (throw 'eshell-external (eshell-external-command ext-command args)) - last-value)) + last-value))) (defun eshell-show-usage (name options) "Display the usage message for NAME, using OPTIONS." @@ -197,12 +192,13 @@ will be modified." (if (not (nth 3 opt)) (eshell-show-usage name options) (if (eq (nth 2 opt) t) - (if (> ai (length args)) + (if (> ai (length eshell--args)) (error "%s: missing option argument" name) - (set (nth 3 opt) (nth ai args)) + (set (nth 3 opt) (nth ai eshell--args)) (if (> ai 0) - (setcdr (nthcdr (1- ai) args) (nthcdr (1+ ai) args)) - (setq args (cdr args)))) + (setcdr (nthcdr (1- ai) eshell--args) + (nthcdr (1+ ai) eshell--args)) + (setq eshell--args (cdr eshell--args)))) (set (nth 3 opt) (or (nth 2 opt) t))))) (defun eshell-process-option (name switch kind ai options) @@ -232,14 +228,15 @@ switch is unrecognized." (setq extcmd (eshell-search-path (cadr extcmd))) (if extcmd (throw 'eshell-ext-command extcmd) - (if (characterp switch) - (error "%s: unrecognized option -%c" name switch) - (error "%s: unrecognized option --%s" name switch)))))))) + (error (if (characterp switch) "%s: unrecognized option -%c" + "%s: unrecognized option --%s") + name switch))))))) (defun eshell-process-args (name args options) "Process the given ARGS using OPTIONS. This assumes that symbols have been intern'd by `eshell-eval-using-options'." - (let ((ai 0) arg) + (let ((ai 0) arg + (eshell--args args)) (while (< ai (length args)) (setq arg (nth ai args)) (if (not (and (stringp arg) diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index dd344eb50a2..968d1ebad79 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -23,6 +23,8 @@ ;;; Code: +(eval-when-compile (require 'cl-lib)) + (defgroup eshell-util nil "This is general utility code, meant for use by Eshell itself." :tag "General utilities" @@ -484,12 +486,12 @@ list." (while (re-search-forward "^\\([^#[:space:]]+\\)\\s-+\\(\\S-+\\)\\(\\s-*\\(\\S-+\\)\\)?" nil t) (if (match-string 1) - (add-to-list 'hosts (match-string 1))) + (cl-pushnew (match-string 1) hosts :test #'equal)) (if (match-string 2) - (add-to-list 'hosts (match-string 2))) + (cl-pushnew (match-string 2) hosts :test #'equal)) (if (match-string 4) - (add-to-list 'hosts (match-string 4))))) - (sort hosts 'string-lessp))) + (cl-pushnew (match-string 4) hosts :test #'equal)))) + (sort hosts #'string-lessp))) (defun eshell-read-hosts (file result-var timestamp-var) "Read the contents of /etc/passwd for user names." diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el index 188b8165248..75c36a68544 100644 --- a/lisp/eshell/esh-var.el +++ b/lisp/eshell/esh-var.el @@ -395,12 +395,9 @@ process any indices that come after the variable reference." indices (and (not (eobp)) (eq (char-after) ?\[) (eshell-parse-indices)) - value (list 'let - (list (list 'indices - (list 'quote indices))) - value)) + value `(let ((indices ',indices)) ,value)) (if get-len - (list 'length value) + `(length ,value) value))) (defun eshell-parse-variable-ref () @@ -414,67 +411,68 @@ Possible options are: disambiguates the length of the name {COMMAND} result of command is variable's value (LISP-FORM) result of Lisp form is variable's value" - (let (end) - (cond - ((eq (char-after) ?{) - (let ((end (eshell-find-delimiter ?\{ ?\}))) - (if (not end) - (throw 'eshell-incomplete ?\{) - (prog1 - (list 'eshell-convert - (list 'eshell-command-to-value - (list 'eshell-as-subcommand - (eshell-parse-command - (cons (1+ (point)) end))))) - (goto-char (1+ end)))))) - ((memq (char-after) '(?\' ?\")) - (let ((name (if (eq (char-after) ?\') - (eshell-parse-literal-quote) - (eshell-parse-double-quote)))) - (if name + (cond + ((eq (char-after) ?{) + (let ((end (eshell-find-delimiter ?\{ ?\}))) + (if (not end) + (throw 'eshell-incomplete ?\{) + (prog1 + (list 'eshell-convert + (list 'eshell-command-to-value + (list 'eshell-as-subcommand + (eshell-parse-command + (cons (1+ (point)) end))))) + (goto-char (1+ end)))))) + ((memq (char-after) '(?\' ?\")) + (let ((name (if (eq (char-after) ?\') + (eshell-parse-literal-quote) + (eshell-parse-double-quote)))) + (if name (list 'eshell-get-variable (eval name) 'indices)))) - ((eq (char-after) ?\<) - (let ((end (eshell-find-delimiter ?\< ?\>))) - (if (not end) - (throw 'eshell-incomplete ?\<) - (let* ((temp (make-temp-file temporary-file-directory)) - (cmd (concat (buffer-substring (1+ (point)) end) - " > " temp))) - (prog1 - (list - 'let (list (list 'eshell-current-handles - (list 'eshell-create-handles temp - (list 'quote 'overwrite)))) - (list - 'progn - (list 'eshell-as-subcommand - (eshell-parse-command cmd)) - (list 'ignore - (list 'nconc 'eshell-this-command-hook - (list 'list - (list 'function - (list 'lambda nil - (list 'delete-file temp)))))) - (list 'quote temp))) - (goto-char (1+ end))))))) - ((eq (char-after) ?\() - (condition-case err - (list 'eshell-command-to-value - (list 'eshell-lisp-command - (list 'quote (read (current-buffer))))) - (end-of-file - (throw 'eshell-incomplete ?\()))) - ((assoc (char-to-string (char-after)) - eshell-variable-aliases-list) - (forward-char) - (list 'eshell-get-variable - (char-to-string (char-before)) 'indices)) - ((looking-at eshell-variable-name-regexp) - (prog1 - (list 'eshell-get-variable (match-string 0) 'indices) - (goto-char (match-end 0)))) - (t - (error "Invalid variable reference"))))) + ((eq (char-after) ?\<) + (let ((end (eshell-find-delimiter ?\< ?\>))) + (if (not end) + (throw 'eshell-incomplete ?\<) + (let* ((temp (make-temp-file temporary-file-directory)) + (cmd (concat (buffer-substring (1+ (point)) end) + " > " temp))) + (prog1 + (list + 'let (list (list 'eshell-current-handles + (list 'eshell-create-handles temp + (list 'quote 'overwrite)))) + (list + 'progn + (list 'eshell-as-subcommand + (eshell-parse-command cmd)) + (list 'ignore + (list 'nconc 'eshell-this-command-hook + (list 'list + (list 'function + (list 'lambda nil + (list 'delete-file temp)))))) + (list 'quote temp))) + (goto-char (1+ end))))))) + ((eq (char-after) ?\() + (condition-case nil + (list 'eshell-command-to-value + (list 'eshell-lisp-command + (list 'quote (read (current-buffer))))) + (end-of-file + (throw 'eshell-incomplete ?\()))) + ((assoc (char-to-string (char-after)) + eshell-variable-aliases-list) + (forward-char) + (list 'eshell-get-variable + (char-to-string (char-before)) 'indices)) + ((looking-at eshell-variable-name-regexp) + (prog1 + (list 'eshell-get-variable (match-string 0) 'indices) + (goto-char (match-end 0)))) + (t + (error "Invalid variable reference")))) + +(defvar eshell-glob-function) (defun eshell-parse-indices () "Parse and return a list of list of indices." diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el index 9bdf8b3eb68..e3f8f0d11bc 100644 --- a/lisp/eshell/eshell.el +++ b/lisp/eshell/eshell.el @@ -300,7 +300,7 @@ buffer selected (or created)." (get-buffer-create eshell-buffer-name))))) (cl-assert (and buf (buffer-live-p buf))) (pop-to-buffer-same-window buf) - (unless (eq major-mode 'eshell-mode) + (unless (derived-mode-p 'eshell-mode) (eshell-mode)) buf)) From 30213927b6eebe291cd425d5863f54bffe0b8a83 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 22:32:57 -0700 Subject: [PATCH 085/321] Use with-demoted-errors now that it can format any error messages * dframe.el (dframe-timer-fn): * files.el (dir-locals-read-from-file): * mpc.el (mpc--status-timer-run, mpc--status-idle-timer-run, mpc-format): * reveal.el (reveal-post-command): * saveplace.el (load-save-place-alist-from-file): * shell.el (shell-resync-dirs): * w32-common-fns.el (x-get-selection-value): * emacs-lisp/copyright.el (copyright-find-copyright): * emacs-lisp/eldoc.el (eldoc-print-current-symbol-info): * emulation/tpu-edt.el (tpu-copy-keyfile): * play/bubbles.el (bubbles--mark-neighbourhood): * progmodes/executable.el (executable-make-buffer-file-executable-if-script-p): * term/pc-win.el (x-get-selection-value): Use with-demoted-errors. --- lisp/ChangeLog | 18 ++++++++++++++++ lisp/dframe.el | 5 ++--- lisp/emacs-lisp/copyright.el | 26 +++++++++++------------ lisp/emacs-lisp/eldoc.el | 41 ++++++++++++++++++------------------ lisp/emulation/tpu-edt.el | 5 ++--- lisp/files.el | 26 ++++++++++------------- lisp/mpc.el | 17 ++++++--------- lisp/play/bubbles.el | 37 ++++++++++++++++---------------- lisp/progmodes/executable.el | 19 ++++++++--------- lisp/reveal.el | 41 ++++++++++++++++++------------------ lisp/saveplace.el | 8 ++----- lisp/shell.el | 14 ++++++------ lisp/term/pc-win.el | 9 ++++---- lisp/w32-common-fns.el | 5 ++--- 14 files changed, 133 insertions(+), 138 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7984dc214c4..d5b6b09aab7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,21 @@ +2013-09-12 Glenn Morris + + * dframe.el (dframe-timer-fn): + * files.el (dir-locals-read-from-file): + * mpc.el (mpc--status-timer-run, mpc--status-idle-timer-run) + (mpc-format): + * reveal.el (reveal-post-command): + * saveplace.el (load-save-place-alist-from-file): + * shell.el (shell-resync-dirs): + * w32-common-fns.el (x-get-selection-value): + * emacs-lisp/copyright.el (copyright-find-copyright): + * emacs-lisp/eldoc.el (eldoc-print-current-symbol-info): + * emulation/tpu-edt.el (tpu-copy-keyfile): + * play/bubbles.el (bubbles--mark-neighbourhood): + * progmodes/executable.el + (executable-make-buffer-file-executable-if-script-p): + * term/pc-win.el (x-get-selection-value): Use with-demoted-errors. + 2013-09-12 Stefan Monnier Cleanup Eshell to rely less on dynamic scoping. diff --git a/lisp/dframe.el b/lisp/dframe.el index 66967075e34..3ef30d055b6 100644 --- a/lisp/dframe.el +++ b/lisp/dframe.el @@ -758,9 +758,8 @@ who requested the timer. NULL-ON-ERROR is ignored." Evaluates all cached timer functions in sequence." (let ((l dframe-client-functions)) (while (and l (sit-for 0)) - (condition-case er - (funcall (car l)) - (error (message "DFRAME TIMER ERROR: %S" er))) + (with-demoted-errors "DFRAME TIMER ERROR: %S" + (funcall (car l))) (setq l (cdr l))))) ;;; Menu hacking for mouse-3 diff --git a/lisp/emacs-lisp/copyright.el b/lisp/emacs-lisp/copyright.el index b3fc6fb887a..2b2189e70e3 100644 --- a/lisp/emacs-lisp/copyright.el +++ b/lisp/emacs-lisp/copyright.el @@ -1,7 +1,6 @@ ;;; copyright.el --- update the copyright notice in current buffer -;; Copyright (C) 1991-1995, 1998, 2001-2013 Free Software Foundation, -;; Inc. +;; Copyright (C) 1991-1995, 1998, 2001-2013 Free Software Foundation, Inc. ;; Author: Daniel Pfeiffer ;; Keywords: maint, tools @@ -145,18 +144,17 @@ The header must match `copyright-regexp' and `copyright-names-regexp', if set. This function sets the match-data that `copyright-update-year' uses." (widen) (goto-char (copyright-start-point)) - (condition-case err - ;; (1) Need the extra \\( \\) around copyright-regexp because we - ;; goto (match-end 1) below. See note (2) below. - (copyright-re-search (concat "\\(" copyright-regexp - "\\)\\([ \t]*\n\\)?.*\\(?:" - copyright-names-regexp "\\)") - (copyright-limit) - t) - ;; In case the regexp is rejected. This is useful because - ;; copyright-update is typically called from before-save-hook where - ;; such an error is very inconvenient for the user. - (error (message "Can't update copyright: %s" err) nil))) + ;; In case the regexp is rejected. This is useful because + ;; copyright-update is typically called from before-save-hook where + ;; such an error is very inconvenient for the user. + (with-demoted-errors "Can't update copyright: %s" + ;; (1) Need the extra \\( \\) around copyright-regexp because we + ;; goto (match-end 1) below. See note (2) below. + (copyright-re-search (concat "\\(" copyright-regexp + "\\)\\([ \t]*\n\\)?.*\\(?:" + copyright-names-regexp "\\)") + (copyright-limit) + t))) (defun copyright-find-end () "Possibly adjust the search performed by `copyright-find-copyright'. diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el index 9b9fd325941..250f93800ec 100644 --- a/lisp/emacs-lisp/eldoc.el +++ b/lisp/emacs-lisp/eldoc.el @@ -309,27 +309,26 @@ This variable is expected to be made buffer-local by modes (other than Emacs Lisp mode) that support ElDoc.") (defun eldoc-print-current-symbol-info () - (condition-case err - (and (or (eldoc-display-message-p) eldoc-post-insert-mode) - (if eldoc-documentation-function - (eldoc-message (funcall eldoc-documentation-function)) - (let* ((current-symbol (eldoc-current-symbol)) - (current-fnsym (eldoc-fnsym-in-current-sexp)) - (doc (cond - ((null current-fnsym) - nil) - ((eq current-symbol (car current-fnsym)) - (or (apply 'eldoc-get-fnsym-args-string - current-fnsym) - (eldoc-get-var-docstring current-symbol))) - (t - (or (eldoc-get-var-docstring current-symbol) - (apply 'eldoc-get-fnsym-args-string - current-fnsym)))))) - (eldoc-message doc)))) - ;; This is run from post-command-hook or some idle timer thing, - ;; so we need to be careful that errors aren't ignored. - (error (message "eldoc error: %s" err)))) + ;; This is run from post-command-hook or some idle timer thing, + ;; so we need to be careful that errors aren't ignored. + (with-demoted-errors "eldoc error: %s" + (and (or (eldoc-display-message-p) eldoc-post-insert-mode) + (if eldoc-documentation-function + (eldoc-message (funcall eldoc-documentation-function)) + (let* ((current-symbol (eldoc-current-symbol)) + (current-fnsym (eldoc-fnsym-in-current-sexp)) + (doc (cond + ((null current-fnsym) + nil) + ((eq current-symbol (car current-fnsym)) + (or (apply 'eldoc-get-fnsym-args-string + current-fnsym) + (eldoc-get-var-docstring current-symbol))) + (t + (or (eldoc-get-var-docstring current-symbol) + (apply 'eldoc-get-fnsym-args-string + current-fnsym)))))) + (eldoc-message doc)))))) (defun eldoc-get-fnsym-args-string (sym &optional index) "Return a string containing the parameter list of the function SYM. diff --git a/lisp/emulation/tpu-edt.el b/lisp/emulation/tpu-edt.el index 1ec0ecc943c..e2fcf2eae41 100644 --- a/lisp/emulation/tpu-edt.el +++ b/lisp/emulation/tpu-edt.el @@ -2374,9 +2374,8 @@ If FILE is nil, try to load a default file. The default file names are (goto-char (point-min)) (beep) (and (tpu-y-or-n-p "Copy key definitions to the new file now? ") - (condition-case conditions - (copy-file oldname newname) - (error (message "Sorry, couldn't copy - %s." (cdr conditions))))) + (with-demoted-errors "Sorry, couldn't copy - %s." + (copy-file oldname newname))) (kill-buffer "*TPU-Notice*"))) (defvar tpu-edt-old-global-values nil) diff --git a/lisp/files.el b/lisp/files.el index 85bbc8596be..ca55c646699 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3637,21 +3637,17 @@ FILE is the name of the file holding the variables to apply. The new class name is the same as the directory in which FILE is found. Returns the new class name." (with-temp-buffer - ;; This is with-demoted-errors, but we want to mention dir-locals - ;; in any error message. - (condition-case err - (progn - (insert-file-contents file) - (unless (zerop (buffer-size)) - (let* ((dir-name (file-name-directory file)) - (class-name (intern dir-name)) - (variables (let ((read-circle nil)) - (read (current-buffer))))) - (dir-locals-set-class-variables class-name variables) - (dir-locals-set-directory-class dir-name class-name - (nth 5 (file-attributes file))) - class-name))) - (error (message "Error reading dir-locals: %S" err) nil)))) + (with-demoted-errors "Error reading dir-locals: %S" + (insert-file-contents file) + (unless (zerop (buffer-size)) + (let* ((dir-name (file-name-directory file)) + (class-name (intern dir-name)) + (variables (let ((read-circle nil)) + (read (current-buffer))))) + (dir-locals-set-class-variables class-name variables) + (dir-locals-set-directory-class dir-name class-name + (nth 5 (file-attributes file))) + class-name))))) (defcustom enable-remote-dir-locals nil "Non-nil means dir-local variables will be applied to remote files." diff --git a/lisp/mpc.el b/lisp/mpc.el index 825eb3c05d4..bd61c261246 100644 --- a/lisp/mpc.el +++ b/lisp/mpc.el @@ -491,10 +491,9 @@ to call FUN for any change whatsoever.") (cancel-timer mpc--status-timer) (setq mpc--status-timer nil))) (defun mpc--status-timer-run () - (condition-case err - (when (process-get (mpc-proc) 'ready) - (with-local-quit (mpc-status-refresh))) - (error (message "MPC: %s" err)))) + (with-demoted-errors "MPC: %s" + (when (process-get (mpc-proc) 'ready) + (with-local-quit (mpc-status-refresh))))) (defvar mpc--status-idle-timer nil) (defun mpc--status-idle-timer-start () @@ -520,9 +519,8 @@ to call FUN for any change whatsoever.") (run-with-idle-timer 10 t 'mpc--status-idle-timer-run)))) (defun mpc--status-idle-timer-run () (when (process-get (mpc-proc) 'ready) - (condition-case err - (with-local-quit (mpc-status-refresh)) - (error (message "MPC: %s" err)))) + (with-demoted-errors "MPC: %s" + (with-local-quit (mpc-status-refresh)))) (mpc--status-timer-start)) (defun mpc--status-timers-refresh () @@ -999,9 +997,8 @@ If PLAYLIST is t or nil or missing, use the main playlist." (`Cover (let* ((dir (file-name-directory (cdr (assq 'file info)))) (cover (concat dir "cover.jpg")) - (file (condition-case err - (mpc-file-local-copy cover) - (error (message "MPC: %s" err)))) + (file (with-demoted-errors "MPC: %s" + (mpc-file-local-copy cover))) image) ;; (debug) (push `(equal ',dir (file-name-directory (cdr (assq 'file info)))) pred) diff --git a/lisp/play/bubbles.el b/lisp/play/bubbles.el index 665e98a69b2..ca7a4013796 100644 --- a/lisp/play/bubbles.el +++ b/lisp/play/bubbles.el @@ -1108,25 +1108,24 @@ Set `bubbles--col-offset' and `bubbles--row-offset'." Use optional parameter POS instead of point if given." (when bubbles--playing (unless pos (setq pos (point))) - (condition-case err - (let ((char (char-after pos)) - (inhibit-read-only t) - (row (bubbles--row (point))) - (col (bubbles--col (point)))) - (add-text-properties (point-min) (point-max) - '(face default active nil)) - (let ((count 0)) - (when (and row col (not (eq char (bubbles--empty-char)))) - (setq count (bubbles--mark-direct-neighbours row col char)) - (unless (> count 1) - (add-text-properties (point-min) (point-max) - '(face default active nil)) - (setq count 0))) - (bubbles--update-neighbourhood-score count)) - (put-text-property (point-min) (point-max) 'pointer 'arrow) - (bubbles--update-faces-or-images) - (sit-for 0)) - (error (message "Bubbles: Internal error %s" err))))) + (with-demoted-errors "Bubbles: Internal error %s" + (let ((char (char-after pos)) + (inhibit-read-only t) + (row (bubbles--row (point))) + (col (bubbles--col (point)))) + (add-text-properties (point-min) (point-max) + '(face default active nil)) + (let ((count 0)) + (when (and row col (not (eq char (bubbles--empty-char)))) + (setq count (bubbles--mark-direct-neighbours row col char)) + (unless (> count 1) + (add-text-properties (point-min) (point-max) + '(face default active nil)) + (setq count 0))) + (bubbles--update-neighbourhood-score count)) + (put-text-property (point-min) (point-max) 'pointer 'arrow) + (bubbles--update-faces-or-images) + (sit-for 0))))) (defun bubbles--neighbourhood-available () "Return t if another valid neighborhood is available." diff --git a/lisp/progmodes/executable.el b/lisp/progmodes/executable.el index a305393c7d8..7b08df8b85f 100644 --- a/lisp/progmodes/executable.el +++ b/lisp/progmodes/executable.el @@ -269,16 +269,15 @@ file modes." (save-restriction (widen) (string= "#!" (buffer-substring (point-min) (+ 2 (point-min))))) - (condition-case nil - (let* ((current-mode (file-modes (buffer-file-name))) - (add-mode (logand ?\111 (default-file-modes)))) - (or (/= (logand ?\111 current-mode) 0) - (zerop add-mode) - (set-file-modes (buffer-file-name) - (logior current-mode add-mode)))) - ;; Eg file-modes can return nil (bug#9879). It should not, - ;; in this context, but we should handle it all the same. - (error (message "Unable to make file executable"))))) + ;; Eg file-modes can return nil (bug#9879). It should not, + ;; in this context, but we should handle it all the same. + (with-demoted-errors "Unable to make file executable: %s" + (let* ((current-mode (file-modes (buffer-file-name))) + (add-mode (logand ?\111 (default-file-modes)))) + (or (/= (logand ?\111 current-mode) 0) + (zerop add-mode) + (set-file-modes (buffer-file-name) + (logior current-mode add-mode))))))) (provide 'executable) diff --git a/lisp/reveal.el b/lisp/reveal.el index 92c1178041c..6740f7e923f 100644 --- a/lisp/reveal.el +++ b/lisp/reveal.el @@ -72,27 +72,26 @@ Each element has the form (WINDOW . OVERLAY).") ;; - we only refresh spots in the current window. ;; FIXME: do we actually know that (current-buffer) = (window-buffer) ? (with-local-quit - (condition-case err - (let ((old-ols - (delq nil - (mapcar - (lambda (x) - ;; We refresh any spot in the current window as well - ;; as any spots associated with a dead window or - ;; a window which does not show this buffer any more. - (cond - ((eq (car x) (selected-window)) (cdr x)) - ((not (and (window-live-p (car x)) - (eq (window-buffer (car x)) (current-buffer)))) - ;; Adopt this since it's owned by a window that's - ;; either not live or at least not showing this - ;; buffer any more. - (setcar x (selected-window)) - (cdr x)))) - reveal-open-spots)))) - (setq old-ols (reveal-open-new-overlays old-ols)) - (reveal-close-old-overlays old-ols)) - (error (message "Reveal: %s" err))))) + (with-demoted-errors "Reveal: %s" + (let ((old-ols + (delq nil + (mapcar + (lambda (x) + ;; We refresh any spot in the current window as well + ;; as any spots associated with a dead window or + ;; a window which does not show this buffer any more. + (cond + ((eq (car x) (selected-window)) (cdr x)) + ((not (and (window-live-p (car x)) + (eq (window-buffer (car x)) (current-buffer)))) + ;; Adopt this since it's owned by a window that's + ;; either not live or at least not showing this + ;; buffer any more. + (setcar x (selected-window)) + (cdr x)))) + reveal-open-spots)))) + (setq old-ols (reveal-open-new-overlays old-ols)) + (reveal-close-old-overlays old-ols))))) (defun reveal-open-new-overlays (old-ols) (let ((repeat t)) diff --git a/lisp/saveplace.el b/lisp/saveplace.el index e9dc12b00fe..e070a7da489 100644 --- a/lisp/saveplace.el +++ b/lisp/saveplace.el @@ -255,13 +255,9 @@ may have changed\) back to `save-place-alist'." (insert-file-contents file) (goto-char (point-min)) (setq save-place-alist - ;; This is with-demoted-errors, but we want to - ;; mention save-place in any error message. - (condition-case err + (with-demoted-errors "Error reading save-place-file: %S" (car (read-from-string - (buffer-substring (point-min) (point-max)))) - (error (message "Error reading save-place-file: %S" err) - nil))) + (buffer-substring (point-min) (point-max)))))) ;; If there is a limit, and we're over it, then we'll ;; have to truncate the end of the list: diff --git a/lisp/shell.el b/lisp/shell.el index 3ca2564b65c..387d1057bd4 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -1,7 +1,6 @@ ;;; shell.el --- specialized comint.el for running the shell -*- lexical-binding: t -*- -;; Copyright (C) 1988, 1993-1997, 2000-2013 Free Software Foundation, -;; Inc. +;; Copyright (C) 1988, 1993-1997, 2000-2013 Free Software Foundation, Inc. ;; Author: Olin Shivers ;; Simon Marshall @@ -1015,12 +1014,11 @@ command again." ds)) (setq i (match-end 0))) (let ((ds (nreverse ds))) - (condition-case nil - (progn (shell-cd (car ds)) - (setq shell-dirstack (cdr ds) - shell-last-dir (car shell-dirstack)) - (shell-dirstack-message)) - (error (message "Couldn't cd")))))) + (with-demoted-errors "Couldn't cd: %s" + (shell-cd (car ds)) + (setq shell-dirstack (cdr ds) + shell-last-dir (car shell-dirstack)) + (shell-dirstack-message))))) (if started-at-pmark (goto-char (marker-position pmark))))) ;; For your typing convenience: diff --git a/lisp/term/pc-win.el b/lisp/term/pc-win.el index 96831cea9a6..e5229bd3f0a 100644 --- a/lisp/term/pc-win.el +++ b/lisp/term/pc-win.el @@ -1,7 +1,7 @@ ;;; pc-win.el --- setup support for `PC windows' (whatever that is) -;; Copyright (C) 1994, 1996-1997, 1999, 2001-2013 Free Software -;; Foundation, Inc. +;; Copyright (C) 1994, 1996-1997, 1999, 2001-2013 +;; Free Software Foundation, Inc. ;; Author: Morten Welinder ;; Maintainer: FSF @@ -238,9 +238,8 @@ is not used)." (if x-select-enable-clipboard (let (text) ;; Don't die if x-get-selection signals an error. - (condition-case c - (setq text (w16-get-clipboard-data)) - (error (message "w16-get-clipboard-data:%s" c))) + (with-demoted-errors "w16-get-clipboard-data:%s" + (setq text (w16-get-clipboard-data))) (if (string= text "") (setq text nil)) (cond ((not text) nil) diff --git a/lisp/w32-common-fns.el b/lisp/w32-common-fns.el index 9f3501a01d7..5d8d7171860 100644 --- a/lisp/w32-common-fns.el +++ b/lisp/w32-common-fns.el @@ -107,9 +107,8 @@ Consult the selection. Treat empty strings as if they were unset." (if x-select-enable-clipboard (let (text) ;; Don't die if x-get-selection signals an error. - (condition-case c - (setq text (w32-get-clipboard-data)) - (error (message "w32-get-clipboard-data:%s" c))) + (with-demoted-errors "w32-get-clipboard-data:%s" + (setq text (w32-get-clipboard-data))) (if (string= text "") (setq text nil)) (cond ((not text) nil) From 8c05cb1082e51eb6367fba2f5dc0115113b6c2a1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 22:40:50 -0700 Subject: [PATCH 086/321] Fix some minor shell.el oddness related to usage of error and message * lisp/shell.el (shell-directory-tracker): Output error as a message rather than just returning it as a string. (shell-process-pushd): Remove useless use of message. --- lisp/ChangeLog | 4 ++++ lisp/shell.el | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d5b6b09aab7..70ef9480ab4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2013-09-12 Glenn Morris + * shell.el (shell-directory-tracker): Output error as a message + rather than just returning it as a string. + (shell-process-pushd): Remove useless use of message. + * dframe.el (dframe-timer-fn): * files.el (dir-locals-read-from-file): * mpc.el (mpc--status-timer-run, mpc--status-idle-timer-run) diff --git a/lisp/shell.el b/lisp/shell.el index 387d1057bd4..2047543f288 100644 --- a/lisp/shell.el +++ b/lisp/shell.el @@ -791,7 +791,7 @@ and `shell-pushd-dunique' control the behavior of the relevant command. Environment variables are expanded, see function `substitute-in-file-name'." (if shell-dirtrackp ;; We fail gracefully if we think the command will fail in the shell. - (condition-case nil + (with-demoted-errors "Couldn't cd: %s" (let ((start (progn (string-match (concat "^" shell-command-separator-regexp) str) ; skip whitespace @@ -824,8 +824,7 @@ Environment variables are expanded, see function `substitute-in-file-name'." (setq start (progn (string-match shell-command-separator-regexp str end) ;; skip again - (match-end 0))))) - (error "Couldn't cd")))) + (match-end 0)))))))) (defun shell-unquote-argument (string) "Remove all kinds of shell quoting from STRING." @@ -907,7 +906,7 @@ Environment variables are expanded, see function `substitute-in-file-name'." (cond ((> num (length shell-dirstack)) (message "Directory stack not that deep.")) ((= num 0) - (error (message "Couldn't cd"))) + (error "Couldn't cd")) (shell-pushd-dextract (let ((dir (nth (1- num) shell-dirstack))) (shell-process-popd arg) From 30b626e980fab414ad1c0cfb06387afb804f0204 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 22:43:23 -0700 Subject: [PATCH 087/321] * lisp/progmodes/octave.el (help-button-action): Declare. --- lisp/ChangeLog | 2 ++ lisp/progmodes/octave.el | 3 +++ 2 files changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 70ef9480ab4..f413e410de6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-12 Glenn Morris + * progmodes/octave.el (help-button-action): Declare. + * shell.el (shell-directory-tracker): Output error as a message rather than just returning it as a string. (shell-process-pushd): Remove useless use of message. diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el index de1c26a7fa7..f20a57940be 100644 --- a/lisp/progmodes/octave.el +++ b/lisp/progmodes/octave.el @@ -1581,6 +1581,9 @@ code line." :group 'octave :version "24.4") +;; Used in a mode derived from help-mode. +(declare-function help-button-action "help-mode" (button)) + (define-button-type 'octave-help-file 'follow-link t 'action #'help-button-action From 08d664200f0a49b15c2b17a673f1b10881d109fa Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 22:43:55 -0700 Subject: [PATCH 088/321] * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize-function): Declare. --- lisp/ChangeLog | 2 ++ lisp/progmodes/ruby-mode.el | 1 + 2 files changed, 3 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f413e410de6..1cca32a55c4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-12 Glenn Morris + * progmodes/ruby-mode.el (ruby-syntax-propertize-function): Declare. + * progmodes/octave.el (help-button-action): Declare. * shell.el (shell-directory-tracker): Output error as a message diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 0f868255589..902616e3023 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1377,6 +1377,7 @@ If the result is do-end block, it will always be multiline." ;; Unusual code layout confuses the byte-compiler. (declare-function ruby-syntax-propertize-expansion "ruby-mode" ()) (declare-function ruby-syntax-expansion-allowed-p "ruby-mode" (parse-state)) +(declare-function ruby-syntax-propertize-function "ruby-mode" (start end)) (if (eval-when-compile (fboundp #'syntax-propertize-rules)) ;; New code that works independently from font-lock. From 96b3f75a809761389cbbdc2eb0ed85f4559a8eef Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 22:45:42 -0700 Subject: [PATCH 089/321] Silence some vc- compilation warnings * vc/vc-bzr.el (vc-exec-after): Remove unused declaration. (vc-compilation-mode): Declare. (vc-bzr-pull): Require vc-dispatcher. * vc/vc-git.el (vc-compilation-mode): Declare. (vc-git-pull): Require vc-dispatcher. --- lisp/ChangeLog | 6 ++++++ lisp/vc/vc-bzr.el | 7 +++---- lisp/vc/vc-git.el | 4 ++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1cca32a55c4..beeb53d5c31 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,11 @@ 2013-09-12 Glenn Morris + * vc/vc-bzr.el (vc-exec-after): Remove unused declaration. + (vc-compilation-mode): Declare. + (vc-bzr-pull): Require vc-dispatcher. + * vc/vc-git.el (vc-compilation-mode): Declare. + (vc-git-pull): Require vc-dispatcher. + * progmodes/ruby-mode.el (ruby-syntax-propertize-function): Declare. * progmodes/octave.el (help-button-action): Declare. diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index 5f5416dc2ff..3b8643e22f4 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -320,11 +320,9 @@ in the repository root directory of FILE." ("^Using saved parent location: \\(.+\\)" 1 nil nil 0)) "Value of `compilation-error-regexp-alist' in *vc-bzr* buffers.") -;; Follows vc-bzr-(async-)command, which uses vc-do-(async-)command -;; from vc-dispatcher. -(declare-function vc-exec-after "vc-dispatcher" (code)) -;; Follows vc-exec-after. +;; To be called via vc-pull from vc.el, which requires vc-dispatcher. (declare-function vc-set-async-update "vc-dispatcher" (process-buffer)) +(declare-function vc-compilation-mode "vc-dispatcher" (backend)) (defun vc-bzr-pull (prompt) "Pull changes into the current Bzr branch. @@ -354,6 +352,7 @@ prompt for the Bzr command to run." (setq vc-bzr-program (car args) command (cadr args) args (cddr args))) + (require 'vc-dispatcher) (let ((buf (apply 'vc-bzr-async-command command args))) (with-current-buffer buf (vc-run-delayed (vc-compilation-mode 'bzr))) (vc-set-async-update buf)))) diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index a4ce3a2c46c..e730db17526 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -706,6 +706,9 @@ It is based on `log-edit-mode', and has Git-specific extensions.") '(("^ \\(.+\\) |" 1 nil nil 0)) "Value of `compilation-error-regexp-alist' in *vc-git* buffers.") +;; To be called via vc-pull from vc.el, which requires vc-dispatcher. +(declare-function vc-compilation-mode "vc-dispatcher" (backend)) + (defun vc-git-pull (prompt) "Pull changes into the current Git branch. Normally, this runs \"git pull\". If PROMPT is non-nil, prompt @@ -725,6 +728,7 @@ for the Git command to run." (setq git-program (car args) command (cadr args) args (cddr args))) + (require 'vc-dispatcher) (apply 'vc-do-async-command buffer root git-program command args) (with-current-buffer buffer (vc-run-delayed (vc-compilation-mode 'git))) (vc-set-async-update buffer))) From 16d9f8966f7aa73f9e7bae8e208c7a35c03cb54d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 22:48:22 -0700 Subject: [PATCH 090/321] Update some function declarations * calc/calc-help.el (Info-goto-node): * progmodes/cperl-mode.el (Info-find-node): * vc/ediff.el (Info-goto-node): Update declarations. --- lisp/ChangeLog | 4 ++++ lisp/calc/calc-help.el | 2 +- lisp/progmodes/cperl-mode.el | 2 +- lisp/vc/ediff.el | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index beeb53d5c31..6d7a87f0915 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2013-09-12 Glenn Morris + * calc/calc-help.el (Info-goto-node): + * progmodes/cperl-mode.el (Info-find-node): + * vc/ediff.el (Info-goto-node): Update declarations. + * vc/vc-bzr.el (vc-exec-after): Remove unused declaration. (vc-compilation-mode): Declare. (vc-bzr-pull): Require vc-dispatcher. diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el index 2b7b56c3f89..641453568ca 100644 --- a/lisp/calc/calc-help.el +++ b/lisp/calc/calc-help.el @@ -30,7 +30,7 @@ (require 'calc-macs) ;; Declare functions which are defined elsewhere. -(declare-function Info-goto-node "info" (nodename &optional fork)) +(declare-function Info-goto-node "info" (nodename &optional fork strict-case)) (declare-function Info-last "info" ()) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index cc6c8234dd2..8a7d1e77bd2 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -6535,7 +6535,7 @@ side-effect of memorizing only. Examples in `cperl-style-examples'." (eval '(mode-compile)))) ; Avoid a warning (declare-function Info-find-node "info" - (filename nodename &optional no-going-back)) + (filename nodename &optional no-going-back strict-case)) (defun cperl-info-buffer (type) ;; Returns buffer with documentation. Creates if missing. diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el index 9ab592587c9..fc47bf0fc10 100644 --- a/lisp/vc/ediff.el +++ b/lisp/vc/ediff.el @@ -1481,7 +1481,7 @@ When called interactively, displays the version." (format "Ediff %s of %s" ediff-version ediff-date))) ;; info is run first, and will autoload info.el. -(declare-function Info-goto-node "info" (nodename &optional fork)) +(declare-function Info-goto-node "info" (nodename &optional fork strict-case)) ;;;###autoload (defun ediff-documentation (&optional node) From 40e64f0cbd0a3457b29b3e38d1424c37b7b4a03f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 23:10:12 -0700 Subject: [PATCH 091/321] * lisp/vc/vc.el (vc-deduce-fileset): Doc fix. --- lisp/ChangeLog | 2 ++ lisp/vc/vc.el | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6d7a87f0915..37f63216ff6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-12 Glenn Morris + * vc/vc.el (vc-deduce-fileset): Doc fix. + * calc/calc-help.el (Info-goto-node): * progmodes/cperl-mode.el (Info-find-node): * vc/ediff.el (Info-goto-node): Update declarations. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 39e3fbdc29a..fa5c87d44e3 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -965,7 +965,8 @@ Within directories, only files already under version control are noticed." "Deduce a set of files and a backend to which to apply an operation. Return (BACKEND FILESET FILESET-ONLY-FILES STATE CHECKOUT-MODEL). -If we're in VC-dir mode, FILESET is the list of marked files. +If we're in VC-dir mode, FILESET is the list of marked files, +or the directory if no files are marked. Otherwise, if in a buffer visiting a version-controlled file, FILESET is a single-file fileset containing that file. Otherwise, if ALLOW-UNREGISTERED is non-nil and the visited file From a6ae021fd380c089f25ebbc341fb1c989827ae32 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 23:21:33 -0700 Subject: [PATCH 092/321] * vc/vc-svn.el (vc-svn-parse-status): If there are multiple files in the status output, assume `filename' is the first. Fixes: debbugs:15322 --- lisp/ChangeLog | 3 +++ lisp/vc/vc-svn.el | 16 ++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 37f63216ff6..37005de6776 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-12 Glenn Morris + * vc/vc-svn.el (vc-svn-parse-status): If there are multiple files + in the status output, assume `filename' is the first. (Bug#15322) + * vc/vc.el (vc-deduce-fileset): Doc fix. * calc/calc-help.el (Info-goto-node): diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el index afc76c09742..bfd608c0467 100644 --- a/lisp/vc/vc-svn.el +++ b/lisp/vc/vc-svn.el @@ -674,19 +674,23 @@ and that it passes `vc-svn-global-switches' to it before FLAGS." (defun vc-svn-parse-status (&optional filename) "Parse output of \"svn status\" command in the current buffer. -Set file properties accordingly. Unless FILENAME is non-nil, parse only -information about FILENAME and return its status." - (let (file status propstat) +Set file properties accordingly. If FILENAME is non-nil, return its status." + (let (multifile file status propstat) (goto-char (point-min)) (while (re-search-forward ;; Ignore the files with status X. "^\\(?:\\?\\|[ ACDGIMR!~][ MC][ L][ +][ S]..\\([ *]\\) +\\([-0-9]+\\) +\\([0-9?]+\\) +\\([^ ]+\\)\\) +" nil t) ;; If the username contains spaces, the output format is ambiguous, ;; so don't trust the output's filename unless we have to. - (setq file (or filename + (setq file (or (unless multifile filename) (expand-file-name - (buffer-substring (point) (line-end-position))))) - (setq status (char-after (line-beginning-position)) + (buffer-substring (point) (line-end-position)))) + ;; If we are parsing the result of running status on a directory, + ;; there could be multiple files in the output. + ;; We assume that filename, if supplied, applies to the first + ;; listed file (ie, the directory). Bug#15322. + multifile t + status (char-after (line-beginning-position)) ;; Status of the item's properties ([ MC]). propstat (char-after (1+ (line-beginning-position)))) (if (eq status ??) From 8ffbc36b766d463cb4d86b6c2e5c9054a9c91234 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Thu, 12 Sep 2013 10:29:13 +0400 Subject: [PATCH 093/321] * xterm.c (x_set_scroll_bar_thumb) [USE_LUCID && !HAVE_XAW3D]: Clip scroll bar values to prevent thumb from disappear and update comment. --- src/ChangeLog | 5 +++++ src/xterm.c | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e1276f54d03..88aa22b30dc 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-12 Dmitry Antipov + + * xterm.c (x_set_scroll_bar_thumb) [USE_LUCID && !HAVE_XAW3D]: Clip + scroll bar values to prevent thumb from disappear and update comment. + 2013-09-11 Glenn Morris * emacs.c (usage_message): Possessive apostrophe tweak. diff --git a/src/xterm.c b/src/xterm.c index 7ad790edd61..cd60915e056 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -4798,12 +4798,21 @@ x_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar, int portion, int positio top = max (0, min (1, top)); else top = old_top; +#if ! defined (HAVE_XAW3D) + /* With Xaw, 'top' values too closer to 1.0 may + cause the thumb to disappear. Fix that. */ + top = min (top, 0.99f); +#endif /* Keep two pixels available for moving the thumb down. */ shown = max (0, min (1 - top - (2.0f / height), shown)); +#if ! defined (HAVE_XAW3D) + /* Likewise with too small 'shown'. */ + shown = max (shown, 0.01f); +#endif - /* If the call to XawScrollbarSetThumb below doesn't seem to work, - check that your system's configuration file contains a define - for `NARROWPROTO'. See s/freebsd.h for an example. */ + /* If the call to XawScrollbarSetThumb below doesn't seem to + work, check that 'NARROWPROTO' is defined in src/config.h. + If this is not so, most likely you need to fix configure. */ if (top != old_top || shown != old_shown) { if (bar->dragging == -1) From 44915370e8c39adf7c9d65c29241269c454964aa Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 23:37:02 -0700 Subject: [PATCH 094/321] * subr.el (do-after-load-evaluation): Also give compiler warnings when obsolete files are used (except by obsolete files). --- lisp/ChangeLog | 3 +++ lisp/subr.el | 27 +++++++++++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 37005de6776..1713efc07e0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-12 Glenn Morris + * subr.el (do-after-load-evaluation): Also give compiler warnings + when obsolete files are used (except by obsolete files). + * vc/vc-svn.el (vc-svn-parse-status): If there are multiple files in the status output, assume `filename' is the first. (Bug#15322) diff --git a/lisp/subr.el b/lisp/subr.el index de7c629b208..7df1e86b5bf 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -3907,12 +3907,27 @@ This function is called directly from the C code." (mapc #'funcall (cdr a-l-element)))) ;; Complain when the user uses obsolete files. (when (string-match-p "/obsolete/[^/]*\\'" abs-file) - (run-with-timer 0 nil - (lambda (file) - (message "Package %s is obsolete!" - (substring file 0 - (string-match "\\.elc?\\>" file)))) - (file-name-nondirectory abs-file))) + ;; Maybe we should just use display-warning? This seems yucky... + (let* ((file (file-name-nondirectory abs-file)) + (msg (format "Package %s is obsolete!" + (substring file 0 + (string-match "\\.elc?\\>" file))))) + ;; Cribbed from cl--compiling-file. + (if (and (boundp 'byte-compile--outbuffer) + (bufferp (symbol-value 'byte-compile--outbuffer)) + (equal (buffer-name (symbol-value 'byte-compile--outbuffer)) + " *Compiler Output*")) + ;; Don't warn about obsolete files using other obsolete files. + (unless (and (stringp byte-compile-current-file) + (string-match-p "/obsolete/[^/]*\\'" + (expand-file-name + byte-compile-current-file + byte-compile-root-dir))) + (byte-compile-log-warning msg)) + (run-with-timer 0 nil + (lambda (msg) + (message "%s" msg)) msg)))) + ;; Finally, run any other hook. (run-hook-with-args 'after-load-functions abs-file)) From a99f655b99b9596ab6b11d6890c39c2dde93d6e1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 23:47:07 -0700 Subject: [PATCH 095/321] gnus-icalendar small fix * gnus/gnus-icalendar.el (gnus-icalendar-event--build-reply-event-body): Avoid using `find', which i) might not be defined at runtime; ii) does not work, since its default test is eql, not equal. (gnus-mime-action-alist): Declare. --- lisp/gnus/ChangeLog | 7 +++++++ lisp/gnus/gnus-icalendar.el | 8 +++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 1bf7bb588f0..2eea1fb833e 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,10 @@ +2013-09-12 Glenn Morris + + * gnus-icalendar.el (gnus-icalendar-event--build-reply-event-body): + Avoid using `find', which i) might not be defined at runtime; + ii) does not work, since its default test is eql, not equal. + (gnus-mime-action-alist): Declare. + 2013-09-11 Stefan Monnier * score-mode.el (gnus-score-mode-map): Move initialization diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el index a946a586033..e4e1ec29ae9 100644 --- a/lisp/gnus/gnus-icalendar.el +++ b/lisp/gnus/gnus-icalendar.el @@ -257,9 +257,9 @@ status will be retrieved from the first matching attendee record." ((string= key "ATTENDEE") (update-attendee-status line)) ((string= key "SUMMARY") (update-summary line)) ((string= key "DTSTAMP") (update-dtstamp)) - ((find key '("ORGANIZER" "DTSTART" "DTEND" - "LOCATION" "DURATION" "SEQUENCE" - "RECURRENCE-ID" "UID")) line) + ((member key '("ORGANIZER" "DTSTART" "DTEND" + "LOCATION" "DURATION" "SEQUENCE" + "RECURRENCE-ID" "UID")) line) (t nil)))) (when new-line (push new-line reply-event-lines)))))) @@ -816,6 +816,8 @@ is searched." (gnus-icalendar-show-org-agenda (with-current-buffer gnus-article-buffer gnus-icalendar-event))) +(defvar gnus-mime-action-alist) ; gnus-art + (defun gnus-icalendar-setup () (add-to-list 'mm-inlined-types "text/calendar") (add-to-list 'mm-automatic-display "text/calendar") From 759880bff7ed8b310eba4583943b67889a482638 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 23:50:18 -0700 Subject: [PATCH 096/321] Revert part of previous vc-bzr change --- lisp/ChangeLog | 3 +-- lisp/vc/vc-bzr.el | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1713efc07e0..c33fccdec9f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -12,8 +12,7 @@ * progmodes/cperl-mode.el (Info-find-node): * vc/ediff.el (Info-goto-node): Update declarations. - * vc/vc-bzr.el (vc-exec-after): Remove unused declaration. - (vc-compilation-mode): Declare. + * vc/vc-bzr.el (vc-compilation-mode): Declare. (vc-bzr-pull): Require vc-dispatcher. * vc/vc-git.el (vc-compilation-mode): Declare. (vc-git-pull): Require vc-dispatcher. diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index 3b8643e22f4..00604088c17 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -321,6 +321,7 @@ in the repository root directory of FILE." "Value of `compilation-error-regexp-alist' in *vc-bzr* buffers.") ;; To be called via vc-pull from vc.el, which requires vc-dispatcher. +(declare-function vc-exec-after "vc-dispatcher" (code)) (declare-function vc-set-async-update "vc-dispatcher" (process-buffer)) (declare-function vc-compilation-mode "vc-dispatcher" (backend)) From be94d7130041927a372f21bb2afeddafb4f92e5c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 23:53:57 -0700 Subject: [PATCH 097/321] * vc/vc-svn.el (vc-svn-dir-status-files, vc-svn-dir-extra-headers) (vc-svn-ignore): Mark unused arguments. --- lisp/ChangeLog | 3 +++ lisp/vc/vc-svn.el | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c33fccdec9f..8316c43bda0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-12 Glenn Morris + * vc/vc-svn.el (vc-svn-dir-status-files, vc-svn-dir-extra-headers) + (vc-svn-ignore): Mark unused arguments. + * subr.el (do-after-load-evaluation): Also give compiler warnings when obsolete files are used (except by obsolete files). diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el index bfd608c0467..d2c770de53b 100644 --- a/lisp/vc/vc-svn.el +++ b/lisp/vc/vc-svn.el @@ -234,12 +234,12 @@ RESULT is a list of conses (FILE . STATE) for directory DIR." (vc-run-delayed (vc-svn-after-dir-status callback remote)))) -(defun vc-svn-dir-status-files (dir files _default-state callback) +(defun vc-svn-dir-status-files (_dir files _default-state callback) (apply 'vc-svn-command (current-buffer) 'async nil "status" files) (vc-run-delayed (vc-svn-after-dir-status callback))) -(defun vc-svn-dir-extra-headers (dir) +(defun vc-svn-dir-extra-headers (_dir) "Generate extra status headers for a Subversion working copy." (let (process-file-side-effects) (vc-svn-command "*vc*" 0 nil "info")) @@ -352,7 +352,7 @@ This is only possible if SVN is responsible for FILE's directory.") (concat "-r" rev)) (vc-switches 'SVN 'checkout)))) -(defun vc-svn-ignore (file &optional directory remove) +(defun vc-svn-ignore (file &optional _directory _remove) "Ignore FILE under Subversion. FILE is a file wildcard, relative to the root directory of DIRECTORY." (vc-svn-command t 0 file "propedit" "svn:ignore")) From aa30fa6f3a4273adcfa1cba183a74a5aeb47b463 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 23:55:15 -0700 Subject: [PATCH 098/321] * vc/vc-svn.el (vc-svn-retrieve-tag): Mark unused argument. --- lisp/ChangeLog | 2 +- lisp/vc/vc-svn.el | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8316c43bda0..e4bf56d24d7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,7 @@ 2013-09-12 Glenn Morris * vc/vc-svn.el (vc-svn-dir-status-files, vc-svn-dir-extra-headers) - (vc-svn-ignore): Mark unused arguments. + (vc-svn-ignore, vc-svn-retrieve-tag): Mark unused arguments. * subr.el (do-after-load-evaluation): Also give compiler warnings when obsolete files are used (except by obsolete files). diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el index d2c770de53b..36f27548123 100644 --- a/lisp/vc/vc-svn.el +++ b/lisp/vc/vc-svn.el @@ -593,7 +593,7 @@ NAME is assumed to be a URL." (vc-svn-command nil 0 dir "copy" name) (when branchp (vc-svn-retrieve-tag dir name nil))) -(defun vc-svn-retrieve-tag (dir name update) +(defun vc-svn-retrieve-tag (dir name _update) "Retrieve a tag at and below DIR. NAME is the name of the tag; if it is empty, do a `svn update'. If UPDATE is non-nil, then update (resynch) any affected buffers. From dea01c6e980d2a95f6331879a97069515d153892 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 11 Sep 2013 23:58:57 -0700 Subject: [PATCH 099/321] * vc/vc-dispatcher.el (vc-dir-refresh): Declare. --- lisp/ChangeLog | 2 ++ lisp/vc/vc-dispatcher.el | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e4bf56d24d7..cdf601e6259 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -15,6 +15,8 @@ * progmodes/cperl-mode.el (Info-find-node): * vc/ediff.el (Info-goto-node): Update declarations. + * vc/vc-dispatcher.el (vc-dir-refresh): Declare. + * vc/vc-bzr.el (vc-compilation-mode): Declare. (vc-bzr-pull): Require vc-dispatcher. * vc/vc-git.el (vc-compilation-mode): Declare. diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el index 7888752553e..62fb72d0fbc 100644 --- a/lisp/vc/vc-dispatcher.el +++ b/lisp/vc/vc-dispatcher.el @@ -398,6 +398,8 @@ Display the buffer in some window, but don't select it." (set (make-local-variable 'compilation-error-regexp-alist) error-regexp-alist))) +(declare-function vc-dir-refresh "vc-dir" ()) + (defun vc-set-async-update (process-buffer) "Set a `vc-exec-after' action appropriate to the current buffer. This action will update the current buffer after the current From 4a503aef7e09570c24ec7f68ddc8cb7470cc17ef Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 12 Sep 2013 00:00:52 -0700 Subject: [PATCH 100/321] Remove superflous comment --- lisp/play/spook.el | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lisp/play/spook.el b/lisp/play/spook.el index 08c31d3878b..d2ecd3a62cc 100644 --- a/lisp/play/spook.el +++ b/lisp/play/spook.el @@ -69,10 +69,6 @@ "Checking authorization..." "Checking authorization...Approved")) -;; Note: the implementation that used to take up most of this file has been -;; cleaned up, generalized, gratuitously broken by esr, and now resides in -;; cookie1.el. - (provide 'spook) ;;; spook.el ends here From 27e90f7752ed9d02cb98dd2dc2886a4f052240ab Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Thu, 12 Sep 2013 11:29:33 +0400 Subject: [PATCH 101/321] * xterm.h (x_display_info): New field last_user_time... * xterm.c (toplevel): ...to replace static last_user_time. (handle_one_xevent, x_ewmh_activate_frame): Adjust users. --- src/ChangeLog | 6 ++++++ src/xterm.c | 31 ++++++++++++++----------------- src/xterm.h | 3 +++ 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 88aa22b30dc..069a9885b4c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-09-12 Dmitry Antipov + + * xterm.h (x_display_info): New field last_user_time... + * xterm.c (toplevel): ...to replace static last_user_time. + (handle_one_xevent, x_ewmh_activate_frame): Adjust users. + 2013-09-12 Dmitry Antipov * xterm.c (x_set_scroll_bar_thumb) [USE_LUCID && !HAVE_XAW3D]: Clip diff --git a/src/xterm.c b/src/xterm.c index cd60915e056..c28ca824063 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -230,10 +230,6 @@ static Lisp_Object last_mouse_scroll_bar; static Time last_mouse_movement_time; -/* Time for last user interaction as returned in X events. */ - -static Time last_user_time; - /* Incremented by XTread_socket whenever it really tries to read events. */ @@ -5979,7 +5975,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, break; case SelectionNotify: - last_user_time = event.xselection.time; + dpyinfo->last_user_time = event.xselection.time; #ifdef USE_X_TOOLKIT if (! x_window_to_frame (dpyinfo, event.xselection.requestor)) goto OTHER; @@ -5988,7 +5984,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, break; case SelectionClear: /* Someone has grabbed ownership. */ - last_user_time = event.xselectionclear.time; + dpyinfo->last_user_time = event.xselectionclear.time; #ifdef USE_X_TOOLKIT if (! x_window_to_frame (dpyinfo, event.xselectionclear.window)) goto OTHER; @@ -6004,7 +6000,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, break; case SelectionRequest: /* Someone wants our selection. */ - last_user_time = event.xselectionrequest.time; + dpyinfo->last_user_time = event.xselectionrequest.time; #ifdef USE_X_TOOLKIT if (!x_window_to_frame (dpyinfo, event.xselectionrequest.owner)) goto OTHER; @@ -6023,7 +6019,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, break; case PropertyNotify: - last_user_time = event.xproperty.time; + dpyinfo->last_user_time = event.xproperty.time; f = x_top_window_to_frame (dpyinfo, event.xproperty.window); if (f && event.xproperty.atom == dpyinfo->Xatom_net_wm_state) if (x_handle_net_wm_state (f, &event.xproperty) @@ -6223,7 +6219,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, case KeyPress: - last_user_time = event.xkey.time; + dpyinfo->last_user_time = event.xkey.time; ignore_next_mouse_click_timeout = 0; #if defined (USE_X_TOOLKIT) || defined (USE_GTK) @@ -6554,7 +6550,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #endif case KeyRelease: - last_user_time = event.xkey.time; + dpyinfo->last_user_time = event.xkey.time; #ifdef HAVE_X_I18N /* Don't dispatch this event since XtDispatchEvent calls XFilterEvent, and two calls in a row may freeze the @@ -6565,7 +6561,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #endif case EnterNotify: - last_user_time = event.xcrossing.time; + dpyinfo->last_user_time = event.xcrossing.time; x_detect_focus_change (dpyinfo, &event, &inev.ie); f = x_any_window_to_frame (dpyinfo, event.xcrossing.window); @@ -6590,7 +6586,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, goto OTHER; case LeaveNotify: - last_user_time = event.xcrossing.time; + dpyinfo->last_user_time = event.xcrossing.time; x_detect_focus_change (dpyinfo, &event, &inev.ie); f = x_top_window_to_frame (dpyinfo, event.xcrossing.window); @@ -6624,7 +6620,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, case MotionNotify: { - last_user_time = event.xmotion.time; + dpyinfo->last_user_time = event.xmotion.time; previous_help_echo_string = help_echo_string; help_echo_string = Qnil; @@ -6767,9 +6763,9 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, by the rest of Emacs, we put it here. */ bool tool_bar_p = 0; - memset (&compose_status, 0, sizeof (compose_status)); + memset (&compose_status, 0, sizeof (compose_status)); last_mouse_glyph_frame = 0; - last_user_time = event.xbutton.time; + dpyinfo->last_user_time = event.xbutton.time; if (dpyinfo->grabbed && last_mouse_frame @@ -8859,8 +8855,9 @@ x_ewmh_activate_frame (struct frame *f) Lisp_Object frame; XSETFRAME (frame, f); x_send_client_event (frame, make_number (0), frame, - dpyinfo->Xatom_net_active_window, - make_number (32), list2i (1, last_user_time)); + dpyinfo->Xatom_net_active_window, + make_number (32), + list2i (1, dpyinfo->last_user_time)); } } diff --git a/src/xterm.h b/src/xterm.h index f4a2d4c01b2..bdc8523009a 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -301,6 +301,9 @@ struct x_display_info minibuffer. */ struct frame *x_highlight_frame; + /* Time of last user interaction as returned in X events on this display. */ + Time last_user_time; + /* The gray pixmap. */ Pixmap gray; From 384a7d723ee9cfa2adde22670b1063be8d1a49b4 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Thu, 12 Sep 2013 20:04:18 +0800 Subject: [PATCH 102/321] * doc/emacs/text.texi (Enriched Justification): Explain values of default-justification. --- doc/emacs/ChangeLog | 4 ++++ doc/emacs/text.texi | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 7ff13a70718..b263ca7671a 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,7 @@ +2013-09-12 Xue Fuqiao + + * text.texi (Enriched Justification): Explain values of default-justification. + 2013-09-04 Xue Fuqiao * maintaining.texi (VC Ignore): Mention `vc-ignore' with prefix argument. diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi index e5743b064fb..b2cb5ee3d3b 100644 --- a/doc/emacs/text.texi +++ b/doc/emacs/text.texi @@ -2086,6 +2086,7 @@ newlines are used for filling. The @key{RET} (@code{newline}) and commands, including Auto Fill (@pxref{Auto Fill}), insert only soft newlines and delete only soft newlines, leaving hard newlines alone. +@c FIXME: I don't see ‘unfilled’ in that node. --xfq Thus, when editing with Enriched mode, you should not use @key{RET} or @kbd{C-o} to break lines in the middle of filled paragraphs. Use Auto Fill mode or explicit fill commands (@pxref{Fill Commands}) @@ -2294,13 +2295,13 @@ commands do nothing on text with this setting. You can, however, still indent the left margin. @end table -@c FIXME: We should explain the effect of these symbols. --xfq @vindex default-justification You can also specify justification styles using the Justification submenu in the Text Properties menu. The default justification style is specified by the per-buffer variable @code{default-justification}. Its value should be one of the symbols @code{left}, @code{right}, -@code{full}, @code{center}, or @code{none}. +@code{full}, @code{center}, or @code{none}; their meanings correspond +to the commands above. @node Enriched Properties @subsection Setting Other Text Properties From 99d8e6d6c226fd69f7a8927d89a485044bb9c0a3 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Thu, 12 Sep 2013 20:22:17 +0800 Subject: [PATCH 103/321] * doc/lispref/functions.texi (Obsolete Functions): Add an index for obsolete functions. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/functions.texi | 1 + 2 files changed, 5 insertions(+) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 574aba493c0..ed073456e7e 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2013-09-12 Xue Fuqiao + + * functions.texi (Obsolete Functions): Add an index for obsolete functions. + 2013-09-11 Xue Fuqiao * nonascii.texi (Character Properties): Character properties fix diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 39a9ff6b62c..f1d8c54f49c 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -1135,6 +1135,7 @@ examining or altering the structure of closure objects. @node Obsolete Functions @section Declaring Functions Obsolete +@cindex obsolete functions You can mark a named function as @dfn{obsolete}, meaning that it may be removed at some point in the future. This causes Emacs to warn From 15c6d837a554bd128c1d5ef7b46fd05d6eba52ab Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Thu, 12 Sep 2013 21:12:39 +0800 Subject: [PATCH 104/321] * src/charset.c (char_charset): Document an exception for char-charset. --- src/ChangeLog | 4 ++++ src/charset.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 069a9885b4c..b4d1c2b67df 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2013-09-12 Xue Fuqiao + + * charset.c (char_charset): Document an exception for char-charset. + 2013-09-12 Dmitry Antipov * xterm.h (x_display_info): New field last_user_time... diff --git a/src/charset.c b/src/charset.c index eedf65faa6c..d46cb445f85 100644 --- a/src/charset.c +++ b/src/charset.c @@ -2053,6 +2053,8 @@ CH in the charset. */) DEFUN ("char-charset", Fchar_charset, Schar_charset, 1, 2, 0, doc: /* Return the charset of highest priority that contains CH. +ASCII characters are an exception: for them, this function always +returns `ascii'. If optional 2nd arg RESTRICTION is non-nil, it is a list of charsets from which to find the charset. It may also be a coding system. In that case, find the charset from what supported by that coding system. */) From 4dfa4b9bd944fa385b248b5b0b56e95979119420 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Thu, 12 Sep 2013 22:21:21 +0800 Subject: [PATCH 105/321] Comments. --- doc/lispref/nonascii.texi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi index 64c0033847c..e8e810ce61f 100644 --- a/doc/lispref/nonascii.texi +++ b/doc/lispref/nonascii.texi @@ -686,6 +686,7 @@ which case the returned charset must be supported by that coding system (@pxref{Coding Systems}). @end defun +@c TODO: Explain the properties here and add indexes such as ‘charset property’. @defun charset-plist charset This function returns the property list of the character set @var{charset}. Although @var{charset} is a symbol, this is not the @@ -851,6 +852,8 @@ systems specifies its own translation tables, the table that is the value of this variable, if non-@code{nil}, is applied after them. @end defvar +@c FIXME: This variable is obsolete since 23.1. We should mention +@c that here or simply remove this defvar. --xfq @defvar translation-table-for-input Self-inserting characters are translated through this translation table before they are inserted. Search commands also translate their From b5623270b6047528786d4550cebe0b228ecadb6b Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 12 Sep 2013 23:45:28 +0900 Subject: [PATCH 106/321] composite.el (compose-gstring-for-graphic): Handle enclosing mark. --- lisp/ChangeLog | 5 +++++ lisp/composite.el | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e919a8407ec..324cefe7ed6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-12 Kenichi Handa + + * composite.el (compose-gstring-for-graphic): Handle enclosing + mark. + 2013-09-08 Kenichi Handa * international/characters.el: Set category "^" (Combining) for diff --git a/lisp/composite.el b/lisp/composite.el index 3c25b8b60af..e0585f80880 100644 --- a/lisp/composite.el +++ b/lisp/composite.el @@ -555,7 +555,11 @@ All non-spacing characters have this function in (rbearing (lglyph-rbearing glyph)) (lbearing (lglyph-lbearing glyph)) (center (/ (+ lbearing rbearing) 2)) + ;; Artificial vertical gap between the glyphs. (gap (round (* (font-get (lgstring-font gstring) :size) 0.1)))) + (if (= gap 0) + ;; Assure at least 1 pixel vertical gap. + (setq gap 1)) (dotimes (i nchars) (setq glyph (lgstring-glyph gstring i)) (when (> i 0) @@ -566,8 +570,10 @@ All non-spacing characters have this function in (as (lglyph-ascent glyph)) (de (lglyph-descent glyph)) (ce (/ (+ lb rb) 2)) + (w (lglyph-width glyph)) xoff yoff) - (when (and class (>= class 200) (<= class 240)) + (cond + ((and class (>= class 200) (<= class 240)) (setq xoff 0 yoff 0) (cond ((= class 200) @@ -621,6 +627,38 @@ All non-spacing characters have this function in rb (+ lb xoff) as (- as yoff) de (+ de yoff))) + ((and (= class 0) + (eq (get-char-code-property (lglyph-char glyph) + 'general-category) 'Me)) + ;; Artificially layouting glyphs in an enclosing + ;; mark is difficult. All we can do is to adjust + ;; the x-offset and width of the base glyph to + ;; align it at the center of the glyph of the + ;; enclosing mark hoping that the enclosing mark + ;; is big enough. We also have to adjust the + ;; x-offset and width of the mark ifself properly + ;; depending on how the glyph is designed + + ;; (non-spacing or not). For instance, when we + ;; have these glyphs: + ;; X position | + ;; base: <-*-> lbearing=0 rbearing=5 width=5 + ;; mark: <----------.> lb=-11 rb=2 w=0 + ;; we get a correct layout by moving them as this: + ;; base: <-*-> XOFF=4 WAD=9 + ;; mark: <----------.> xoff=2 wad=4 + ;; we have moved the base to the left by 4-pixel + ;; and make its width 9-pixel, then move the mark + ;; to the left 2-pixel and make its width 4-pixel. + (let* (;; Adjustment for the base glyph + (XOFF (/ (- rb lb width) 2)) + (WAD (+ width XOFF)) + ;; Adjustment for the enclosing mark glyph + (xoff (- (+ lb WAD))) + (wad (- rb lb WAD))) + (lglyph-set-adjustment glyph xoff 0 wad) + (setq glyph (lgstring-glyph gstring 0)) + (lglyph-set-adjustment glyph XOFF 0 WAD)))) (if (< ascent as) (setq ascent as)) (if (< descent de) From 347ae3e1436e9705d21c140b29b8e9c818ed86ab Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 12 Sep 2013 19:05:12 +0300 Subject: [PATCH 107/321] lisp.mk (lisp): Add w32-common-fns.elc. --- src/ChangeLog | 4 ++++ src/lisp.mk | 1 + 2 files changed, 5 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index b4d1c2b67df..f08395ae24f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2013-09-12 Eli Zaretskii + + * lisp.mk (lisp): Add w32-common-fns.elc. + 2013-09-12 Xue Fuqiao * charset.c (char_charset): Document an exception for char-charset. diff --git a/src/lisp.mk b/src/lisp.mk index a9a661ea3a8..c12deebd893 100644 --- a/src/lisp.mk +++ b/src/lisp.mk @@ -152,6 +152,7 @@ lisp = \ $(lispsource)/term/w32-win.elc \ $(lispsource)/ls-lisp.elc \ $(lispsource)/disp-table.elc \ + $(lispsource)/w32-common-fns.elc \ $(lispsource)/dos-w32.elc \ $(lispsource)/w32-fns.elc \ $(lispsource)/dos-fns.elc \ From da0752f93768a43bb411955cb27c5438462ec210 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 12 Sep 2013 13:23:48 -0400 Subject: [PATCH 108/321] * lisp/cedet/semantic/find.el (semantic-find-first-tag-by-name): Replace obsolete function assoc-ignore-case with assoc-string. --- lisp/cedet/ChangeLog | 5 +++++ lisp/cedet/semantic/find.el | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index f5528202bb4..6be1c44743a 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,8 @@ +2013-09-12 Glenn Morris + + * semantic/find.el (semantic-find-first-tag-by-name): + Replace obsolete function assoc-ignore-case with assoc-string. + 2013-09-11 Stefan Monnier * semantic/grammar.el (semantic-grammar-mode): Use define-derived-mode. diff --git a/lisp/cedet/semantic/find.el b/lisp/cedet/semantic/find.el index f660c69ec3d..6670074c0f9 100644 --- a/lisp/cedet/semantic/find.el +++ b/lisp/cedet/semantic/find.el @@ -265,9 +265,9 @@ TABLE is a semantic tags table. See `semantic-something-to-tag-table'." "Find the first tag with NAME in TABLE. NAME is a string. TABLE is a semantic tags table. See `semantic-something-to-tag-table'. -This routine uses `assoc' to quickly find the first matching entry." - (funcall (if semantic-case-fold 'assoc-ignore-case 'assoc) - name (semantic-something-to-tag-table table))) +Respects `semantic-case-fold'." + (assoc-string name (semantic-something-to-tag-table table) + semantic-case-fold)) (defmacro semantic-find-tags-by-name (name &optional table) "Find all tags with NAME in TABLE. From 1f1e06e2728d2dc8656f4e96aea876ad13916bfa Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 12 Sep 2013 15:36:23 -0400 Subject: [PATCH 109/321] * lisp/abbrev.el (abbrev--check-chars): Fix thinko. Fixes: debbugs:15329 --- lisp/ChangeLog | 4 ++++ lisp/abbrev.el | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eec861a1dcd..1ea13a9a0be 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-12 Stefan Monnier + + * abbrev.el (abbrev--check-chars): Fix thinko (bug#15329). + 2013-08-23 Glenn Morris * emacs-lisp/package.el (package-buffer-info): Fix message typo. diff --git a/lisp/abbrev.el b/lisp/abbrev.el index bd09653103f..1fe5c0c4786 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -615,9 +615,9 @@ An obsolete but still supported calling form is: "Check if the characters in ABBREV have word syntax in either the current (if global is nil) or standard syntax table." (with-syntax-table - (cond ((null global) (standard-syntax-table)) + (cond ((null global) (syntax-table)) ;; ((syntax-table-p global) global) - (t (syntax-table))) + (t (standard-syntax-table))) (when (string-match "\\W" abbrev) (let ((badchars ()) (pos 0)) From ae5e4c483a4700fed927f546eebf06d1b1e92057 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 12 Sep 2013 16:15:53 -0400 Subject: [PATCH 110/321] * lisp/eshell/*.el: Use lexical-binding. * test/automated/eshell.el: Move from test/eshell.el. (eshell-test/for-loop, eshell-test/for-name-loop): New tests. Fixes: debbugs:15231 --- lisp/ChangeLog | 7 +++++-- lisp/eshell/em-alias.el | 2 +- lisp/eshell/em-banner.el | 2 +- lisp/eshell/em-basic.el | 2 +- lisp/eshell/em-cmpl.el | 22 +++++----------------- lisp/eshell/em-dirs.el | 2 +- lisp/eshell/em-glob.el | 2 +- lisp/eshell/em-hist.el | 2 +- lisp/eshell/em-ls.el | 2 +- lisp/eshell/em-pred.el | 2 +- lisp/eshell/em-prompt.el | 2 +- lisp/eshell/em-rebind.el | 2 +- lisp/eshell/em-script.el | 2 +- lisp/eshell/em-smart.el | 2 +- lisp/eshell/em-term.el | 2 +- lisp/eshell/em-tramp.el | 2 +- lisp/eshell/em-unix.el | 2 +- lisp/eshell/em-xtra.el | 2 +- lisp/eshell/esh-arg.el | 2 +- lisp/eshell/esh-cmd.el | 2 +- lisp/eshell/esh-ext.el | 2 +- lisp/eshell/esh-io.el | 2 +- lisp/eshell/esh-mode.el | 2 +- lisp/eshell/esh-module.el | 2 +- lisp/eshell/esh-opt.el | 2 +- lisp/eshell/esh-proc.el | 2 +- lisp/eshell/esh-util.el | 2 +- lisp/eshell/esh-var.el | 2 +- lisp/eshell/eshell.el | 2 +- test/ChangeLog | 25 +++++++++++++++---------- test/{ => automated}/eshell.el | 8 ++++++++ 31 files changed, 60 insertions(+), 56 deletions(-) rename test/{ => automated}/eshell.el (94%) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5cae5873f92..b8fc9b32f98 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,10 @@ +2013-09-12 Stefan Monnier + + * eshell/*.el: Use lexical-binding (bug#15231). + 2013-09-12 Kenichi Handa - * composite.el (compose-gstring-for-graphic): Handle enclosing - mark. + * composite.el (compose-gstring-for-graphic): Handle enclosing mark. 2013-09-12 Glenn Morris diff --git a/lisp/eshell/em-alias.el b/lisp/eshell/em-alias.el index 9a9cc4cd567..210d71be9c6 100644 --- a/lisp/eshell/em-alias.el +++ b/lisp/eshell/em-alias.el @@ -1,4 +1,4 @@ -;;; em-alias.el --- creation and management of command aliases +;;; em-alias.el --- creation and management of command aliases -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-banner.el b/lisp/eshell/em-banner.el index 8c3eebf3510..3e1970d97da 100644 --- a/lisp/eshell/em-banner.el +++ b/lisp/eshell/em-banner.el @@ -1,4 +1,4 @@ -;;; em-banner.el --- sample module that displays a login banner +;;; em-banner.el --- sample module that displays a login banner -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-basic.el b/lisp/eshell/em-basic.el index c440bd0a928..fb2eb85c8e9 100644 --- a/lisp/eshell/em-basic.el +++ b/lisp/eshell/em-basic.el @@ -1,4 +1,4 @@ -;;; em-basic.el --- basic shell builtin commands +;;; em-basic.el --- basic shell builtin commands -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el index 7120f639a70..fe7a79cf952 100644 --- a/lisp/eshell/em-cmpl.el +++ b/lisp/eshell/em-cmpl.el @@ -1,4 +1,4 @@ -;;; em-cmpl.el --- completion using the TAB key +;;; em-cmpl.el --- completion using the TAB key -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. @@ -297,19 +297,16 @@ to writing a completion function." (define-key eshell-mode-map [(meta tab)] 'eshell-complete-lisp-symbol) (define-key eshell-mode-map [(meta control ?i)] 'eshell-complete-lisp-symbol) (define-key eshell-command-map [(meta ?h)] 'eshell-completion-help) - (define-key eshell-command-map [tab] 'pcomplete-expand-and-complete) (define-key eshell-command-map [(control ?i)] 'pcomplete-expand-and-complete) (define-key eshell-command-map [space] 'pcomplete-expand) (define-key eshell-command-map [? ] 'pcomplete-expand) - (define-key eshell-mode-map [tab] 'eshell-pcomplete) - (define-key eshell-mode-map [(control ?i)] 'eshell-pcomplete) + (define-key eshell-mode-map [(control ?i)] 'pcomplete) (add-hook 'completion-at-point-functions #'pcomplete-completions-at-point nil t) ;; jww (1999-10-19): Will this work on anything but X? - (if (featurep 'xemacs) - (define-key eshell-mode-map [iso-left-tab] 'pcomplete-reverse) - (define-key eshell-mode-map [backtab] 'pcomplete-reverse)) + (define-key eshell-mode-map (if (featurep 'xemacs) [iso-left-tab] [backtab]) + 'pcomplete-reverse) (define-key eshell-mode-map [(meta ??)] 'pcomplete-list)) (defun eshell-completion-command-name () @@ -458,16 +455,7 @@ to writing a completion function." (all-completions filename obarray 'functionp)) completions))))))) -(defun eshell-pcomplete (&optional interactively) - "Eshell wrapper for `pcomplete'." - (interactive "p") - ;; Pretend to be pcomplete so that cycling works (bug#13293). - (setq this-command 'pcomplete) - (condition-case nil - (if interactively - (call-interactively 'pcomplete) - (pcomplete)) - (text-read-only (completion-at-point)))) ; Workaround for bug#12838. +(define-obsolete-function-alias 'eshell-pcomplete 'completion-at-point) (provide 'em-cmpl) diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el index e8fbe0518ac..2cfd14b5f60 100644 --- a/lisp/eshell/em-dirs.el +++ b/lisp/eshell/em-dirs.el @@ -1,4 +1,4 @@ -;;; em-dirs.el --- directory navigation commands +;;; em-dirs.el --- directory navigation commands -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el index b5ca8119470..596547c3f5e 100644 --- a/lisp/eshell/em-glob.el +++ b/lisp/eshell/em-glob.el @@ -1,4 +1,4 @@ -;;; em-glob.el --- extended file name globbing +;;; em-glob.el --- extended file name globbing -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el index 694fe71a95c..8e56de251a1 100644 --- a/lisp/eshell/em-hist.el +++ b/lisp/eshell/em-hist.el @@ -1,4 +1,4 @@ -;;; em-hist.el --- history list management +;;; em-hist.el --- history list management -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el index 3dee1adb58a..0e10d984f88 100644 --- a/lisp/eshell/em-ls.el +++ b/lisp/eshell/em-ls.el @@ -1,4 +1,4 @@ -;;; em-ls.el --- implementation of ls in Lisp +;;; em-ls.el --- implementation of ls in Lisp -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el index 14d3020530f..f7d7605107f 100644 --- a/lisp/eshell/em-pred.el +++ b/lisp/eshell/em-pred.el @@ -1,4 +1,4 @@ -;;; em-pred.el --- argument predicates and modifiers (ala zsh) +;;; em-pred.el --- argument predicates and modifiers (ala zsh) -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-prompt.el b/lisp/eshell/em-prompt.el index 18731121c4e..9b9c1095277 100644 --- a/lisp/eshell/em-prompt.el +++ b/lisp/eshell/em-prompt.el @@ -1,4 +1,4 @@ -;;; em-prompt.el --- command prompts +;;; em-prompt.el --- command prompts -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-rebind.el b/lisp/eshell/em-rebind.el index a526d590307..378a57b0687 100644 --- a/lisp/eshell/em-rebind.el +++ b/lisp/eshell/em-rebind.el @@ -1,4 +1,4 @@ -;;; em-rebind.el --- rebind keys when point is at current input +;;; em-rebind.el --- rebind keys when point is at current input -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-script.el b/lisp/eshell/em-script.el index b073928738f..1a19698faa8 100644 --- a/lisp/eshell/em-script.el +++ b/lisp/eshell/em-script.el @@ -1,4 +1,4 @@ -;;; em-script.el --- Eshell script files +;;; em-script.el --- Eshell script files -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-smart.el b/lisp/eshell/em-smart.el index aa9038aafb9..e6fa463aec3 100644 --- a/lisp/eshell/em-smart.el +++ b/lisp/eshell/em-smart.el @@ -1,4 +1,4 @@ -;;; em-smart.el --- smart display of output +;;; em-smart.el --- smart display of output -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-term.el b/lisp/eshell/em-term.el index 2932f443e4f..71329f083ee 100644 --- a/lisp/eshell/em-term.el +++ b/lisp/eshell/em-term.el @@ -1,4 +1,4 @@ -;;; em-term.el --- running visual commands +;;; em-term.el --- running visual commands -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-tramp.el b/lisp/eshell/em-tramp.el index fb816b76a7d..bb2f440313c 100644 --- a/lisp/eshell/em-tramp.el +++ b/lisp/eshell/em-tramp.el @@ -1,4 +1,4 @@ -;;; em-tramp.el --- Eshell features that require TRAMP +;;; em-tramp.el --- Eshell features that require TRAMP -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index b9b1c1635a5..52d2b4d2a2d 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -1,4 +1,4 @@ -;;; em-unix.el --- UNIX command aliases +;;; em-unix.el --- UNIX command aliases -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-xtra.el b/lisp/eshell/em-xtra.el index c4cab522cf2..c9d9d5bfe2f 100644 --- a/lisp/eshell/em-xtra.el +++ b/lisp/eshell/em-xtra.el @@ -1,4 +1,4 @@ -;;; em-xtra.el --- extra alias functions +;;; em-xtra.el --- extra alias functions -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el index e3a12d5ece5..f791ad66520 100644 --- a/lisp/eshell/esh-arg.el +++ b/lisp/eshell/esh-arg.el @@ -1,4 +1,4 @@ -;;; esh-arg.el --- argument processing +;;; esh-arg.el --- argument processing -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index c2922983ae2..cc4fdd15bda 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -1,4 +1,4 @@ -;;; esh-cmd.el --- command invocation +;;; esh-cmd.el --- command invocation -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el index 474e536de2e..8b312a2c25c 100644 --- a/lisp/eshell/esh-ext.el +++ b/lisp/eshell/esh-ext.el @@ -1,4 +1,4 @@ -;;; esh-ext.el --- commands external to Eshell +;;; esh-ext.el --- commands external to Eshell -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el index 4edb47e4758..f620890ee6b 100644 --- a/lisp/eshell/esh-io.el +++ b/lisp/eshell/esh-io.el @@ -1,4 +1,4 @@ -;;; esh-io.el --- I/O management +;;; esh-io.el --- I/O management -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el index 54a36428d58..1a80e3894e1 100644 --- a/lisp/eshell/esh-mode.el +++ b/lisp/eshell/esh-mode.el @@ -1,4 +1,4 @@ -;;; esh-mode.el --- user interface +;;; esh-mode.el --- user interface -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-module.el b/lisp/eshell/esh-module.el index 5008ef705db..181d08f8a1d 100644 --- a/lisp/eshell/esh-module.el +++ b/lisp/eshell/esh-module.el @@ -1,4 +1,4 @@ -;;; esh-module.el --- Eshell modules +;;; esh-module.el --- Eshell modules -*- lexical-binding:t -*- ;; Copyright (C) 1999-2000, 2002-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el index c62cbc7e1dc..e9252cb540e 100644 --- a/lisp/eshell/esh-opt.el +++ b/lisp/eshell/esh-opt.el @@ -1,4 +1,4 @@ -;;; esh-opt.el --- command options processing +;;; esh-opt.el --- command options processing -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el index 171d70c0772..e77287c2f78 100644 --- a/lisp/eshell/esh-proc.el +++ b/lisp/eshell/esh-proc.el @@ -1,4 +1,4 @@ -;;; esh-proc.el --- process management +;;; esh-proc.el --- process management -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index 968d1ebad79..cac46ea8d18 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -1,4 +1,4 @@ -;;; esh-util.el --- general utilities +;;; esh-util.el --- general utilities -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el index 75c36a68544..f68b65dfd46 100644 --- a/lisp/eshell/esh-var.el +++ b/lisp/eshell/esh-var.el @@ -1,4 +1,4 @@ -;;; esh-var.el --- handling of variables +;;; esh-var.el --- handling of variables -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el index e3f8f0d11bc..47078d142d5 100644 --- a/lisp/eshell/eshell.el +++ b/lisp/eshell/eshell.el @@ -1,4 +1,4 @@ -;;; eshell.el --- the Emacs command shell +;;; eshell.el --- the Emacs command shell -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/test/ChangeLog b/test/ChangeLog index 7b39097d3b5..3e42e18b2b4 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2013-09-12 Stefan Monnier + + * automated/eshell.el: Rename from eshell.el. + (eshell-test/for-loop, eshell-test/for-name-loop): New tests (bug#15231). + 2013-09-01 Glenn Morris * automated/Makefile.in (setwins): Avoid leading space in $wins. @@ -164,25 +169,25 @@ 2013-07-05 Michael Albinus * automated/file-notify-tests.el - (file-notify-test-remote-temporary-file-directory): Use - `null-device' on w32. + (file-notify-test-remote-temporary-file-directory): + Use `null-device' on w32. (file-notify--test-tmpfile, file-notify--test-tmpfile1) (file-notify--test-results, file-notify--test-event) (file-notify--deftest-remote, file-notify--event-test) (file-notify--test-event-handler) - (file-notify--test-make-temp-name): Renamed, in order to mark them + (file-notify--test-make-temp-name): Rename, in order to mark them internal. (tramp-message-show-message, tramp-read-passwd): Tweak them for better fitting in noninteractive tests. - (file-notify-test00-availability): Renamed from `file-notify-test0'. - (file-notify-test01-add-watch): Renamed from `file-notify-test1'. + (file-notify-test00-availability): Rename from `file-notify-test0'. + (file-notify-test01-add-watch): Rename from `file-notify-test1'. Use `temporary-file-directory '. (file-notify-test01-add-watch-remote): New test. - (file-notify-test02-events): Renamed from `file-notify-test2'. - (file-notify-test02-events-remote): Renamed from `file-notify-test3'. - (file-notify-test03-autorevert): Renamed from + (file-notify-test02-events): Rename from `file-notify-test2'. + (file-notify-test02-events-remote): Rename from `file-notify-test3'. + (file-notify-test03-autorevert): Rename from `file-notify-test4'. Use timeouts. - (file-notify-test03-autorevert-remote): Renamed from + (file-notify-test03-autorevert-remote): Rename from `file-notify-test5'. 2013-07-04 Michael Albinus @@ -192,7 +197,7 @@ 2013-06-28 Kenichi Handa * automated/decoder-tests.el (decoder-tests-gen-file): New arg FILE. - (decoder-tests-ao-gen-file): Renamed from decoder-tests-filename. + (decoder-tests-ao-gen-file): Rename from decoder-tests-filename. Callers changed. (decoder-tests-filename): New function. (decoder-tests-prefer-utf-8-read) diff --git a/test/eshell.el b/test/automated/eshell.el similarity index 94% rename from test/eshell.el rename to test/automated/eshell.el index 126a47220c4..a7df2945424 100644 --- a/test/eshell.el +++ b/test/automated/eshell.el @@ -62,6 +62,14 @@ "Test `eshell-command-result' with an elisp command." (should (equal (eshell-command-result "(+ 1 2)") 3))) +(ert-deftest eshell-test/for-loop () + "Test `eshell-command-result' with an elisp command." + (should (equal (eshell-command-result "for foo in 5 { echo $foo }") 5))) + +(ert-deftest eshell-test/for-name-loop () ;Bug#15231 + "Test `eshell-command-result' with an elisp command." + (should (equal (eshell-command-result "for name in 3 { echo $name }") 3))) + (ert-deftest eshell-test/lisp-command-args () "Test `eshell-command-result' with elisp and trailing args. Test that trailing arguments outside the S-expression are From 379add74c2635c38ee43f4e649a7d7aa12e03485 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 12 Sep 2013 16:21:41 -0400 Subject: [PATCH 111/321] * lisp/term/ns-win.el (parameters): Don't declare as dynamic. (before-make-frame-hook): Don't add ineffective function. --- lisp/ChangeLog | 3 +++ lisp/term/ns-win.el | 24 ++---------------------- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b8fc9b32f98..7dea339d669 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-12 Stefan Monnier + * term/ns-win.el (parameters): Don't declare as dynamic. + (before-make-frame-hook): Don't add ineffective function. + * eshell/*.el: Use lexical-binding (bug#15231). 2013-09-12 Kenichi Handa diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el index b4693a5451a..225f809d70b 100644 --- a/lisp/term/ns-win.el +++ b/lisp/term/ns-win.el @@ -556,29 +556,9 @@ unless the current buffer is a scratch buffer." (interactive) (other-frame -1)) -;; If no position specified, make new frame offset by 25 from current. -;; You'd think this was a window manager's job, but apparently without -;; this, new frames open exactly on top of old ones (?). -;; http://lists.gnu.org/archive/html/emacs-devel/2010-10/msg00988.html -;; Note that AFAICS it is not documented that functions on -;; before-make-frame-hook can access PARAMETERS. -(defvar parameters) ; dynamically bound in make-frame -(add-hook 'before-make-frame-hook - (lambda () - (let ((left (cdr (assq 'left (frame-parameters)))) - (top (cdr (assq 'top (frame-parameters))))) - (if (consp left) (setq left (cadr left))) - (if (consp top) (setq top (cadr top))) - (cond - ((or (assq 'top parameters) (assq 'left parameters))) - ((or (not left) (not top))) - (t - (setq parameters (cons (cons 'left (+ left 25)) - (cons (cons 'top (+ top 25)) - parameters)))))))) - -;; frame will be focused anyway, so select it +;; Frame will be focused anyway, so select it ;; (if this is not done, mode line is dimmed until first interaction) +;; FIXME: Sounds like we're working around a bug in the underlying code. (add-hook 'after-make-frame-functions 'select-frame) (defvar tool-bar-mode) From 51e14f13f084bc41b863e5cd0308f5fd7da23fff Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 12 Sep 2013 16:38:35 -0400 Subject: [PATCH 112/321] * eshell/em-cmpl.el: Undo accidental part of last commit. --- lisp/eshell/em-cmpl.el | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el index fe7a79cf952..a940eb5cd36 100644 --- a/lisp/eshell/em-cmpl.el +++ b/lisp/eshell/em-cmpl.el @@ -297,16 +297,19 @@ to writing a completion function." (define-key eshell-mode-map [(meta tab)] 'eshell-complete-lisp-symbol) (define-key eshell-mode-map [(meta control ?i)] 'eshell-complete-lisp-symbol) (define-key eshell-command-map [(meta ?h)] 'eshell-completion-help) + (define-key eshell-command-map [tab] 'pcomplete-expand-and-complete) (define-key eshell-command-map [(control ?i)] 'pcomplete-expand-and-complete) (define-key eshell-command-map [space] 'pcomplete-expand) (define-key eshell-command-map [? ] 'pcomplete-expand) - (define-key eshell-mode-map [(control ?i)] 'pcomplete) + (define-key eshell-mode-map [tab] 'eshell-pcomplete) + (define-key eshell-mode-map [(control ?i)] 'eshell-pcomplete) (add-hook 'completion-at-point-functions #'pcomplete-completions-at-point nil t) ;; jww (1999-10-19): Will this work on anything but X? - (define-key eshell-mode-map (if (featurep 'xemacs) [iso-left-tab] [backtab]) - 'pcomplete-reverse) + (if (featurep 'xemacs) + (define-key eshell-mode-map [iso-left-tab] 'pcomplete-reverse) + (define-key eshell-mode-map [backtab] 'pcomplete-reverse)) (define-key eshell-mode-map [(meta ??)] 'pcomplete-list)) (defun eshell-completion-command-name () @@ -455,7 +458,16 @@ to writing a completion function." (all-completions filename obarray 'functionp)) completions))))))) -(define-obsolete-function-alias 'eshell-pcomplete 'completion-at-point) +(defun eshell-pcomplete (&optional interactively) + "Eshell wrapper for `pcomplete'." + (interactive "p") + ;; Pretend to be pcomplete so that cycling works (bug#13293). + (setq this-command 'pcomplete) + (condition-case nil + (if interactively + (call-interactively 'pcomplete) + (pcomplete)) + (text-read-only (completion-at-point)))) ; Workaround for bug#12838. (provide 'em-cmpl) From 2d5788f46de3758fc468592cb2f17390c5c07db6 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 12 Sep 2013 16:39:13 -0400 Subject: [PATCH 113/321] * test/automated/eshell.el (with-temp-eshell): Avoid hangs in batch mode due to "has a running proces; kill it?" prompts. --- test/ChangeLog | 5 +++++ test/automated/eshell.el | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/test/ChangeLog b/test/ChangeLog index 3e42e18b2b4..70f9f378d39 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2013-09-12 Glenn Morris + + * automated/eshell.el (with-temp-eshell): Avoid hangs in batch mode + due to "has a running proces; kill it?" prompts. + 2013-09-12 Stefan Monnier * automated/eshell.el: Rename from eshell.el. diff --git a/test/automated/eshell.el b/test/automated/eshell.el index a7df2945424..a78c34e4f39 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -34,7 +34,8 @@ (unwind-protect (with-current-buffer eshell-buffer ,@body) - (kill-buffer eshell-buffer)))) + (let (kill-buffer-query-functions) + (kill-buffer eshell-buffer))))) (defun eshell-insert-command (text &optional func) "Insert a command at the end of the buffer." From e3066edb0a69064af71f031cc034a94a7d345d6a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 12 Sep 2013 16:42:40 -0400 Subject: [PATCH 114/321] ChangeLog typo fix --- test/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ChangeLog b/test/ChangeLog index 70f9f378d39..0587373144a 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,7 +1,7 @@ 2013-09-12 Glenn Morris * automated/eshell.el (with-temp-eshell): Avoid hangs in batch mode - due to "has a running proces; kill it?" prompts. + due to "has a running process; kill it?" prompts. 2013-09-12 Stefan Monnier From 9dc7e8e1a4b04fe5ae98ca5df95f3a2bb1dfe0cf Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 12 Sep 2013 20:55:56 -0700 Subject: [PATCH 115/321] * test/automated/eshell.el (with-temp-eshell): Use a temp directory for eshell-directory-name. It seems we don't have permission to write to HOME on hydra. --- test/ChangeLog | 5 +++++ test/automated/eshell.el | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index 0587373144a..de1676341e5 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2013-09-13 Glenn Morris + + * automated/eshell.el (with-temp-eshell): + Use a temp directory for eshell-directory-name. + 2013-09-12 Glenn Morris * automated/eshell.el (with-temp-eshell): Avoid hangs in batch mode diff --git a/test/automated/eshell.el b/test/automated/eshell.el index a78c34e4f39..310e9b6dfde 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -30,12 +30,15 @@ (defmacro with-temp-eshell (&rest body) "Evaluate BODY in a temporary Eshell buffer." - `(let ((eshell-buffer (eshell t))) + `(let* ((eshell-directory-name (make-temp-file "eshell" t)) + (eshell-history-file-name nil) + (eshell-buffer (eshell t))) (unwind-protect (with-current-buffer eshell-buffer ,@body) (let (kill-buffer-query-functions) - (kill-buffer eshell-buffer))))) + (kill-buffer eshell-buffer) + (delete-directory eshell-directory-name t))))) (defun eshell-insert-command (text &optional func) "Insert a command at the end of the buffer." From 9a650e62c8bd9ab1040db70e22683bc94e918cc8 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 13 Sep 2013 10:00:20 +0400 Subject: [PATCH 116/321] * xterm.h (x_window_to_frame, x_any_window_to_frame) (x_menubar_window_to_frame): Remove prototypes. * xfns.c (x_window_to_frame, x_any_window_to_frame) (x_menubar_window_to_frame, x_top_window_to_frame): Move from here... * xterm.c (x_window_to_frame, x_any_window_to_frame) (x_menubar_window_to_frame, x_top_window_to_frame): ...to here and convert all but the last to static. --- src/ChangeLog | 11 +++ src/xfns.c | 181 -------------------------------------------------- src/xterm.c | 175 ++++++++++++++++++++++++++++++++++++++++++++++++ src/xterm.h | 16 +---- 4 files changed, 187 insertions(+), 196 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index f08395ae24f..960165a22f9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2013-09-13 Dmitry Antipov + + * xterm.h (x_window_to_frame, x_any_window_to_frame) + (x_menubar_window_to_frame): Remove prototypes. + * xfns.c (x_window_to_frame, x_any_window_to_frame) + (x_menubar_window_to_frame, x_top_window_to_frame): + Move from here... + * xterm.c (x_window_to_frame, x_any_window_to_frame) + (x_menubar_window_to_frame, x_top_window_to_frame): + ...to here and convert all but the last to static. + 2013-09-12 Eli Zaretskii * lisp.mk (lisp): Add w32-common-fns.elc. diff --git a/src/xfns.c b/src/xfns.c index 74bc7a8b1d0..fa83b6faf1a 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -179,187 +179,6 @@ check_x_display_info (Lisp_Object object) return dpyinfo; } - -/* Return the Emacs frame-object corresponding to an X window. - It could be the frame's main window or an icon window. */ - -/* This function can be called during GC, so use GC_xxx type test macros. */ - -struct frame * -x_window_to_frame (struct x_display_info *dpyinfo, int wdesc) -{ - Lisp_Object tail, frame; - struct frame *f; - - if (wdesc == None) - return NULL; - - FOR_EACH_FRAME (tail, frame) - { - f = XFRAME (frame); - if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) - continue; - if (f->output_data.x->hourglass_window == wdesc) - return f; -#ifdef USE_X_TOOLKIT - if ((f->output_data.x->edit_widget - && XtWindow (f->output_data.x->edit_widget) == wdesc) - /* A tooltip frame? */ - || (!f->output_data.x->edit_widget - && FRAME_X_WINDOW (f) == wdesc) - || f->output_data.x->icon_desc == wdesc) - return f; -#else /* not USE_X_TOOLKIT */ -#ifdef USE_GTK - if (f->output_data.x->edit_widget) - { - GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); - struct x_output *x = f->output_data.x; - if (gwdesc != 0 && gwdesc == x->edit_widget) - return f; - } -#endif /* USE_GTK */ - if (FRAME_X_WINDOW (f) == wdesc - || f->output_data.x->icon_desc == wdesc) - return f; -#endif /* not USE_X_TOOLKIT */ - } - return 0; -} - -#if defined (USE_X_TOOLKIT) || defined (USE_GTK) -/* Like x_window_to_frame but also compares the window with the widget's - windows. */ - -struct frame * -x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc) -{ - Lisp_Object tail, frame; - struct frame *f, *found = NULL; - struct x_output *x; - - if (wdesc == None) - return NULL; - - FOR_EACH_FRAME (tail, frame) - { - if (found) - break; - f = XFRAME (frame); - if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo) - { - /* This frame matches if the window is any of its widgets. */ - x = f->output_data.x; - if (x->hourglass_window == wdesc) - found = f; - else if (x->widget) - { -#ifdef USE_GTK - GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); - if (gwdesc != 0 - && gtk_widget_get_toplevel (gwdesc) == x->widget) - found = f; -#else - if (wdesc == XtWindow (x->widget) - || wdesc == XtWindow (x->column_widget) - || wdesc == XtWindow (x->edit_widget)) - found = f; - /* Match if the window is this frame's menubar. */ - else if (lw_window_is_in_menubar (wdesc, x->menubar_widget)) - found = f; -#endif - } - else if (FRAME_X_WINDOW (f) == wdesc) - /* A tooltip frame. */ - found = f; - } - } - - return found; -} - -/* Likewise, but consider only the menu bar widget. */ - -struct frame * -x_menubar_window_to_frame (struct x_display_info *dpyinfo, XEvent *event) -{ - Window wdesc = event->xany.window; - Lisp_Object tail, frame; - struct frame *f; - struct x_output *x; - - if (wdesc == None) - return NULL; - - FOR_EACH_FRAME (tail, frame) - { - f = XFRAME (frame); - if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) - continue; - x = f->output_data.x; -#ifdef USE_GTK - if (x->menubar_widget && xg_event_is_for_menubar (f, event)) - return f; -#else - /* Match if the window is this frame's menubar. */ - if (x->menubar_widget - && lw_window_is_in_menubar (wdesc, x->menubar_widget)) - return f; -#endif - } - return 0; -} - -/* Return the frame whose principal (outermost) window is WDESC. - If WDESC is some other (smaller) window, we return 0. */ - -struct frame * -x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc) -{ - Lisp_Object tail, frame; - struct frame *f; - struct x_output *x; - - if (wdesc == None) - return NULL; - - FOR_EACH_FRAME (tail, frame) - { - f = XFRAME (frame); - if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) - continue; - x = f->output_data.x; - - if (x->widget) - { - /* This frame matches if the window is its topmost widget. */ -#ifdef USE_GTK - GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); - if (gwdesc == x->widget) - return f; -#else - if (wdesc == XtWindow (x->widget)) - return f; -#if 0 /* I don't know why it did this, - but it seems logically wrong, - and it causes trouble for MapNotify events. */ - /* Match if the window is this frame's menubar. */ - if (x->menubar_widget - && wdesc == XtWindow (x->menubar_widget)) - return f; -#endif -#endif - } - else if (FRAME_X_WINDOW (f) == wdesc) - /* Tooltip frame. */ - return f; - } - return 0; -} -#endif /* USE_X_TOOLKIT || USE_GTK */ - - - /* Store the screen positions of frame F into XPTR and YPTR. These are the positions of the containing window manager window, not Emacs's own window. */ diff --git a/src/xterm.c b/src/xterm.c index c28ca824063..ef800461185 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -3389,6 +3389,181 @@ x_focus_changed (int type, int state, struct x_display_info *dpyinfo, struct fra } } +/* Return the Emacs frame-object corresponding to an X window. + It could be the frame's main window or an icon window. */ + +static struct frame * +x_window_to_frame (struct x_display_info *dpyinfo, int wdesc) +{ + Lisp_Object tail, frame; + struct frame *f; + + if (wdesc == None) + return NULL; + + FOR_EACH_FRAME (tail, frame) + { + f = XFRAME (frame); + if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) + continue; + if (f->output_data.x->hourglass_window == wdesc) + return f; +#ifdef USE_X_TOOLKIT + if ((f->output_data.x->edit_widget + && XtWindow (f->output_data.x->edit_widget) == wdesc) + /* A tooltip frame? */ + || (!f->output_data.x->edit_widget + && FRAME_X_WINDOW (f) == wdesc) + || f->output_data.x->icon_desc == wdesc) + return f; +#else /* not USE_X_TOOLKIT */ +#ifdef USE_GTK + if (f->output_data.x->edit_widget) + { + GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); + struct x_output *x = f->output_data.x; + if (gwdesc != 0 && gwdesc == x->edit_widget) + return f; + } +#endif /* USE_GTK */ + if (FRAME_X_WINDOW (f) == wdesc + || f->output_data.x->icon_desc == wdesc) + return f; +#endif /* not USE_X_TOOLKIT */ + } + return 0; +} + +#if defined (USE_X_TOOLKIT) || defined (USE_GTK) + +/* Like x_window_to_frame but also compares the window with the widget's + windows. */ + +static struct frame * +x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc) +{ + Lisp_Object tail, frame; + struct frame *f, *found = NULL; + struct x_output *x; + + if (wdesc == None) + return NULL; + + FOR_EACH_FRAME (tail, frame) + { + if (found) + break; + f = XFRAME (frame); + if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo) + { + /* This frame matches if the window is any of its widgets. */ + x = f->output_data.x; + if (x->hourglass_window == wdesc) + found = f; + else if (x->widget) + { +#ifdef USE_GTK + GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); + if (gwdesc != 0 + && gtk_widget_get_toplevel (gwdesc) == x->widget) + found = f; +#else + if (wdesc == XtWindow (x->widget) + || wdesc == XtWindow (x->column_widget) + || wdesc == XtWindow (x->edit_widget)) + found = f; + /* Match if the window is this frame's menubar. */ + else if (lw_window_is_in_menubar (wdesc, x->menubar_widget)) + found = f; +#endif + } + else if (FRAME_X_WINDOW (f) == wdesc) + /* A tooltip frame. */ + found = f; + } + } + + return found; +} + +/* Likewise, but consider only the menu bar widget. */ + +static struct frame * +x_menubar_window_to_frame (struct x_display_info *dpyinfo, XEvent *event) +{ + Window wdesc = event->xany.window; + Lisp_Object tail, frame; + struct frame *f; + struct x_output *x; + + if (wdesc == None) + return NULL; + + FOR_EACH_FRAME (tail, frame) + { + f = XFRAME (frame); + if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) + continue; + x = f->output_data.x; +#ifdef USE_GTK + if (x->menubar_widget && xg_event_is_for_menubar (f, event)) + return f; +#else + /* Match if the window is this frame's menubar. */ + if (x->menubar_widget + && lw_window_is_in_menubar (wdesc, x->menubar_widget)) + return f; +#endif + } + return 0; +} + +/* Return the frame whose principal (outermost) window is WDESC. + If WDESC is some other (smaller) window, we return 0. */ + +struct frame * +x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc) +{ + Lisp_Object tail, frame; + struct frame *f; + struct x_output *x; + + if (wdesc == None) + return NULL; + + FOR_EACH_FRAME (tail, frame) + { + f = XFRAME (frame); + if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) + continue; + x = f->output_data.x; + + if (x->widget) + { + /* This frame matches if the window is its topmost widget. */ +#ifdef USE_GTK + GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); + if (gwdesc == x->widget) + return f; +#else + if (wdesc == XtWindow (x->widget)) + return f; +#endif + } + else if (FRAME_X_WINDOW (f) == wdesc) + /* Tooltip frame. */ + return f; + } + return 0; +} + +#else /* !USE_X_TOOLKIT && !USE_GTK */ + +#define x_any_window_to_frame(d, i) x_window_to_frame (d, i) +#define x_top_window_to_frame(d, i) x_window_to_frame (d, i) + +#endif /* USE_X_TOOLKIT || USE_GTK */ + /* The focus may have changed. Figure out if it is a real focus change, by checking both FocusIn/Out and Enter/LeaveNotify events. diff --git a/src/xterm.h b/src/xterm.h index bdc8523009a..2f29667684d 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -376,20 +376,6 @@ struct x_display_info extern int use_xim; #endif -extern struct frame *x_window_to_frame (struct x_display_info *, int); -extern struct frame *x_any_window_to_frame (struct x_display_info *, int); -extern struct frame *x_menubar_window_to_frame (struct x_display_info *, - XEvent *); -extern struct frame *x_top_window_to_frame (struct x_display_info *, int); - -extern struct frame *x_menubar_window_to_frame (struct x_display_info *, - XEvent *); - -#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) -#define x_any_window_to_frame x_window_to_frame -#define x_top_window_to_frame x_window_to_frame -#endif - /* This is a chain of structures for all the X displays currently in use. */ extern struct x_display_info *x_display_list; @@ -400,7 +386,7 @@ extern struct x_display_info *x_display_list; extern Lisp_Object x_display_name_list; extern struct x_display_info *x_display_info_for_display (Display *); - +extern struct frame *x_top_window_to_frame (struct x_display_info *, int); extern struct x_display_info *x_term_init (Lisp_Object, char *, char *); extern bool x_display_ok (const char *); From 35c3d36e0ed6c7f5104946dd966ca46d0495f640 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 13 Sep 2013 08:03:06 +0200 Subject: [PATCH 117/321] * net/tramp.el (tramp-check-proper-method-and-host): Rename it from `tramp-check-proper-host'. Check for a valid method name. * net/tramp-adb.el (tramp-adb-maybe-open-connection): * net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): * net/tramp-sh.el (tramp-maybe-open-connection): * net/tramp-smb.el (tramp-smb-maybe-open-connection): Call it. * net/tramp-cache.el (tramp-cache-print): Don't print text properties also for hash values. --- lisp/ChangeLog | 13 +++++++++++++ lisp/net/tramp-adb.el | 2 +- lisp/net/tramp-cache.el | 22 ++++++++++++---------- lisp/net/tramp-gvfs.el | 2 +- lisp/net/tramp-sh.el | 2 +- lisp/net/tramp-smb.el | 2 +- lisp/net/tramp.el | 12 ++++++++---- 7 files changed, 37 insertions(+), 18 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7dea339d669..de9b8d91516 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,16 @@ +2013-09-13 Michael Albinus + + * net/tramp.el (tramp-check-proper-method-and-host): Rename it from + `tramp-check-proper-host'. Check for a valid method name. + + * net/tramp-adb.el (tramp-adb-maybe-open-connection): + * net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection): + * net/tramp-sh.el (tramp-maybe-open-connection): + * net/tramp-smb.el (tramp-smb-maybe-open-connection): Call it. + + * net/tramp-cache.el (tramp-cache-print): Don't print text properties + also for hash values. + 2013-09-12 Stefan Monnier * term/ns-win.el (parameters): Don't declare as dynamic. diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index 595037ab943..132ffaa27a8 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -1092,7 +1092,7 @@ FMT and ARGS are passed to `error'." "Maybe open a connection VEC. Does not do anything if a connection is already open, but re-opens the connection if a previous connection has died for some reason." - (tramp-check-proper-host vec) + (tramp-check-proper-method-and-host vec) (let* ((buf (tramp-get-connection-buffer vec)) (p (get-buffer-process buf)) diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el index b4e5e4ffd0f..7407f83e92b 100644 --- a/lisp/net/tramp-cache.el +++ b/lisp/net/tramp-cache.el @@ -285,16 +285,18 @@ KEY identifies the connection, it is either a process or a vector." (let (result) (maphash (lambda (key value) - ;; Remove text properties from KEY. - (when (vectorp key) - (dotimes (i (length key)) - (when (stringp (aref key i)) - (aset key i - (funcall - ;; `substring-no-properties' does not exist in XEmacs. - (if (functionp 'substring-no-properties) - 'substring-no-properties 'identity) - (aref key i)))))) + ;; Remove text properties from KEY and VALUE. + ;; `substring-no-properties' does not exist in XEmacs. + (when (functionp 'substring-no-properties) + (when (vectorp key) + (dotimes (i (length key)) + (when (stringp (aref key i)) + (aset key i (funcall 'substring-no-properties (aref key i)))))) + (when (stringp key) + (setq key (funcall 'substring-no-properties key))) + (when (stringp value) + (setq value (funcall 'substring-no-properties value)))) + ;; Dump. (let ((tmp (format "(%s %s)" (if (processp key) diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index e764e4767dd..8f79e495420 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -1465,7 +1465,7 @@ It was \"a(say)\", but has changed to \"a{sv})\"." "Maybe open a connection VEC. Does not do anything if a connection is already open, but re-opens the connection if a previous connection has died for some reason." - (tramp-check-proper-host vec) + (tramp-check-proper-method-and-host vec) ;; We set the file name, in case there are incoming D-Bus signals or ;; D-Bus errors. diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index f91cbb29a1d..e37c34e0df9 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -4286,7 +4286,7 @@ Gateway hops are already opened." "Maybe open a connection VEC. Does not do anything if a connection is already open, but re-opens the connection if a previous connection has died for some reason." - (tramp-check-proper-host vec) + (tramp-check-proper-method-and-host vec) (let ((p (tramp-get-connection-process vec)) (process-name (tramp-get-connection-property vec "process-name" nil)) diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index 27f3bd41e9c..03ad62be0a5 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -1566,7 +1566,7 @@ Does not do anything if a connection is already open, but re-opens the connection if a previous connection has died for some reason. If ARGUMENT is non-nil, use it as argument for `tramp-smb-winexe-program', and suppress any checks." - (tramp-check-proper-host vec) + (tramp-check-proper-method-and-host vec) (let* ((share (tramp-smb-get-share vec)) (buf (tramp-get-connection-buffer vec)) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index fe4f7b8bb54..48420aad5a3 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1265,15 +1265,19 @@ This is HOST, if non-nil. Otherwise, it is `tramp-default-host'." lhost) tramp-default-host)) -(defun tramp-check-proper-host (vec) - "Check host name of VEC." +(defun tramp-check-proper-method-and-host (vec) + "Check method and host name of VEC." (let ((method (tramp-file-name-method vec)) (user (tramp-file-name-user vec)) - (host (tramp-file-name-host vec))) + (host (tramp-file-name-host vec)) + (methods (mapcar 'car tramp-methods))) + (when (and method (not (member method methods))) + (tramp-cleanup-connection vec) + (tramp-user-error vec "Unknown method \"%s\"" method)) (when (and (equal tramp-syntax 'ftp) host (or (null method) (get-text-property 0 'tramp-default method)) (or (null user) (get-text-property 0 'tramp-default user)) - (member host (mapcar 'car tramp-methods))) + (member host methods)) (tramp-cleanup-connection vec) (tramp-user-error vec "Host name must not match method \"%s\"" host)))) From a89f3fdfa0809ce575820da4abbd2950c6b0c97a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 12 Sep 2013 23:37:39 -0700 Subject: [PATCH 118/321] * cedet/semantic/ia.el (semantic-ia-complete-symbol-menu): Comment it out, since it cannot work. Fixes: debbugs:14522 --- lisp/cedet/ChangeLog | 5 +++ lisp/cedet/semantic/ia.el | 77 ++++++++++++++++++++------------------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 6be1c44743a..2094523cdaa 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,8 @@ +2013-09-13 Glenn Morris + + * semantic/ia.el (semantic-ia-complete-symbol-menu): + Comment it out, since it cannot work. (Bug#14522) + 2013-09-12 Glenn Morris * semantic/find.el (semantic-find-first-tag-by-name): diff --git a/lisp/cedet/semantic/ia.el b/lisp/cedet/semantic/ia.el index d087ac6fcde..d1ff7f1d9aa 100644 --- a/lisp/cedet/semantic/ia.el +++ b/lisp/cedet/semantic/ia.el @@ -149,44 +149,45 @@ Completion options are calculated with `semantic-analyze-possible-completions'." :group 'semantic :type semantic-format-tag-custom-list) -;;;###autoload -(defun semantic-ia-complete-symbol-menu (point) - "Complete the current symbol via a menu based at POINT. -Completion options are calculated with `semantic-analyze-possible-completions'." - (interactive "d") - (require 'imenu) - (let* ((a (semantic-analyze-current-context point)) - (syms (semantic-analyze-possible-completions a)) - ) - ;; Complete this symbol. - (if (not syms) - (progn - (message "No smart completions found. Trying Senator.") - (when (semantic-analyze-context-p a) - ;; This is a quick way of getting a nice completion list - ;; in the menu if the regular context mechanism fails. - (senator-completion-menu-popup))) - - (let* ((menu - (mapcar - (lambda (tag) - (cons - (funcall semantic-ia-completion-menu-format-tag-function tag) - (vector tag))) - syms)) - (ans - (imenu--mouse-menu - ;; XEmacs needs that the menu has at least 2 items. So, - ;; include a nil item that will be ignored by imenu. - (cons nil menu) - (senator-completion-menu-point-as-event) - "Completions"))) - (when ans - (if (not (semantic-tag-p ans)) - (setq ans (aref (cdr ans) 0))) - (delete-region (car (oref a bounds)) (cdr (oref a bounds))) - (semantic-ia-insert-tag ans)) - )))) +;; Disabled - see http://debbugs.gnu.org/14522 +;; ;;;###autoload +;; (defun semantic-ia-complete-symbol-menu (point) +;; "Complete the current symbol via a menu based at POINT. +;; Completion options are calculated with `semantic-analyze-possible-completions'." +;; (interactive "d") +;; (require 'imenu) +;; (let* ((a (semantic-analyze-current-context point)) +;; (syms (semantic-analyze-possible-completions a)) +;; ) +;; ;; Complete this symbol. +;; (if (not syms) +;; (progn +;; (message "No smart completions found. Trying Senator.") +;; (when (semantic-analyze-context-p a) +;; ;; This is a quick way of getting a nice completion list +;; ;; in the menu if the regular context mechanism fails. +;; (senator-completion-menu-popup))) +;; +;; (let* ((menu +;; (mapcar +;; (lambda (tag) +;; (cons +;; (funcall semantic-ia-completion-menu-format-tag-function tag) +;; (vector tag))) +;; syms)) +;; (ans +;; (imenu--mouse-menu +;; ;; XEmacs needs that the menu has at least 2 items. So, +;; ;; include a nil item that will be ignored by imenu. +;; (cons nil menu) +;; (senator-completion-menu-point-as-event) +;; "Completions"))) +;; (when ans +;; (if (not (semantic-tag-p ans)) +;; (setq ans (aref (cdr ans) 0))) +;; (delete-region (car (oref a bounds)) (cdr (oref a bounds))) +;; (semantic-ia-insert-tag ans)) +;; )))) ;;; Completions Tip ;; From 35ffc6ba91d41fab2e370ddb7587ad7fc17bd25b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 12 Sep 2013 23:56:35 -0700 Subject: [PATCH 119/321] * lisp/progmodes/gdb-mi.el (gud-cont, gud-step): Declare. --- lisp/ChangeLog | 4 ++++ lisp/progmodes/gdb-mi.el | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index de9b8d91516..a05bdb99e26 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-13 Glenn Morris + + * progmodes/gdb-mi.el (gud-cont, gud-step): Declare. + 2013-09-13 Michael Albinus * net/tramp.el (tramp-check-proper-method-and-host): Rename it from diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 2017636435c..2f1f7b3c8d3 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -3257,11 +3257,16 @@ line." gud-stop-subjob "Interrupt thread at current line.") +;; Defined opaquely in M-x gdb via gud-def. +(declare-function gud-cont "gdb-mi" (arg) t) + (def-gdb-thread-buffer-gud-command gdb-continue-thread gud-cont "Continue thread at current line.") +(declare-function gud-step "gdb-mi" (arg) t) + (def-gdb-thread-buffer-gud-command gdb-step-thread gud-step From d6a0426625234e201b1df4514fdf735bca614463 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 00:01:55 -0700 Subject: [PATCH 120/321] Silence some url compilation warnings on systems without zlib * url-http.el (url-handle-content-transfer-encoding): * url-vars.el (url-mime-encoding-string): Silence compiler. --- lisp/url/ChangeLog | 5 +++++ lisp/url/url-http.el | 2 +- lisp/url/url-vars.el | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 52a69690534..3f48b8ff431 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,8 @@ +2013-09-13 Glenn Morris + + * url-http.el (url-handle-content-transfer-encoding): + * url-vars.el (url-mime-encoding-string): Silence compiler. + 2013-08-14 Lars Magne Ingebrigtsen * url-http.el (url-http-parse-headers): Always place point at the diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index 7047e6b5f13..4f9e868c05e 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -861,7 +861,7 @@ should be shown to the user." (defun url-handle-content-transfer-encoding () (let ((encoding (mail-fetch-field "content-encoding"))) (when (and encoding - (fboundp 'zlib-decompress-region) + (fboundp 'zlib-available-p) (zlib-available-p) (equal (downcase encoding) "gzip")) (save-restriction diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el index 0361e01dfb4..a34111c27b7 100644 --- a/lisp/url/url-vars.el +++ b/lisp/url/url-vars.el @@ -210,7 +210,7 @@ Should be an assoc list of headers/contents.") (defvar url-request-method nil "The method to use for the next request.") -(defvar url-mime-encoding-string (and (fboundp 'zlib-decompress-region) +(defvar url-mime-encoding-string (and (fboundp 'zlib-available-p) (zlib-available-p) "gzip") "String to send in the Accept-encoding: field in HTTP requests.") From fcef2e13960af4f30ced7571771f581091d18c17 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 00:07:07 -0700 Subject: [PATCH 121/321] * lisp/eshell/em-prompt.el (eshell/pwd): Autoload it. Otherwise an error occurs if eshell-dirs module not loaded. --- lisp/ChangeLog | 3 +++ lisp/eshell/em-prompt.el | 2 ++ 2 files changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a05bdb99e26..74f791837e2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-13 Glenn Morris + * eshell/em-prompt.el (eshell/pwd): Autoload it. + Otherwise an error occurs if eshell-dirs module not loaded. + * progmodes/gdb-mi.el (gud-cont, gud-step): Declare. 2013-09-13 Michael Albinus diff --git a/lisp/eshell/em-prompt.el b/lisp/eshell/em-prompt.el index 9b9c1095277..e79c7d7ba63 100644 --- a/lisp/eshell/em-prompt.el +++ b/lisp/eshell/em-prompt.el @@ -45,6 +45,8 @@ as is common with most shells." :type 'hook :group 'eshell-prompt) +(autoload 'eshell/pwd "em-dirs") + (defcustom eshell-prompt-function (function (lambda () From 2ada368ae92ff7b39e3beef407351fdfd31ae87b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 00:10:30 -0700 Subject: [PATCH 122/321] * lisp/eshell/esh-ext.el (eshell-search-path): Declare. --- lisp/ChangeLog | 2 ++ lisp/eshell/esh-ext.el | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 74f791837e2..53153b22f4a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-13 Glenn Morris + * eshell/esh-ext.el (eshell-search-path): Declare. + * eshell/em-prompt.el (eshell/pwd): Autoload it. Otherwise an error occurs if eshell-dirs module not loaded. diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el index 8b312a2c25c..e2cca35a267 100644 --- a/lisp/eshell/esh-ext.el +++ b/lisp/eshell/esh-ext.el @@ -92,6 +92,10 @@ since nothing else but Eshell will be able to understand (setq list (cdr list))) file))) +;; This file provides itself then eval-when-compile loads files that require it. +;; This causes spurious "might not be defined at runtime" warnings. +(declare-function eshell-search-path "esh-ext" (name)) + (defcustom eshell-windows-shell-file (if (eshell-under-windows-p) (if (string-match "\\(cmdproxy\\|sh\\)\\.\\(com\\|exe\\)" From 5c3f9bcc3dc27495d5beef5eca397ba383592302 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 00:12:44 -0700 Subject: [PATCH 123/321] * eshell/esh-util.el (ange-cache): Move declaration earlier. --- lisp/ChangeLog | 2 ++ lisp/eshell/esh-util.el | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 53153b22f4a..014b48771c1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-13 Glenn Morris + * eshell/esh-util.el (ange-cache): Move declaration earlier. + * eshell/esh-ext.el (eshell-search-path): Declare. * eshell/em-prompt.el (eshell/pwd): Autoload it. diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index cac46ea8d18..5fa591a3082 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -562,6 +562,8 @@ Unless optional argument INPLACE is non-nil, return a new string." (substring string 0 sublen) string))) +(defvar ange-cache) + (and (featurep 'xemacs) (not (fboundp 'directory-files-and-attributes)) (defun directory-files-and-attributes (directory &optional full match nosort id-format) @@ -579,8 +581,6 @@ If NOSORT is non-nil, the list is not sorted--its order is unpredictable. (cons file (eshell-file-attributes (expand-file-name file directory))))) (directory-files directory full match nosort))))) -(defvar ange-cache) - (defun eshell-directory-files-and-attributes (dir &optional full match nosort id-format) "Make sure to use the handler for `directory-file-and-attributes'." (let* ((dir (expand-file-name dir))) From 96fd6ea2144e30cfb7aae3a3267e349b2e64bc1b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 00:19:15 -0700 Subject: [PATCH 124/321] * lisp/gnus/gnus-html.el (image-size): Declare. (declare-function): Add compat stub for ancient Emacs. --- lisp/gnus/ChangeLog | 5 +++++ lisp/gnus/gnus-html.el | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 2eea1fb833e..4e72ae06f51 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2013-09-13 Glenn Morris + + * gnus-html.el (declare-function): Add compat stub for ancient Emacs. + (image-size): Declare. + 2013-09-12 Glenn Morris * gnus-icalendar.el (gnus-icalendar-event--build-reply-event-body): diff --git a/lisp/gnus/gnus-html.el b/lisp/gnus/gnus-html.el index a5625dfed80..2700af3d009 100644 --- a/lisp/gnus/gnus-html.el +++ b/lisp/gnus/gnus-html.el @@ -28,6 +28,10 @@ ;;; Code: +;; For Emacs <22.2 and XEmacs. +(eval-and-compile + (unless (fboundp 'declare-function) (defmacro declare-function (&rest r)))) + (eval-when-compile (require 'cl)) (require 'gnus-art) @@ -438,6 +442,9 @@ Return a string with image data." (truncate (* gnus-max-image-proportion (- (nth 3 edges) (nth 1 edges))))))) +;; Behind display-graphic-p test. +(declare-function image-size "image.c" (spec &optional pixels frame)) + (defun gnus-html-put-image (data url &optional alt-text) "Put an image with DATA from URL and optional ALT-TEXT." (when (gnus-graphic-display-p) From 311273ab7973644d14ffa2e5c0f3516306aa4d6d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 00:28:16 -0700 Subject: [PATCH 125/321] * lisp/gnus/gnus-spec.el (gnus-xmas-format): Fix weird error call. --- lisp/gnus/ChangeLog | 2 ++ lisp/gnus/gnus-spec.el | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 4e72ae06f51..5ba1d45e46a 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,5 +1,7 @@ 2013-09-13 Glenn Morris + * gnus-spec.el (gnus-xmas-format): Fix weird error call. + * gnus-html.el (declare-function): Add compat stub for ancient Emacs. (image-size): Declare. diff --git a/lisp/gnus/gnus-spec.el b/lisp/gnus/gnus-spec.el index 0ff8ec89ac1..a39f185b56d 100644 --- a/lisp/gnus/gnus-spec.el +++ b/lisp/gnus/gnus-spec.el @@ -512,7 +512,8 @@ are supported for %s." (delete-char -1)) (t (if (null args) - (error 'wrong-number-of-arguments #'my-format n fstring)) + (signal 'wrong-number-of-arguments + (list #'gnus-xmas-format n fstring))) (let* ((minlen (string-to-number (or (match-string 2) ""))) (arg (car args)) (str (if (stringp arg) arg (format "%s" arg))) From 413f9061afd494139410725dff836f2d27a17ab8 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 00:30:32 -0700 Subject: [PATCH 126/321] * lisp/gnus/mml2015.el (gnus-create-image): Autoload it. --- lisp/gnus/ChangeLog | 2 ++ lisp/gnus/mml2015.el | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 5ba1d45e46a..9c11d17645c 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,5 +1,7 @@ 2013-09-13 Glenn Morris + * mml2015.el (gnus-create-image): Autoload it. + * gnus-spec.el (gnus-xmas-format): Fix weird error call. * gnus-html.el (declare-function): Add compat stub for ancient Emacs. diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el index 3efa5c23bb3..a2fa1a1c532 100644 --- a/lisp/gnus/mml2015.el +++ b/lisp/gnus/mml2015.el @@ -866,6 +866,8 @@ If set, it overrides the setting of `mml2015-sign-with-sender'." (setq secret-keys (cdr secret-keys)))) secret-key)) +(autoload 'gnus-create-image "gnus-ems") + (defun mml2015-epg-key-image (key-id) "Return the image of a key, if any" (with-temp-buffer From 1143ebe1e015b36d0b2da74c1418f3f8b693bb09 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 00:34:15 -0700 Subject: [PATCH 127/321] * lisp/erc/erc-desktop-notifications.el (dbus-debug): Declare. --- lisp/erc/ChangeLog | 4 ++++ lisp/erc/erc-desktop-notifications.el | 2 ++ 2 files changed, 6 insertions(+) diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index e0628dbb80a..70cab5af319 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,7 @@ +2013-09-13 Glenn Morris + + * erc-desktop-notifications.el (dbus-debug): Declare. + 2013-08-22 Stefan Monnier * erc.el: Use lexical-binding. diff --git a/lisp/erc/erc-desktop-notifications.el b/lisp/erc/erc-desktop-notifications.el index ac6c202b18a..60c49cc8870 100644 --- a/lisp/erc/erc-desktop-notifications.el +++ b/lisp/erc/erc-desktop-notifications.el @@ -46,6 +46,8 @@ :group 'erc-notifications :type '(choice (const :tag "No icon" nil) file)) +(defvar dbus-debug) ; used in the macroexpansion of dbus-ignore-errors + (defun erc-notifications-notify (nick msg) "Notify that NICK send some MSG. This will replace the last notification sent with this function." From 3509fb4083986c2d2d4b98f114abbf0a11564105 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 13 Sep 2013 11:26:03 +0300 Subject: [PATCH 128/321] doc/lispref/text.texi (Not Intervals): Minor wording fix. --- doc/lispref/ChangeLog | 7 ++++++- doc/lispref/text.texi | 9 +++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index ed073456e7e..b37fa4e64f3 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,6 +1,11 @@ +2013-09-13 Eli Zaretskii + + * text.texi (Not Intervals): Minor wording fix. + 2013-09-12 Xue Fuqiao - * functions.texi (Obsolete Functions): Add an index for obsolete functions. + * functions.texi (Obsolete Functions): Add an index for obsolete + functions. 2013-09-11 Xue Fuqiao diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index c4250f2f0ba..aa19338ddaf 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -3920,10 +3920,11 @@ between one interval and two. Insertion of text at the border between intervals also raises questions that have no satisfactory answer. - However, it is easy to arrange for editing to behave consistently for -questions of the form, ``What are the properties of this character?'' -So we have decided these are the only questions that make sense; we have -not implemented asking questions about where intervals start or end. + However, it is easy to arrange for editing to behave consistently +for questions of the form, ``What are the properties of text at this +buffer or string position?'' So we have decided these are the only +questions that make sense; we have not implemented asking questions +about where intervals start or end. In practice, you can usually use the text property search functions in place of explicit interval boundaries. You can think of them as finding From 84387cd2595e0e99bb6976fe1e160156b5291611 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 13 Sep 2013 16:22:47 +0300 Subject: [PATCH 129/321] Fix bug #15337 with non-ASCII characters in file names used by ansi lisp/term.el (term-emulate-terminal): Decode the command string before passing it to term-command-hook. --- lisp/ChangeLog | 5 +++++ lisp/term.el | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 014b48771c1..93156233ee1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-13 Eli Zaretskii + + * term.el (term-emulate-terminal): Decode the command string + before passing it to term-command-hook. (Bug#15337) + 2013-09-13 Glenn Morris * eshell/esh-util.el (ange-cache): Move declaration earlier. diff --git a/lisp/term.el b/lisp/term.el index 31889a78273..be080297b2e 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -2937,8 +2937,10 @@ See `term-prompt-regexp'." (let ((end (string-match "\r?$" str i))) (if end (funcall term-command-hook - (prog1 (substring str (1+ i) end) - (setq i (match-end 0)))) + (decode-coding-string + (prog1 (substring str (1+ i) end) + (setq i (match-end 0))) + locale-coding-system)) (setq term-terminal-parameter (substring str i)) (setq term-terminal-state 4) (setq i str-length)))) From 7830899f39515bcb4938715ebf58d1ba855deb41 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 13 Sep 2013 10:56:03 -0400 Subject: [PATCH 130/321] * lisp/ls-lisp.el: Use advice-add. (original-insert-directory): Remove. (ls-lisp--insert-directory): Rename from insert-directory; add `orig-fun' argument. (insert-directory): Advise. --- lisp/ChangeLog | 8 ++++++++ lisp/ls-lisp.el | 23 +++++++---------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 93156233ee1..649e3a3b01c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2013-09-13 Stefan Monnier + + * ls-lisp.el: Use advice-add. + (original-insert-directory): Remove. + (ls-lisp--insert-directory): Rename from insert-directory; add + `orig-fun' argument. + (insert-directory): Advise. + 2013-09-13 Eli Zaretskii * term.el (term-emulate-terminal): Decode the command string diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el index 82a78545d62..9ffbd2ccf56 100644 --- a/lisp/ls-lisp.el +++ b/lisp/ls-lisp.el @@ -198,9 +198,6 @@ to fail to line up, e.g. if month names are not all of the same length." :type 'boolean :group 'ls-lisp) -(defvar original-insert-directory nil - "This holds the original function definition of `insert-directory'.") - (defvar ls-lisp-uid-d-fmt "-%d" "Format to display integer UIDs.") (defvar ls-lisp-uid-s-fmt "-%s" @@ -213,15 +210,10 @@ to fail to line up, e.g. if month names are not all of the same length." "Format to display integer file sizes.") (defvar ls-lisp-filesize-f-fmt "%.0f" "Format to display float file sizes.") - -;; Remember the original insert-directory function -(or (featurep 'ls-lisp) ; FJW: unless this file is being reloaded! - (setq original-insert-directory (symbol-function 'insert-directory))) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defun insert-directory (file switches &optional wildcard full-directory-p) +(defun ls-lisp--insert-directory (orig-fun file switches &optional wildcard full-directory-p) "Insert directory listing for FILE, formatted according to SWITCHES. Leaves point after the inserted text. SWITCHES may be a string of options, or a list of strings. @@ -231,12 +223,10 @@ switches do not contain `d', so that a full listing is expected. This version of the function comes from `ls-lisp.el'. If the value of `ls-lisp-use-insert-directory-program' is non-nil then -it works exactly like the version from `files.el' and runs a directory -listing program whose name is in the variable -`insert-directory-program'; if also WILDCARD is non-nil then it runs -the shell specified by `shell-file-name'. If the value of -`ls-lisp-use-insert-directory-program' is nil then it runs a Lisp -emulation. +this advice just delegates the work to ORIG-FUN (the normal `insert-directory' +function from `files.el'). +But if the value of `ls-lisp-use-insert-directory-program' is nil +then it runs a Lisp emulation. The Lisp emulation does not run any external programs or shells. It supports ordinary shell wildcards if `ls-lisp-support-shell-wildcards' @@ -245,7 +235,7 @@ to match file names. It does not support all `ls' switches -- those that work are: A a B C c F G g h i n R r S s t U u X. The l switch is assumed to be always present and cannot be turned off." (if ls-lisp-use-insert-directory-program - (funcall original-insert-directory + (funcall orig-fun file switches wildcard full-directory-p) ;; We need the directory in order to find the right handler. (let ((handler (find-file-name-handler (expand-file-name file) @@ -305,6 +295,7 @@ is assumed to be always present and cannot be turned off." (replace-match "total used in directory") (end-of-line) (insert " available " available))))))))) +(advice-add 'insert-directory :around #'ls-lisp--insert-directory) (defun ls-lisp-insert-directory (file switches time-index wildcard-regexp full-directory-p) From aad3612f9eb7280bd4db8ee697186e75b1e82765 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 13 Sep 2013 19:03:51 +0400 Subject: [PATCH 131/321] Unify FRAME_window_system_DISPLAY_INFO macros between all ports. All of them are replaced with FRAME_DISPLAY_INFO, defined in each port to reference the port-specific window system data. * msdos.h (FRAME_X_DISPLAY_INFO): Remove. (FRAME_DISPLAY_INFO): Define. * w32term.h (FRAME_W32_DISPLAY_INFO, FRAME_X_DISPLAY_INFO): Remove. (FRAME_DISPLAY_INFO): Define. Adjust users. * xterm.h (FRAME_X_DISPLAY_INFO): Remove. (FRAME_DISPLAY_INFO): Define. Adjust users. * frame.h (FRAME_RES_X, FRAME_RES_Y): Unify. * font.c, frame.c, gtkutil.c, image.c, menu.c, msdos.c, nsfns.m: * nsfont.m, nsterm.m, w32fns.c, w32font.c, w32menu.c, w32term.c: * w32xfns.c, widget.c, xdisp.c, xfaces.c, xfns.c, xfont.c, xmenu.c: * xselect.c, xterm.c: All related users changed. --- src/ChangeLog | 17 ++++++ src/font.c | 8 +-- src/frame.c | 16 +++--- src/frame.h | 52 +++++++---------- src/gtkutil.c | 6 +- src/image.c | 30 +++++----- src/menu.c | 4 +- src/msdos.c | 4 +- src/msdos.h | 2 +- src/nsfns.m | 26 ++++----- src/nsfont.m | 4 +- src/nsterm.h | 14 ++--- src/nsterm.m | 22 ++++---- src/w32fns.c | 76 ++++++++++++------------- src/w32font.c | 2 +- src/w32menu.c | 6 +- src/w32term.c | 44 +++++++-------- src/w32term.h | 7 +-- src/w32xfns.c | 2 +- src/widget.c | 2 +- src/xdisp.c | 10 ++-- src/xfaces.c | 12 ++-- src/xfns.c | 122 ++++++++++++++++++++-------------------- src/xfont.c | 10 ++-- src/xmenu.c | 20 +++---- src/xselect.c | 20 +++---- src/xterm.c | 150 +++++++++++++++++++++++++------------------------- src/xterm.h | 18 +++--- 28 files changed, 352 insertions(+), 354 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 960165a22f9..57cb776038a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,20 @@ +2013-09-13 Dmitry Antipov + + Unify FRAME_window_system_DISPLAY_INFO macros between all ports. + All of them are replaced with FRAME_DISPLAY_INFO, defined in + each port to reference the port-specific window system data. + * msdos.h (FRAME_X_DISPLAY_INFO): Remove. + (FRAME_DISPLAY_INFO): Define. + * w32term.h (FRAME_W32_DISPLAY_INFO, FRAME_X_DISPLAY_INFO): Remove. + (FRAME_DISPLAY_INFO): Define. Adjust users. + * xterm.h (FRAME_X_DISPLAY_INFO): Remove. + (FRAME_DISPLAY_INFO): Define. Adjust users. + * frame.h (FRAME_RES_X, FRAME_RES_Y): Unify. + * font.c, frame.c, gtkutil.c, image.c, menu.c, msdos.c, nsfns.m: + * nsfont.m, nsterm.m, w32fns.c, w32font.c, w32menu.c, w32term.c: + * w32xfns.c, widget.c, xdisp.c, xfaces.c, xfns.c, xfont.c, xmenu.c: + * xselect.c, xterm.c: All related users changed. + 2013-09-13 Dmitry Antipov * xterm.h (x_window_to_frame, x_any_window_to_frame) diff --git a/src/font.c b/src/font.c index 2606a25dff8..fb64f2d9071 100644 --- a/src/font.c +++ b/src/font.c @@ -2861,8 +2861,8 @@ font_open_entity (struct frame *f, Lisp_Object entity, int pixel_size) : 1); height = (font->height ? font->height : 1); #ifdef HAVE_WINDOW_SYSTEM - FRAME_X_DISPLAY_INFO (f)->n_fonts++; - if (FRAME_X_DISPLAY_INFO (f)->n_fonts == 1) + FRAME_DISPLAY_INFO (f)->n_fonts++; + if (FRAME_DISPLAY_INFO (f)->n_fonts == 1) { FRAME_SMALLEST_CHAR_WIDTH (f) = min_width; FRAME_SMALLEST_FONT_HEIGHT (f) = height; @@ -2894,8 +2894,8 @@ font_close_object (struct frame *f, Lisp_Object font_object) FONT_ADD_LOG ("close", font_object, Qnil); font->driver->close (f, font); #ifdef HAVE_WINDOW_SYSTEM - eassert (FRAME_X_DISPLAY_INFO (f)->n_fonts); - FRAME_X_DISPLAY_INFO (f)->n_fonts--; + eassert (FRAME_DISPLAY_INFO (f)->n_fonts); + FRAME_DISPLAY_INFO (f)->n_fonts--; #endif } diff --git a/src/frame.c b/src/frame.c index 692d224866c..0de3152166e 100644 --- a/src/frame.c +++ b/src/frame.c @@ -2207,7 +2207,7 @@ If FRAME is nil, describe the currently selected frame. */) value = f->name; #ifdef HAVE_X_WINDOWS else if (EQ (parameter, Qdisplay) && FRAME_X_P (f)) - value = XCAR (FRAME_X_DISPLAY_INFO (f)->name_list_element); + value = XCAR (FRAME_DISPLAY_INFO (f)->name_list_element); #endif /* HAVE_X_WINDOWS */ else if (EQ (parameter, Qbackground_color) || EQ (parameter, Qforeground_color)) @@ -2598,7 +2598,7 @@ x_fullscreen_adjust (struct frame *f, int *width, int *height, int *top_pos, int { int newwidth = FRAME_COLS (f); int newheight = FRAME_LINES (f); - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); *top_pos = f->top_pos; *left_pos = f->left_pos; @@ -2973,9 +2973,9 @@ x_report_frame_params (struct frame *f, Lisp_Object *alistptr) (FRAME_VISIBLE_P (f) ? Qt : FRAME_ICONIFIED_P (f) ? Qicon : Qnil)); store_in_alist (alistptr, Qdisplay, - XCAR (FRAME_X_DISPLAY_INFO (f)->name_list_element)); + XCAR (FRAME_DISPLAY_INFO (f)->name_list_element)); - if (FRAME_X_OUTPUT (f)->parent_desc == FRAME_X_DISPLAY_INFO (f)->root_window) + if (FRAME_X_OUTPUT (f)->parent_desc == FRAME_DISPLAY_INFO (f)->root_window) tem = Qnil; else tem = make_natnum ((uintptr_t) FRAME_X_OUTPUT (f)->parent_desc); @@ -3631,7 +3631,7 @@ x_get_resource_string (const char *attribute, const char *class) esprintf (name_key, "%s.%s", SSDATA (Vinvocation_name), attribute); sprintf (class_key, "%s.%s", EMACS_CLASS, class); - result = x_get_string_resource (FRAME_X_DISPLAY_INFO (sf)->xrdb, + result = x_get_string_resource (FRAME_DISPLAY_INFO (sf)->xrdb, name_key, class_key); SAFE_FREE (); return result; @@ -3753,7 +3753,7 @@ x_frame_get_arg (struct frame *f, Lisp_Object alist, Lisp_Object param, const char *attribute, const char *class, enum resource_types type) { - return x_get_arg (FRAME_X_DISPLAY_INFO (f), + return x_get_arg (FRAME_DISPLAY_INFO (f), alist, param, attribute, class, type); } @@ -3767,7 +3767,7 @@ x_frame_get_and_record_arg (struct frame *f, Lisp_Object alist, { Lisp_Object value; - value = x_get_arg (FRAME_X_DISPLAY_INFO (f), alist, param, + value = x_get_arg (FRAME_DISPLAY_INFO (f), alist, param, attribute, class, type); if (! NILP (value) && ! EQ (value, Qunbound)) store_frame_param (f, param, value); @@ -3971,7 +3971,7 @@ x_figure_window_size (struct frame *f, Lisp_Object parms, bool toolbar_p) { register Lisp_Object tem0, tem1, tem2; long window_prompting = 0; - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); /* Default values if we fall through. Actually, if that happens we should get diff --git a/src/frame.h b/src/frame.h index 3aea0cfa27c..4184ce24a17 100644 --- a/src/frame.h +++ b/src/frame.h @@ -600,36 +600,6 @@ default_pixels_per_inch_y (void) #define FRAME_NS_P(f) ((f)->output_method == output_ns) #endif -/* Dots per inch of the screen the frame F is on. */ - -#ifdef HAVE_X_WINDOWS -#define FRAME_RES_X(f) \ - (eassert (FRAME_X_P (f)), FRAME_X_DISPLAY_INFO (f)->resx) -#define FRAME_RES_Y(f) \ - (eassert (FRAME_X_P (f)), FRAME_X_DISPLAY_INFO (f)->resy) -#endif - -#ifdef HAVE_NTGUI -#define FRAME_RES_X(f) \ - (eassert (FRAME_W32_P (f)), FRAME_W32_DISPLAY_INFO (f)->resx) -#define FRAME_RES_Y(f) \ - (eassert (FRAME_W32_P (f)), FRAME_W32_DISPLAY_INFO (f)->resy) -#endif - -#ifdef HAVE_NS -#define FRAME_RES_X(f) \ - (eassert (FRAME_NS_P (f)), FRAME_NS_DISPLAY_INFO (f)->resx) -#define FRAME_RES_Y(f) \ - (eassert (FRAME_NS_P (f)), FRAME_NS_DISPLAY_INFO (f)->resy) -#endif - -/* Defaults when no window system available. */ - -#ifndef FRAME_RES_X -#define FRAME_RES_X(f) default_pixels_per_inch_x () -#define FRAME_RES_Y(f) default_pixels_per_inch_y () -#endif - /* FRAME_WINDOW_P tests whether the frame is a window, and is defined to be the predicate for the window system being used. */ @@ -646,14 +616,32 @@ default_pixels_per_inch_y (void) #define FRAME_WINDOW_P(f) ((void) (f), 0) #endif +/* Dots per inch of the screen the frame F is on. */ + +#ifdef HAVE_WINDOW_SYSTEM + +#define FRAME_RES_X(f) \ + (eassert (FRAME_WINDOW_P (f)), FRAME_DISPLAY_INFO (f)->resx) +#define FRAME_RES_Y(f) \ + (eassert (FRAME_WINDOW_P (f)), FRAME_DISPLAY_INFO (f)->resy) + +#else /* !HAVE_WINDOW_SYSTEM */ + +/* Defaults when no window system available. */ + +#define FRAME_RES_X(f) default_pixels_per_inch_x () +#define FRAME_RES_Y(f) default_pixels_per_inch_y () + +#endif /* HAVE_WINDOW_SYSTEM */ + /* Return a pointer to the structure holding information about the region of text, if any, that is currently shown in mouse-face on frame F. We need to define two versions because a TTY-only build - does not have FRAME_X_DISPLAY_INFO. */ + does not have FRAME_DISPLAY_INFO. */ #ifdef HAVE_WINDOW_SYSTEM # define MOUSE_HL_INFO(F) \ (FRAME_WINDOW_P(F) \ - ? &FRAME_X_DISPLAY_INFO(F)->mouse_highlight \ + ? &FRAME_DISPLAY_INFO(F)->mouse_highlight \ : &(F)->output_data.tty->display_info->mouse_highlight) #else # define MOUSE_HL_INFO(F) \ diff --git a/src/gtkutil.c b/src/gtkutil.c index 6228f2150f5..064145282bc 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -2737,7 +2737,7 @@ xg_create_widget (const char *type, const char *name, struct frame *f, { /* Must realize so the GdkWindow inside the widget is created. */ gtk_widget_realize (w); - xg_set_cursor (w, FRAME_X_DISPLAY_INFO (f)->xg_cursor); + xg_set_cursor (w, FRAME_DISPLAY_INFO (f)->xg_cursor); } } else @@ -3676,7 +3676,7 @@ xg_create_scroll_bar (struct frame *f, /* Set the cursor to an arrow. */ - xg_set_cursor (webox, FRAME_X_DISPLAY_INFO (f)->xg_cursor); + xg_set_cursor (webox, FRAME_DISPLAY_INFO (f)->xg_cursor); bar->x_window = scroll_id; } @@ -3972,7 +3972,7 @@ xg_tool_bar_callback (GtkWidget *w, gpointer client_data) /* Convert between the modifier bits GDK uses and the modifier bits Emacs uses. This assumes GDK and X masks are the same, which they are when this is written. */ - event.modifiers = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), mod); + event.modifiers = x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), mod); kbd_buffer_store_event (&event); /* Return focus to the frame after we have clicked on a detached diff --git a/src/image.c b/src/image.c index 1271376bcab..f0f7ff4b01f 100644 --- a/src/image.c +++ b/src/image.c @@ -161,13 +161,13 @@ XPutPixel (XImagePtr ximage, int x, int y, unsigned long pixel) int x_bitmap_height (struct frame *f, ptrdiff_t id) { - return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].height; + return FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].height; } int x_bitmap_width (struct frame *f, ptrdiff_t id) { - return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].width; + return FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].width; } #if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI) @@ -175,7 +175,7 @@ ptrdiff_t x_bitmap_pixmap (struct frame *f, ptrdiff_t id) { /* HAVE_NTGUI needs the explicit cast here. */ - return (ptrdiff_t) FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap; + return (ptrdiff_t) FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap; } #endif @@ -183,7 +183,7 @@ x_bitmap_pixmap (struct frame *f, ptrdiff_t id) int x_bitmap_mask (struct frame *f, ptrdiff_t id) { - return FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].mask; + return FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].mask; } #endif @@ -192,7 +192,7 @@ x_bitmap_mask (struct frame *f, ptrdiff_t id) static ptrdiff_t x_allocate_bitmap_record (struct frame *f) { - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); ptrdiff_t i; if (dpyinfo->bitmaps_last < dpyinfo->bitmaps_size) @@ -213,7 +213,7 @@ x_allocate_bitmap_record (struct frame *f) void x_reference_bitmap (struct frame *f, ptrdiff_t id) { - ++FRAME_X_DISPLAY_INFO (f)->bitmaps[id - 1].refcount; + ++FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].refcount; } /* Create a bitmap for frame F from a HEIGHT x WIDTH array of bits at BITS. */ @@ -221,7 +221,7 @@ x_reference_bitmap (struct frame *f, ptrdiff_t id) ptrdiff_t x_create_bitmap_from_data (struct frame *f, char *bits, unsigned int width, unsigned int height) { - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); ptrdiff_t id; #ifdef HAVE_X_WINDOWS @@ -235,8 +235,8 @@ x_create_bitmap_from_data (struct frame *f, char *bits, unsigned int width, unsi #ifdef HAVE_NTGUI Pixmap bitmap; bitmap = CreateBitmap (width, height, - FRAME_X_DISPLAY_INFO (XFRAME (frame))->n_planes, - FRAME_X_DISPLAY_INFO (XFRAME (frame))->n_cbits, + FRAME_DISPLAY_INFO (XFRAME (frame))->n_planes, + FRAME_DISPLAY_INFO (XFRAME (frame))->n_cbits, bits); if (! bitmap) return -1; @@ -280,7 +280,7 @@ x_create_bitmap_from_data (struct frame *f, char *bits, unsigned int width, unsi ptrdiff_t x_create_bitmap_from_file (struct frame *f, Lisp_Object file) { - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); #ifdef HAVE_NTGUI return -1; /* W32_TODO : bitmap support */ @@ -379,7 +379,7 @@ free_bitmap_record (Display_Info *dpyinfo, Bitmap_Record *bm) void x_destroy_bitmap (struct frame *f, ptrdiff_t id) { - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); if (id > 0) { @@ -454,7 +454,7 @@ x_create_bitmap_mask (struct frame *f, ptrdiff_t id) unsigned long x, y, xp, xm, yp, ym; GC gc; - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); if (!(id > 0)) return; @@ -3421,7 +3421,7 @@ xpm_image_p (Lisp_Object object) ptrdiff_t x_create_bitmap_from_xpm_data (struct frame *f, const char **bits) { - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); ptrdiff_t id; int rc; XpmAttributes attrs; @@ -4325,7 +4325,7 @@ lookup_rgb_color (struct frame *f, int r, int g, int b) two orders of magnitude. Freeing colors on TrueColor visuals is a nop, and pixel colors specify RGB values directly. See also the Xlib spec, chapter 3.1. */ - dpyinfo = FRAME_X_DISPLAY_INFO (f); + dpyinfo = FRAME_DISPLAY_INFO (f); if (dpyinfo->red_bits > 0) { unsigned long pr, pg, pb; @@ -4820,7 +4820,7 @@ x_edge_detection (struct frame *f, struct image *img, Lisp_Object matrix, static void x_disable_image (struct frame *f, struct image *img) { - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); #ifdef HAVE_NTGUI int n_planes = dpyinfo->n_planes * dpyinfo->n_cbits; #else diff --git a/src/menu.c b/src/menu.c index 6fce5b91caf..44bb5a57317 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1299,7 +1299,7 @@ no quit occurs and `x-popup-menu' returns nil. */) if (current_popup_menu) { discard_menu_items (); - FRAME_X_DISPLAY_INFO (f)->grabbed = 0; + FRAME_DISPLAY_INFO (f)->grabbed = 0; UNGCPRO; return Qnil; } @@ -1338,7 +1338,7 @@ no quit occurs and `x-popup-menu' returns nil. */) #endif #ifdef HAVE_NTGUI /* FIXME: Is it really w32-specific? --Stef */ - FRAME_X_DISPLAY_INFO (f)->grabbed = 0; + FRAME_DISPLAY_INFO (f)->grabbed = 0; #endif #endif /* HAVE_MENUS */ diff --git a/src/msdos.c b/src/msdos.c index 7142c3ada77..3a74846f8ea 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -1222,7 +1222,7 @@ IT_cmgoto (struct frame *f) static void IT_update_begin (struct frame *f) { - struct tty_display_info *display_info = FRAME_X_DISPLAY_INFO (f); + struct tty_display_info *display_info = FRAME_DISPLAY_INFO (f); Mouse_HLInfo *hlinfo = &display_info->mouse_highlight; struct frame *mouse_face_frame = hlinfo->mouse_face_mouse_frame; @@ -1279,7 +1279,7 @@ IT_update_begin (struct frame *f) static void IT_update_end (struct frame *f) { - struct tty_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct tty_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); if (dpyinfo->termscript) fprintf (dpyinfo->termscript, "\noutput_data.tty->font) -#define FRAME_X_DISPLAY_INFO(f) (&the_only_display_info) +#define FRAME_DISPLAY_INFO(f) (&the_only_display_info) /* Prototypes. */ diff --git a/src/nsfns.m b/src/nsfns.m index f021e834d59..2d828991ffe 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -124,7 +124,7 @@ Updated by Christian Limpach (chris@nice.ch) struct frame *sf = XFRAME (selected_frame); if (FRAME_NS_P (sf) && FRAME_LIVE_P (sf)) - dpyinfo = FRAME_NS_DISPLAY_INFO (sf); + dpyinfo = FRAME_DISPLAY_INFO (sf); else if (x_display_list != 0) dpyinfo = x_display_list; else @@ -144,7 +144,7 @@ Updated by Christian Limpach (chris@nice.ch) else { struct frame *f = decode_window_system_frame (object); - dpyinfo = FRAME_NS_DISPLAY_INFO (f); + dpyinfo = FRAME_DISPLAY_INFO (f); } return dpyinfo; @@ -992,7 +992,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side if (NILP (Fmemq (frame, Vframe_list))) { #if defined GLYPH_DEBUG && defined ENABLE_CHECKING - struct ns_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); #endif x_free_frame_resources (f); @@ -1139,9 +1139,9 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side if (! STRINGP (f->icon_name)) fset_icon_name (f, Qnil); - FRAME_NS_DISPLAY_INFO (f) = dpyinfo; + FRAME_DISPLAY_INFO (f) = dpyinfo; - /* With FRAME_NS_DISPLAY_INFO set up, this unwind-protect is safe. */ + /* With FRAME_DISPLAY_INFO set up, this unwind-protect is safe. */ record_unwind_protect (unwind_create_frame, frame); f->output_data.ns->window_desc = desc_ctr++; @@ -1152,7 +1152,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side } else { - f->output_data.ns->parent_desc = FRAME_NS_DISPLAY_INFO (f)->root_window; + f->output_data.ns->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; f->output_data.ns->explicit_parent = 0; } @@ -1255,7 +1255,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side f->output_data.ns->hand_cursor = [NSCursor pointingHandCursor]; f->output_data.ns->hourglass_cursor = [NSCursor disappearingItemCursor]; f->output_data.ns->horizontal_drag_cursor = [NSCursor resizeLeftRightCursor]; - FRAME_NS_DISPLAY_INFO (f)->vertical_scroll_bar_cursor + FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor = [NSCursor arrowCursor]; f->output_data.ns->current_pointer = f->output_data.ns->text_cursor; @@ -1346,7 +1346,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side (Lisp_Object frame) { struct frame *f = decode_window_system_frame (frame); - struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (f); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); if (dpyinfo->x_focus_frame != f) { @@ -2221,7 +2221,7 @@ and GNUstep implementations ("distributor-specific release Lisp_Object x_get_focus_frame (struct frame *frame) { - struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (frame); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame); Lisp_Object nsfocus; if (!dpyinfo->x_focus_frame) @@ -2568,7 +2568,7 @@ and GNUstep implementations ("distributor-specific release { /* Absolute coordinates. */ pt.x = XINT (left); - pt.y = x_display_pixel_height (FRAME_NS_DISPLAY_INFO (f)) - XINT (top) + pt.y = x_display_pixel_height (FRAME_DISPLAY_INFO (f)) - XINT (top) - height; } @@ -2578,7 +2578,7 @@ and GNUstep implementations ("distributor-specific release else if (pt.x + XINT (dx) <= 0) *root_x = 0; /* Can happen for negative dx */ else if (pt.x + XINT (dx) + width - <= x_display_pixel_width (FRAME_NS_DISPLAY_INFO (f))) + <= x_display_pixel_width (FRAME_DISPLAY_INFO (f))) /* It fits to the right of the pointer. */ *root_x = pt.x + XINT (dx); else if (width + XINT (dx) <= pt.x) @@ -2594,12 +2594,12 @@ and GNUstep implementations ("distributor-specific release /* It fits below the pointer. */ *root_y = pt.y - height - XINT (dy); else if (pt.y + XINT (dy) + height - <= x_display_pixel_height (FRAME_NS_DISPLAY_INFO (f))) + <= x_display_pixel_height (FRAME_DISPLAY_INFO (f))) /* It fits above the pointer */ *root_y = pt.y + XINT (dy); else /* Put it on the top. */ - *root_y = x_display_pixel_height (FRAME_NS_DISPLAY_INFO (f)) - height; + *root_y = x_display_pixel_height (FRAME_DISPLAY_INFO (f)) - height; } diff --git a/src/nsfont.m b/src/nsfont.m index e1c7d32dde0..b61147d66c4 100644 --- a/src/nsfont.m +++ b/src/nsfont.m @@ -662,7 +662,7 @@ static int nsfont_draw (struct glyph_string *s, int from, int to, int x, int y, static Lisp_Object nsfont_get_cache (struct frame *frame) { - Display_Info *dpyinfo = FRAME_NS_DISPLAY_INFO (frame); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (frame); return (dpyinfo->name_list_element); } @@ -1175,7 +1175,7 @@ is false when (FROM > 0 || TO < S->nchars). */ : FRAME_BACKGROUND_COLOR (s->f)) set]; else { - struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (s->f); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (s->f); [[dpyinfo->bitmaps[face->stipple-1].img stippleMask] set]; } NSRectFill (br); diff --git a/src/nsterm.h b/src/nsterm.h index 4e07d796250..487422b13db 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -678,9 +678,7 @@ struct x_output /* This gives the ns_display_info structure for the display F is on. */ -#define FRAME_NS_DISPLAY_INFO(f) ((f)->output_data.ns->display_info) -/* the primacy of X must be constantly worked with... */ -#define FRAME_X_DISPLAY_INFO(f) ((f)->output_data.ns->display_info) +#define FRAME_DISPLAY_INFO(f) ((f)->output_data.ns->display_info) #define FRAME_X_OUTPUT(f) ((f)->output_data.ns) #define FRAME_NS_WINDOW(f) ((f)->output_data.ns->window_desc) #define FRAME_X_WINDOW(f) ((f)->output_data.ns->window_desc) @@ -689,12 +687,12 @@ struct x_output #define FRAME_NS_DISPLAY(f) (0) #define FRAME_X_DISPLAY(f) (0) #define FRAME_X_SCREEN(f) (0) -#define FRAME_X_VISUAL(f) FRAME_NS_DISPLAY_INFO(f)->visual +#define FRAME_X_VISUAL(f) FRAME_DISPLAY_INFO(f)->visual #define FRAME_FOREGROUND_COLOR(f) ((f)->output_data.ns->foreground_color) #define FRAME_BACKGROUND_COLOR(f) ((f)->output_data.ns->background_color) -#define FRAME_X_IMAGE_CACHE(F) FRAME_NS_DISPLAY_INFO ((F))->image_cache +#define FRAME_X_IMAGE_CACHE(F) FRAME_DISPLAY_INFO ((F))->image_cache #define NS_FACE_FOREGROUND(f) ((f)->foreground) #define NS_FACE_BACKGROUND(f) ((f)->background) @@ -744,14 +742,14 @@ struct x_output #define NS_TOP_POS(f) ((f)->top_pos) #endif -#define FRAME_NS_FONT_TABLE(f) (FRAME_NS_DISPLAY_INFO (f)->font_table) +#define FRAME_NS_FONT_TABLE(f) (FRAME_DISPLAY_INFO (f)->font_table) #define FRAME_FONTSET(f) ((f)->output_data.ns->fontset) #define FRAME_SMALLEST_CHAR_WIDTH(f) \ - (FRAME_NS_DISPLAY_INFO (f)->smallest_char_width) + (FRAME_DISPLAY_INFO (f)->smallest_char_width) #define FRAME_SMALLEST_FONT_HEIGHT(f) \ - (FRAME_NS_DISPLAY_INFO (f)->smallest_font_height) + (FRAME_DISPLAY_INFO (f)->smallest_font_height) #define FRAME_BASELINE_OFFSET(f) ((f)->output_data.ns->baseline_offset) #define BLACK_PIX_DEFAULT(f) 0x000000 #define WHITE_PIX_DEFAULT(f) 0xFFFFFF diff --git a/src/nsterm.m b/src/nsterm.m index 59627a38087..1dac6ba9fe4 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -1007,7 +1007,7 @@ Free a pool and temporary objects it refers to (callable from C) External (hook): called on things like window switching within frame -------------------------------------------------------------------------- */ { - struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (frame); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame); struct frame *old_highlight = dpyinfo->x_highlight_frame; NSTRACE (ns_frame_rehighlight); @@ -1104,7 +1104,7 @@ Free a pool and temporary objects it refers to (callable from C) NSTRACE (x_iconify_frame); check_window_system (f); view = FRAME_NS_VIEW (f); - dpyinfo = FRAME_NS_DISPLAY_INFO (f); + dpyinfo = FRAME_DISPLAY_INFO (f); if (dpyinfo->x_highlight_frame == f) dpyinfo->x_highlight_frame = 0; @@ -1136,7 +1136,7 @@ Free a pool and temporary objects it refers to (callable from C) NSTRACE (x_free_frame_resources); check_window_system (f); view = FRAME_NS_VIEW (f); - dpyinfo = FRAME_NS_DISPLAY_INFO (f); + dpyinfo = FRAME_DISPLAY_INFO (f); hlinfo = MOUSE_HL_INFO (f); [(EmacsView *)view setWindowClosing: YES]; /* may not have been informed */ @@ -1356,7 +1356,7 @@ Free a pool and temporary objects it refers to (callable from C) NSColor * ns_lookup_indexed_color (unsigned long idx, struct frame *f) { - struct ns_color_table *color_table = FRAME_NS_DISPLAY_INFO (f)->color_table; + struct ns_color_table *color_table = FRAME_DISPLAY_INFO (f)->color_table; if (idx < 1 || idx >= color_table->avail) return nil; return color_table->colors[idx]; @@ -1366,7 +1366,7 @@ Free a pool and temporary objects it refers to (callable from C) unsigned long ns_index_color (NSColor *color, struct frame *f) { - struct ns_color_table *color_table = FRAME_NS_DISPLAY_INFO (f)->color_table; + struct ns_color_table *color_table = FRAME_DISPLAY_INFO (f)->color_table; ptrdiff_t idx; ptrdiff_t i; @@ -1416,7 +1416,7 @@ Free a pool and temporary objects it refers to (callable from C) if (!f) return; - color_table = FRAME_NS_DISPLAY_INFO (f)->color_table; + color_table = FRAME_DISPLAY_INFO (f)->color_table; if (idx <= 0 || idx >= color_table->size) { message1 ("ns_free_indexed_color: Color index out of range.\n"); @@ -1651,7 +1651,7 @@ Free a pool and temporary objects it refers to (callable from C) change the entire-frame transparency -------------------------------------------------------------------------- */ { - struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (f); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); double alpha = 1.0; double alpha_min = 1.0; @@ -1786,7 +1786,7 @@ Free a pool and temporary objects it refers to (callable from C) return; } - dpyinfo = FRAME_NS_DISPLAY_INFO (*fp); + dpyinfo = FRAME_DISPLAY_INFO (*fp); block_input (); @@ -2877,7 +2877,7 @@ Function modeled after x_draw_glyph_string_box (). : FRAME_BACKGROUND_COLOR (s->f)) set]; else { - struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (s->f); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (s->f); [[dpyinfo->bitmaps[face->stipple-1].img stippleMask] set]; } @@ -5705,7 +5705,7 @@ - (void)viewDidEndLiveResize - (void)windowDidBecomeKey: (NSNotification *)notification /* cf. x_detect_focus_change(), x_focus_changed(), x_new_focus_frame() */ { - struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (emacsframe); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (emacsframe); struct frame *old_focus = dpyinfo->x_focus_frame; NSTRACE (windowDidBecomeKey); @@ -5726,7 +5726,7 @@ - (void)windowDidBecomeKey: (NSNotification *)notification - (void)windowDidResignKey: (NSNotification *)notification /* cf. x_detect_focus_change(), x_focus_changed(), x_new_focus_frame() */ { - struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (emacsframe); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (emacsframe); BOOL is_focus_frame = dpyinfo->x_focus_frame == emacsframe; NSTRACE (windowDidResignKey); diff --git a/src/w32fns.c b/src/w32fns.c index a8b444e0409..d2defeed529 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -277,7 +277,7 @@ check_x_display_info (Lisp_Object frame) struct frame *sf = XFRAME (selected_frame); if (FRAME_W32_P (sf) && FRAME_LIVE_P (sf)) - return FRAME_W32_DISPLAY_INFO (sf); + return FRAME_DISPLAY_INFO (sf); else return &one_w32_display_info; } @@ -291,7 +291,7 @@ check_x_display_info (Lisp_Object frame) f = XFRAME (frame); if (! FRAME_W32_P (f)) error ("Non-W32 frame used"); - return FRAME_W32_DISPLAY_INFO (f); + return FRAME_DISPLAY_INFO (f); } } @@ -307,7 +307,7 @@ x_window_to_frame (struct w32_display_info *dpyinfo, HWND wdesc) FOR_EACH_FRAME (tail, frame) { f = XFRAME (frame); - if (!FRAME_W32_P (f) || FRAME_W32_DISPLAY_INFO (f) != dpyinfo) + if (!FRAME_W32_P (f) || FRAME_DISPLAY_INFO (f) != dpyinfo) continue; if (FRAME_W32_WINDOW (f) == wdesc) @@ -1027,18 +1027,18 @@ w32_regenerate_palette (struct frame *f) int i; /* don't bother trying to create palette if not supported */ - if (! FRAME_W32_DISPLAY_INFO (f)->has_palette) + if (! FRAME_DISPLAY_INFO (f)->has_palette) return; log_palette = (LOGPALETTE *) alloca (sizeof (LOGPALETTE) + - FRAME_W32_DISPLAY_INFO (f)->num_colors * sizeof (PALETTEENTRY)); + FRAME_DISPLAY_INFO (f)->num_colors * sizeof (PALETTEENTRY)); log_palette->palVersion = 0x300; - log_palette->palNumEntries = FRAME_W32_DISPLAY_INFO (f)->num_colors; + log_palette->palNumEntries = FRAME_DISPLAY_INFO (f)->num_colors; - list = FRAME_W32_DISPLAY_INFO (f)->color_list; + list = FRAME_DISPLAY_INFO (f)->color_list; for (i = 0; - i < FRAME_W32_DISPLAY_INFO (f)->num_colors; + i < FRAME_DISPLAY_INFO (f)->num_colors; i++, list = list->next) log_palette->palPalEntry[i] = list->entry; @@ -1046,9 +1046,9 @@ w32_regenerate_palette (struct frame *f) enter_crit (); - if (FRAME_W32_DISPLAY_INFO (f)->palette) - DeleteObject (FRAME_W32_DISPLAY_INFO (f)->palette); - FRAME_W32_DISPLAY_INFO (f)->palette = new_palette; + if (FRAME_DISPLAY_INFO (f)->palette) + DeleteObject (FRAME_DISPLAY_INFO (f)->palette); + FRAME_DISPLAY_INFO (f)->palette = new_palette; /* Realize display palette and garbage all frames. */ release_frame_dc (f, get_frame_dc (f)); @@ -1071,7 +1071,7 @@ w32_regenerate_palette (struct frame *f) void w32_map_color (struct frame *f, COLORREF color) { - struct w32_palette_entry * list = FRAME_W32_DISPLAY_INFO (f)->color_list; + struct w32_palette_entry * list = FRAME_DISPLAY_INFO (f)->color_list; if (NILP (Vw32_enable_palette)) return; @@ -1091,19 +1091,19 @@ w32_map_color (struct frame *f, COLORREF color) list = xmalloc (sizeof (struct w32_palette_entry)); SET_W32_COLOR (list->entry, color); list->refcount = 1; - list->next = FRAME_W32_DISPLAY_INFO (f)->color_list; - FRAME_W32_DISPLAY_INFO (f)->color_list = list; - FRAME_W32_DISPLAY_INFO (f)->num_colors++; + list->next = FRAME_DISPLAY_INFO (f)->color_list; + FRAME_DISPLAY_INFO (f)->color_list = list; + FRAME_DISPLAY_INFO (f)->num_colors++; /* set flag that palette must be regenerated */ - FRAME_W32_DISPLAY_INFO (f)->regen_palette = TRUE; + FRAME_DISPLAY_INFO (f)->regen_palette = TRUE; } void w32_unmap_color (struct frame *f, COLORREF color) { - struct w32_palette_entry * list = FRAME_W32_DISPLAY_INFO (f)->color_list; - struct w32_palette_entry **prev = &FRAME_W32_DISPLAY_INFO (f)->color_list; + struct w32_palette_entry * list = FRAME_DISPLAY_INFO (f)->color_list; + struct w32_palette_entry **prev = &FRAME_DISPLAY_INFO (f)->color_list; if (NILP (Vw32_enable_palette)) return; @@ -1117,7 +1117,7 @@ w32_unmap_color (struct frame *f, COLORREF color) { *prev = list->next; xfree (list); - FRAME_W32_DISPLAY_INFO (f)->num_colors--; + FRAME_DISPLAY_INFO (f)->num_colors--; break; } else @@ -1128,7 +1128,7 @@ w32_unmap_color (struct frame *f, COLORREF color) } /* set flag that palette must be regenerated */ - FRAME_W32_DISPLAY_INFO (f)->regen_palette = TRUE; + FRAME_DISPLAY_INFO (f)->regen_palette = TRUE; } #endif @@ -1235,7 +1235,7 @@ x_decode_color (struct frame *f, Lisp_Object arg, int def) else if (strcmp (SDATA (arg), "white") == 0) return WHITE_PIX_DEFAULT (f); - if ((FRAME_W32_DISPLAY_INFO (f)->n_planes * FRAME_W32_DISPLAY_INFO (f)->n_cbits) == 1) + if ((FRAME_DISPLAY_INFO (f)->n_planes * FRAME_DISPLAY_INFO (f)->n_cbits) == 1) return def; /* w32_defined_color is responsible for coping with failures @@ -1752,10 +1752,10 @@ x_set_name (struct frame *f, Lisp_Object name, int explicit) { /* Check for no change needed in this very common case before we do any consing. */ - if (!strcmp (FRAME_W32_DISPLAY_INFO (f)->w32_id_name, + if (!strcmp (FRAME_DISPLAY_INFO (f)->w32_id_name, SDATA (f->name))) return; - name = build_string (FRAME_W32_DISPLAY_INFO (f)->w32_id_name); + name = build_string (FRAME_DISPLAY_INFO (f)->w32_id_name); } else CHECK_STRING (name); @@ -4232,7 +4232,7 @@ unwind_create_frame (Lisp_Object frame) if (NILP (Fmemq (frame, Vframe_list))) { #ifdef GLYPH_DEBUG - struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); #endif x_free_frame_resources (f); @@ -4258,7 +4258,7 @@ do_unwind_create_frame (Lisp_Object frame) static void x_default_font_parameter (struct frame *f, Lisp_Object parms) { - struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL, RES_TYPE_STRING); Lisp_Object font; @@ -4392,9 +4392,9 @@ This function is an internal primitive--use `make-frame' instead. */) if (! STRINGP (f->icon_name)) fset_icon_name (f, Qnil); -/* FRAME_W32_DISPLAY_INFO (f) = dpyinfo; */ +/* FRAME_DISPLAY_INFO (f) = dpyinfo; */ - /* With FRAME_X_DISPLAY_INFO set up, this unwind-protect is safe. */ + /* With FRAME_DISPLAY_INFO set up, this unwind-protect is safe. */ record_unwind_protect (do_unwind_create_frame, frame); #ifdef GLYPH_DEBUG image_cache_refcount = @@ -4411,7 +4411,7 @@ This function is an internal primitive--use `make-frame' instead. */) } else { - f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; + f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; f->output_data.w32->explicit_parent = 0; } @@ -4506,7 +4506,7 @@ This function is an internal primitive--use `make-frame' instead. */) "fullscreen", "Fullscreen", RES_TYPE_SYMBOL); f->output_data.w32->dwStyle = WS_OVERLAPPEDWINDOW; - f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; + f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; f->output_data.w32->text_cursor = w32_load_cursor (IDC_IBEAM); f->output_data.w32->nontext_cursor = w32_load_cursor (IDC_ARROW); @@ -4529,7 +4529,7 @@ This function is an internal primitive--use `make-frame' instead. */) /* Now consider the frame official. */ f->terminal->reference_count++; - FRAME_W32_DISPLAY_INFO (f)->reference_count++; + FRAME_DISPLAY_INFO (f)->reference_count++; Vframe_list = Fcons (frame, Vframe_list); /* We need to do this after creating the window, so that the @@ -4613,7 +4613,7 @@ This function is an internal primitive--use `make-frame' instead. */) Lisp_Object x_get_focus_frame (struct frame *frame) { - struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (frame); + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame); Lisp_Object xfocus; if (! dpyinfo->w32_focus_frame) return Qnil; @@ -5131,7 +5131,7 @@ SOUND is nil to use the normal beep. */) int x_screen_planes (register struct frame *f) { - return FRAME_W32_DISPLAY_INFO (f)->n_planes; + return FRAME_DISPLAY_INFO (f)->n_planes; } /* Return the display structure for the display named NAME. @@ -5660,7 +5660,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, dpyinfo_refcount = dpyinfo->reference_count; #endif /* GLYPH_DEBUG */ FRAME_KBOARD (f) = kb; - f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; + f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; f->output_data.w32->explicit_parent = 0; /* Set the name; the functions to which we pass f expect the name to @@ -5729,7 +5729,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, init_frame_faces (f); f->output_data.w32->dwStyle = WS_BORDER | WS_POPUP | WS_DISABLED; - f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; + f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; window_prompting = x_figure_window_size (f, parms, 0); @@ -5796,7 +5796,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, /* Now that the frame is official, it counts as a reference to its display. */ - FRAME_W32_DISPLAY_INFO (f)->reference_count++; + FRAME_DISPLAY_INFO (f)->reference_count++; f->terminal->reference_count++; /* It is now ok to make the frame official even if we get an error @@ -5843,8 +5843,8 @@ compute_tip_xy (struct frame *f, /* Default min and max values. */ min_x = 0; min_y = 0; - max_x = x_display_pixel_width (FRAME_W32_DISPLAY_INFO (f)); - max_y = x_display_pixel_height (FRAME_W32_DISPLAY_INFO (f)); + max_x = x_display_pixel_width (FRAME_DISPLAY_INFO (f)); + max_y = x_display_pixel_height (FRAME_DISPLAY_INFO (f)); block_input (); GetCursorPos (&pt); @@ -6030,7 +6030,7 @@ Text larger than the specified size is clipped. */) /* Create a frame for the tooltip, and record it in the global variable tip_frame. */ - frame = x_create_tip_frame (FRAME_W32_DISPLAY_INFO (f), parms, string); + frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, string); f = XFRAME (frame); /* Set up the frame's root window. */ diff --git a/src/w32font.c b/src/w32font.c index 4a97fd90a4e..845df68f09d 100644 --- a/src/w32font.c +++ b/src/w32font.c @@ -299,7 +299,7 @@ intern_font_name (char * string) Lisp_Object w32font_get_cache (struct frame *f) { - struct w32_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); return (dpyinfo->name_list_element); } diff --git a/src/w32menu.c b/src/w32menu.c index 34020fa61d2..7435a09b627 100644 --- a/src/w32menu.c +++ b/src/w32menu.c @@ -231,7 +231,7 @@ otherwise it is "Question". */) unblock_input (); discard_menu_items (); - FRAME_X_DISPLAY_INFO (f)->grabbed = 0; + FRAME_DISPLAY_INFO (f)->grabbed = 0; if (error_name) error (error_name); return selection; @@ -883,7 +883,7 @@ w32_menu_show (struct frame *f, int x, int y, int for_click, int keymaps, /* Clean up extraneous mouse events which might have been generated during the call. */ discard_mouse_events (); - FRAME_X_DISPLAY_INFO (f)->grabbed = 0; + FRAME_DISPLAY_INFO (f)->grabbed = 0; /* Free the widget_value objects we used to specify the contents. */ free_menubar_widget_value_tree (first_wv); @@ -1123,7 +1123,7 @@ w32_dialog_show (struct frame *f, int keymaps, lw_pop_up_all_widgets (dialog_id); /* Process events that apply to the menu. */ - popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), dialog_id); + popup_get_selection ((XEvent *) 0, FRAME_DISPLAY_INFO (f), dialog_id); lw_destroy_all_widgets (dialog_id); diff --git a/src/w32term.c b/src/w32term.c index d47509e4ece..f86f7d351aa 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -477,7 +477,7 @@ w32_clear_window (struct frame *f) void x_set_frame_alpha (struct frame *f) { - struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); double alpha = 1.0; double alpha_min = 1.0; BYTE opac; @@ -557,7 +557,7 @@ x_display_pixel_width (struct w32_display_info *dpyinfo) static void x_update_begin (struct frame *f) { - struct w32_display_info *display_info = FRAME_W32_DISPLAY_INFO (f); + struct w32_display_info *display_info = FRAME_DISPLAY_INFO (f); if (! FRAME_W32_P (f)) return; @@ -1003,14 +1003,14 @@ x_set_cursor_gc (struct glyph_string *s) xgcv.font = s->font; mask = GCForeground | GCBackground | GCFont; - if (FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc) - XChangeGC (NULL, FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc, + if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc) + XChangeGC (NULL, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc, mask, &xgcv); else - FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc + FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc = XCreateGC (NULL, s->window, mask, &xgcv); - s->gc = FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc; + s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc; } } @@ -1052,14 +1052,14 @@ x_set_mouse_face_gc (struct glyph_string *s) xgcv.font = s->font; mask = GCForeground | GCBackground | GCFont; - if (FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc) - XChangeGC (NULL, FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc, + if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc) + XChangeGC (NULL, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc, mask, &xgcv); else - FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc + FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc = XCreateGC (NULL, s->window, mask, &xgcv); - s->gc = FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc; + s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc; } eassert (s->gc != 0); @@ -1623,7 +1623,7 @@ w32_setup_relief_color (struct frame *f, struct relief *relief, double factor, unsigned long mask = GCForeground; COLORREF pixel; COLORREF background = di->relief_background; - struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); /* TODO: Free colors (if using palette)? */ @@ -2930,7 +2930,7 @@ w32_frame_rehighlight (struct frame *frame) { if (! FRAME_W32_P (frame)) return; - x_frame_rehighlight (FRAME_W32_DISPLAY_INFO (frame)); + x_frame_rehighlight (FRAME_DISPLAY_INFO (frame)); } static void @@ -3429,7 +3429,7 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, /* Now we have a position on the root; find the innermost window containing the pointer. */ { - if (FRAME_W32_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame + if (FRAME_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame && FRAME_LIVE_P (last_mouse_frame)) { /* If mouse was grabbed on a frame, give coords for that frame @@ -3439,7 +3439,7 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, else { /* Is window under mouse one of our frames? */ - f1 = x_any_window_to_frame (FRAME_W32_DISPLAY_INFO (*fp), + f1 = x_any_window_to_frame (FRAME_DISPLAY_INFO (*fp), WindowFromPoint (pt)); } @@ -5539,13 +5539,13 @@ x_calc_absolute_position (struct frame *f) /* Treat negative positions as relative to the rightmost bottommost position that fits on the screen. */ if (flags & XNegative) - f->left_pos = (x_display_pixel_width (FRAME_W32_DISPLAY_INFO (f)) + f->left_pos = (x_display_pixel_width (FRAME_DISPLAY_INFO (f)) - FRAME_PIXEL_WIDTH (f) + f->left_pos - (left_right_borders_width - 1)); if (flags & YNegative) - f->top_pos = (x_display_pixel_height (FRAME_W32_DISPLAY_INFO (f)) + f->top_pos = (x_display_pixel_height (FRAME_DISPLAY_INFO (f)) - FRAME_PIXEL_HEIGHT (f) + f->top_pos - (top_bottom_borders_height - 1)); @@ -6013,8 +6013,8 @@ void x_make_frame_invisible (struct frame *f) { /* Don't keep the highlight on an invisible frame. */ - if (FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame == f) - FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame = 0; + if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f) + FRAME_DISPLAY_INFO (f)->x_highlight_frame = 0; block_input (); @@ -6039,8 +6039,8 @@ x_iconify_frame (struct frame *f) Lisp_Object type; /* Don't keep the highlight on an invisible frame. */ - if (FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame == f) - FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame = 0; + if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f) + FRAME_DISPLAY_INFO (f)->x_highlight_frame = 0; if (FRAME_ICONIFIED_P (f)) return; @@ -6066,7 +6066,7 @@ x_iconify_frame (struct frame *f) void x_free_frame_resources (struct frame *f) { - struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); block_input (); @@ -6116,7 +6116,7 @@ x_free_frame_resources (struct frame *f) void x_destroy_window (struct frame *f) { - struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); x_free_frame_resources (f); dpyinfo->reference_count--; diff --git a/src/w32term.h b/src/w32term.h index b4818f69aee..68c0245acb9 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -379,8 +379,7 @@ extern struct w32_output w32term_display; #define FRAME_BASELINE_OFFSET(f) ((f)->output_data.w32->baseline_offset) /* This gives the w32_display_info structure for the display F is on. */ -#define FRAME_W32_DISPLAY_INFO(f) (&one_w32_display_info) -#define FRAME_X_DISPLAY_INFO(f) (&one_w32_display_info) +#define FRAME_DISPLAY_INFO(f) (&one_w32_display_info) /* This is the `Display *' which frame F is on. */ #define FRAME_X_DISPLAY(f) (0) @@ -388,12 +387,12 @@ extern struct w32_output w32term_display; /* Value is the smallest width of any character in any font on frame F. */ #define FRAME_SMALLEST_CHAR_WIDTH(F) \ - FRAME_W32_DISPLAY_INFO(F)->smallest_char_width + FRAME_DISPLAY_INFO(F)->smallest_char_width /* Value is the smallest height of any font on frame F. */ #define FRAME_SMALLEST_FONT_HEIGHT(F) \ - FRAME_W32_DISPLAY_INFO(F)->smallest_font_height + FRAME_DISPLAY_INFO(F)->smallest_font_height #define FRAME_NORMAL_PLACEMENT(F) ((F)->output_data.w32->normal_placement) #define FRAME_PREV_FSMODE(F) ((F)->output_data.w32->prev_fsmode) diff --git a/src/w32xfns.c b/src/w32xfns.c index 7629e49caf8..07f75477863 100644 --- a/src/w32xfns.c +++ b/src/w32xfns.c @@ -92,7 +92,7 @@ signal_quit (void) void select_palette (struct frame *f, HDC hdc) { - struct w32_display_info *display_info = FRAME_W32_DISPLAY_INFO (f); + struct w32_display_info *display_info = FRAME_DISPLAY_INFO (f); if (!display_info->has_palette) return; diff --git a/src/widget.c b/src/widget.c index ec0b506046b..d6469d7eec5 100644 --- a/src/widget.c +++ b/src/widget.c @@ -525,7 +525,7 @@ setup_frame_gcs (EmacsFrame ew) font = Ffont_xlfd_name (font, Qnil); if (STRINGP (font)) { - XFontStruct *xfont = XLoadQueryFont (FRAME_X_DISPLAY_INFO (s)->display, + XFontStruct *xfont = XLoadQueryFont (FRAME_DISPLAY_INFO (s)->display, SSDATA (font)); if (xfont) { diff --git a/src/xdisp.c b/src/xdisp.c index 58316a0667f..4582002fa0e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -12275,7 +12275,7 @@ note_tool_bar_highlight (struct frame *f, int x, int y) { Lisp_Object window = f->tool_bar_window; struct window *w = XWINDOW (window); - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); int hpos, vpos; struct glyph *glyph; @@ -26005,7 +26005,7 @@ get_window_cursor_type (struct window *w, struct glyph *glyph, int *width, /* Detect a nonselected window or nonselected frame. */ else if (w != XWINDOW (f->selected_window) - || f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame) + || f != FRAME_DISPLAY_INFO (f)->x_highlight_frame) { *active_cursor = 0; @@ -27658,7 +27658,7 @@ define_frame_cursor1 (struct frame *f, Cursor cursor, Lisp_Object pointer) cursor = FRAME_X_OUTPUT (f)->horizontal_drag_cursor; #ifdef HAVE_X_WINDOWS else if (EQ (pointer, intern ("vdrag"))) - cursor = FRAME_X_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; + cursor = FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; #endif else if (EQ (pointer, intern ("hourglass"))) cursor = FRAME_X_OUTPUT (f)->hourglass_cursor; @@ -27821,7 +27821,7 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y, /* Change the mouse pointer according to what is under it. */ if (FRAME_WINDOW_P (f)) { - dpyinfo = FRAME_X_DISPLAY_INFO (f); + dpyinfo = FRAME_DISPLAY_INFO (f); if (STRINGP (string)) { cursor = FRAME_X_OUTPUT (f)->nontext_cursor; @@ -27843,7 +27843,7 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y, } else /* Default mode-line pointer. */ - cursor = FRAME_X_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; + cursor = FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; } #endif } diff --git a/src/xfaces.c b/src/xfaces.c index e8cb7a70322..335018dfee2 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -224,15 +224,11 @@ along with GNU Emacs. If not, see . */ #include TERM_HEADER #include "fontset.h" #ifdef HAVE_NTGUI -#undef FRAME_X_DISPLAY_INFO -#define FRAME_X_DISPLAY_INFO FRAME_W32_DISPLAY_INFO #define x_display_info w32_display_info #define GCGraphicsExposures 0 #endif /* HAVE_NTGUI */ #ifdef HAVE_NS -#undef FRAME_X_DISPLAY_INFO -#define FRAME_X_DISPLAY_INFO FRAME_NS_DISPLAY_INFO #define GCGraphicsExposures 0 #endif /* HAVE_NS */ @@ -546,7 +542,7 @@ DEFUN ("dump-colors", Fdump_colors, Sdump_colors, 0, 0, 0, void x_free_colors (struct frame *f, long unsigned int *pixels, int npixels) { - int class = FRAME_X_DISPLAY_INFO (f)->visual->class; + int class = FRAME_DISPLAY_INFO (f)->visual->class; /* If display has an immutable color map, freeing colors is not necessary and some servers don't allow it. So don't do it. */ @@ -767,7 +763,7 @@ clear_face_cache (int clear_fonts_p) { struct frame *f = XFRAME (frame); if (FRAME_WINDOW_P (f) - && FRAME_X_DISPLAY_INFO (f)->n_fonts > CLEAR_FONT_TABLE_NFONTS) + && FRAME_DISPLAY_INFO (f)->n_fonts > CLEAR_FONT_TABLE_NFONTS) { clear_font_cache (f); free_all_realized_faces (frame); @@ -3400,7 +3396,7 @@ ordinary `x-get-resource' doesn't take a frame argument. */) CHECK_STRING (class); f = decode_live_frame (frame); block_input (); - value = display_x_get_resource (FRAME_X_DISPLAY_INFO (f), + value = display_x_get_resource (FRAME_DISPLAY_INFO (f), resource, class, Qnil, Qnil); unblock_input (); return value; @@ -3490,7 +3486,7 @@ DEFUN ("internal-set-lisp-face-attribute-from-resource", static void x_update_menu_appearance (struct frame *f) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); XrmDatabase rdb; if (dpyinfo diff --git a/src/xfns.c b/src/xfns.c index fa83b6faf1a..df5f0a742d9 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -153,7 +153,7 @@ check_x_display_info (Lisp_Object object) struct frame *sf = XFRAME (selected_frame); if (FRAME_X_P (sf) && FRAME_LIVE_P (sf)) - dpyinfo = FRAME_X_DISPLAY_INFO (sf); + dpyinfo = FRAME_DISPLAY_INFO (sf); else if (x_display_list != 0) dpyinfo = x_display_list; else @@ -173,7 +173,7 @@ check_x_display_info (Lisp_Object object) else { struct frame *f = decode_window_system_frame (object); - dpyinfo = FRAME_X_DISPLAY_INFO (f); + dpyinfo = FRAME_DISPLAY_INFO (f); } return dpyinfo; @@ -193,7 +193,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr) Atom actual_type; unsigned long actual_size, bytes_remaining; int rc, actual_format; - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); long max_len = 400; Display *dpy = FRAME_X_DISPLAY (f); unsigned char *tmp_data = NULL; @@ -256,7 +256,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr) XTranslateCoordinates (FRAME_X_DISPLAY (f), /* From-window, to-window. */ - FRAME_X_DISPLAY_INFO (f)->root_window, + FRAME_DISPLAY_INFO (f)->root_window, FRAME_X_WINDOW (f), /* From-position, to-position. */ @@ -275,7 +275,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr) XTranslateCoordinates (FRAME_X_DISPLAY (f), /* From-window, to-window. */ - FRAME_X_DISPLAY_INFO (f)->root_window, + FRAME_DISPLAY_INFO (f)->root_window, FRAME_OUTER_WINDOW (f), /* From-position, to-position. */ @@ -396,7 +396,7 @@ x_decode_color (struct frame *f, Lisp_Object color_name, int mono_color) #endif /* Return MONO_COLOR for monochrome frames. */ - if (FRAME_X_DISPLAY_INFO (f)->n_planes == 1) + if (FRAME_DISPLAY_INFO (f)->n_planes == 1) return mono_color; /* x_defined_color is responsible for coping with failures @@ -589,7 +589,7 @@ make_invisible_cursor (struct frame *f) Cursor c = 0; x_catch_errors (dpy); - pix = XCreateBitmapFromData (dpy, FRAME_X_DISPLAY_INFO (f)->root_window, + pix = XCreateBitmapFromData (dpy, FRAME_DISPLAY_INFO (f)->root_window, no_data, 1, 1); if (! x_had_errors_p (dpy) && pix != None) { @@ -714,8 +714,8 @@ x_set_mouse_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) XDefineCursor (dpy, FRAME_X_WINDOW (f), f->output_data.x->current_cursor = cursor); - if (FRAME_X_DISPLAY_INFO (f)->invisible_cursor == 0) - FRAME_X_DISPLAY_INFO (f)->invisible_cursor = make_invisible_cursor (f); + if (FRAME_DISPLAY_INFO (f)->invisible_cursor == 0) + FRAME_DISPLAY_INFO (f)->invisible_cursor = make_invisible_cursor (f); if (cursor != x->text_cursor && x->text_cursor != 0) @@ -1308,7 +1308,7 @@ x_set_name_internal (struct frame *f, Lisp_Object name) text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp, &do_free_text_value); text.encoding = (stringp ? XA_STRING - : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); + : FRAME_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); text.format = 8; text.nitems = bytes; if (text.nitems != bytes) @@ -1325,7 +1325,7 @@ x_set_name_internal (struct frame *f, Lisp_Object name) icon.value = x_encode_text (f->icon_name, coding_system, 0, &bytes, &stringp, &do_free_icon_value); icon.encoding = (stringp ? XA_STRING - : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); + : FRAME_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT); icon.format = 8; icon.nitems = bytes; if (icon.nitems != bytes) @@ -1340,8 +1340,8 @@ x_set_name_internal (struct frame *f, Lisp_Object name) #else /* not USE_GTK */ XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text); XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), - FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_name, - FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING, + FRAME_DISPLAY_INFO (f)->Xatom_net_wm_name, + FRAME_DISPLAY_INFO (f)->Xatom_UTF8_STRING, 8, PropModeReplace, SDATA (encoded_name), SBYTES (encoded_name)); @@ -1349,8 +1349,8 @@ x_set_name_internal (struct frame *f, Lisp_Object name) XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &icon); XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), - FRAME_X_DISPLAY_INFO (f)->Xatom_net_wm_icon_name, - FRAME_X_DISPLAY_INFO (f)->Xatom_UTF8_STRING, + FRAME_DISPLAY_INFO (f)->Xatom_net_wm_icon_name, + FRAME_DISPLAY_INFO (f)->Xatom_UTF8_STRING, 8, PropModeReplace, SDATA (encoded_icon_name), SBYTES (encoded_icon_name)); @@ -1397,10 +1397,10 @@ x_set_name (struct frame *f, Lisp_Object name, int explicit) { /* Check for no change needed in this very common case before we do any consing. */ - if (!strcmp (FRAME_X_DISPLAY_INFO (f)->x_id_name, + if (!strcmp (FRAME_DISPLAY_INFO (f)->x_id_name, SSDATA (f->name))) return; - name = build_string (FRAME_X_DISPLAY_INFO (f)->x_id_name); + name = build_string (FRAME_DISPLAY_INFO (f)->x_id_name); } else CHECK_STRING (name); @@ -1496,7 +1496,7 @@ x_default_scroll_bar_color_parameter (struct frame *f, const char *xprop, const char *xclass, int foreground_p) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Lisp_Object tem; tem = x_get_arg (dpyinfo, alist, prop, xprop, xclass, RES_TYPE_STRING); @@ -1562,7 +1562,7 @@ hack_wm_protocols (struct frame *f, Widget widget) unsigned long bytes_after; if ((XGetWindowProperty (dpy, w, - FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, + FRAME_DISPLAY_INFO (f)->Xatom_wm_protocols, (long)0, (long)100, False, XA_ATOM, &type, &format, &nitems, &bytes_after, &catoms) @@ -1574,13 +1574,13 @@ hack_wm_protocols (struct frame *f, Widget widget) { nitems--; if (atoms[nitems] - == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window) + == FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window) need_delete = 0; else if (atoms[nitems] - == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus) + == FRAME_DISPLAY_INFO (f)->Xatom_wm_take_focus) need_focus = 0; else if (atoms[nitems] - == FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself) + == FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself) need_save = 0; } } @@ -1591,13 +1591,13 @@ hack_wm_protocols (struct frame *f, Widget widget) Atom props [10]; int count = 0; if (need_delete) - props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window; + props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window; if (need_focus) - props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_take_focus; + props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_take_focus; if (need_save) - props[count++] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself; + props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself; if (count) - XChangeProperty (dpy, w, FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, + XChangeProperty (dpy, w, FRAME_DISPLAY_INFO (f)->Xatom_wm_protocols, XA_ATOM, 32, PropModeAppend, (unsigned char *) props, count); } @@ -1792,7 +1792,7 @@ xic_create_xfontset (struct frame *f) struct frame *cf = XFRAME (frame); if (cf != f && FRAME_LIVE_P (f) && FRAME_X_P (cf) - && FRAME_X_DISPLAY_INFO (cf) == FRAME_X_DISPLAY_INFO (f) + && FRAME_DISPLAY_INFO (cf) == FRAME_DISPLAY_INFO (f) && FRAME_FONT (f) && FRAME_FONT (f)->pixel_size == pixel_size) { @@ -1891,7 +1891,7 @@ xic_free_xfontset (struct frame *f) { struct frame *cf = XFRAME (frame); if (cf != f && FRAME_LIVE_P (f) && FRAME_X_P (cf) - && FRAME_X_DISPLAY_INFO (cf) == FRAME_X_DISPLAY_INFO (f) + && FRAME_DISPLAY_INFO (cf) == FRAME_DISPLAY_INFO (f) && FRAME_XIC_FONTSET (cf) == FRAME_XIC_FONTSET (f)) { shared_p = 1; @@ -2136,7 +2136,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) XtSetArg (al[ac], XtNmappedWhenManaged, 0); ac++; XtSetArg (al[ac], XtNborderWidth, f->border_width); ac++; XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; - XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; + XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++; XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++; shell_widget = XtAppCreateShell (f->namebuf, EMACS_CLASS, applicationShellWidgetClass, @@ -2151,7 +2151,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) ac = 0; XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; - XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; + XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++; XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++; XtSetArg (al[ac], XtNborderWidth, 0); ac++; XtSetValues (pane_widget, al, ac); @@ -2167,7 +2167,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++; XtSetArg (al[ac], XtNemacsFrame, f); ac++; XtSetArg (al[ac], XtNvisual, FRAME_X_VISUAL (f)); ac++; - XtSetArg (al[ac], XtNdepth, FRAME_X_DISPLAY_INFO (f)->n_planes); ac++; + XtSetArg (al[ac], XtNdepth, FRAME_DISPLAY_INFO (f)->n_planes); ac++; XtSetArg (al[ac], XtNcolormap, FRAME_X_COLORMAP (f)); ac++; XtSetArg (al[ac], XtNborderWidth, 0); ac++; frame_widget = XtCreateWidget (f->namebuf, emacsFrameClass, pane_widget, @@ -2293,7 +2293,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) be initialized to something relevant to the time we created the window. */ XChangeProperty (XtDisplay (frame_widget), XtWindow (frame_widget), - FRAME_X_DISPLAY_INFO (f)->Xatom_wm_protocols, + FRAME_DISPLAY_INFO (f)->Xatom_wm_protocols, XA_ATOM, 32, PropModeAppend, NULL, 0); /* Make all the standard events reach the Emacs frame. */ @@ -2453,8 +2453,8 @@ x_window (struct frame *f) /* Request "save yourself" and "delete window" commands from wm. */ { Atom protocols[2]; - protocols[0] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_delete_window; - protocols[1] = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_save_yourself; + protocols[0] = FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window; + protocols[1] = FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself; XSetWMProtocols (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), protocols, 2); } @@ -2514,7 +2514,7 @@ x_icon (struct frame *f, Lisp_Object parms) { Lisp_Object icon_x, icon_y; #if 0 - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); #endif /* Set the position of the icon. Note that twm groups all @@ -2598,7 +2598,7 @@ x_make_gc (struct frame *f) this must be done on a per-frame basis. */ f->output_data.x->border_tile = (XCreatePixmapFromBitmapData - (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window, + (FRAME_X_DISPLAY (f), FRAME_DISPLAY_INFO (f)->root_window, gray_bits, gray_width, gray_height, FRAME_FOREGROUND_PIXEL (f), FRAME_BACKGROUND_PIXEL (f), @@ -2664,7 +2664,7 @@ unwind_create_frame (Lisp_Object frame) if (NILP (Fmemq (frame, Vframe_list))) { #if defined GLYPH_DEBUG && defined ENABLE_CHECKING - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); #endif x_free_frame_resources (f); @@ -2696,7 +2696,7 @@ unwind_create_frame_1 (Lisp_Object val) static void x_default_font_parameter (struct frame *f, Lisp_Object parms) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Lisp_Object font_param = x_get_arg (dpyinfo, parms, Qfont, NULL, NULL, RES_TYPE_STRING); Lisp_Object font = Qnil; @@ -2890,9 +2890,9 @@ This function is an internal primitive--use `make-frame' instead. */) if (! STRINGP (f->icon_name)) fset_icon_name (f, Qnil); - FRAME_X_DISPLAY_INFO (f) = dpyinfo; + FRAME_DISPLAY_INFO (f) = dpyinfo; - /* With FRAME_X_DISPLAY_INFO set up, this unwind-protect is safe. */ + /* With FRAME_DISPLAY_INFO set up, this unwind-protect is safe. */ record_unwind_protect (do_unwind_create_frame, frame); /* These colors will be set anyway later, but it's important @@ -2937,7 +2937,7 @@ This function is an internal primitive--use `make-frame' instead. */) } else { - f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; + f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; f->output_data.x->explicit_parent = 0; } @@ -3108,7 +3108,7 @@ This function is an internal primitive--use `make-frame' instead. */) /* Now consider the frame official. */ f->terminal->reference_count++; - FRAME_X_DISPLAY_INFO (f)->reference_count++; + FRAME_DISPLAY_INFO (f)->reference_count++; Vframe_list = Fcons (frame, Vframe_list); /* We need to do this after creating the X window, so that the @@ -3233,7 +3233,7 @@ This function is an internal primitive--use `make-frame' instead. */) Lisp_Object x_get_focus_frame (struct frame *frame) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (frame); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame); Lisp_Object xfocus; if (! dpyinfo->x_focus_frame) return Qnil; @@ -3761,7 +3761,7 @@ x_make_monitor_attribute_list (struct MonitorInfo *monitors, { struct frame *f = XFRAME (frame); - if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo + if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo && !EQ (frame, tip_frame)) { int i = x_get_monitor_for_frame (f, monitors, n_monitors); @@ -4041,7 +4041,7 @@ Internal use only, use `display-monitor-attributes-list' instead. */) { struct frame *f = XFRAME (frame); - if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo + if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo && !EQ (frame, tip_frame)) { GdkWindow *gwin = gtk_widget_get_window (FRAME_GTK_WIDGET (f)); @@ -4542,7 +4542,7 @@ no value of TYPE (always string in the MS Windows case). */) { CONS_TO_INTEGER (source, Window, target_window); if (! target_window) - target_window = FRAME_X_DISPLAY_INFO (f)->root_window; + target_window = FRAME_DISPLAY_INFO (f)->root_window; } block_input (); @@ -4838,8 +4838,8 @@ x_create_tip_frame (struct x_display_info *dpyinfo, f->output_data.x->scroll_bar_bottom_shadow_pixel = -1; #endif /* USE_TOOLKIT_SCROLL_BARS */ fset_icon_name (f, Qnil); - FRAME_X_DISPLAY_INFO (f) = dpyinfo; - f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; + FRAME_DISPLAY_INFO (f) = dpyinfo; + f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; f->output_data.x->explicit_parent = 0; /* These colors will be set anyway later, but it's important @@ -4953,14 +4953,14 @@ x_create_tip_frame (struct x_display_info *dpyinfo, happen. */ init_frame_faces (f); - f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window; + f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; x_figure_window_size (f, parms, 0); { XSetWindowAttributes attrs; unsigned long mask; - Atom type = FRAME_X_DISPLAY_INFO (f)->Xatom_net_window_type_tooltip; + Atom type = FRAME_DISPLAY_INFO (f)->Xatom_net_window_type_tooltip; block_input (); mask = CWBackPixel | CWOverrideRedirect | CWEventMask; @@ -4978,7 +4978,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo, tip_window = FRAME_X_WINDOW (f) = XCreateWindow (FRAME_X_DISPLAY (f), - FRAME_X_DISPLAY_INFO (f)->root_window, + FRAME_DISPLAY_INFO (f)->root_window, /* x, y, width, height */ 0, 0, 1, 1, /* Border. */ @@ -4986,7 +4986,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo, CopyFromParent, InputOutput, CopyFromParent, mask, &attrs); XChangeProperty (FRAME_X_DISPLAY (f), tip_window, - FRAME_X_DISPLAY_INFO (f)->Xatom_net_window_type, + FRAME_DISPLAY_INFO (f)->Xatom_net_window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *)&type, 1); unblock_input (); @@ -5021,10 +5021,10 @@ x_create_tip_frame (struct x_display_info *dpyinfo, { Lisp_Object disptype; - if (FRAME_X_DISPLAY_INFO (f)->n_planes == 1) + if (FRAME_DISPLAY_INFO (f)->n_planes == 1) disptype = intern ("mono"); - else if (FRAME_X_DISPLAY_INFO (f)->visual->class == GrayScale - || FRAME_X_DISPLAY_INFO (f)->visual->class == StaticGray) + else if (FRAME_DISPLAY_INFO (f)->visual->class == GrayScale + || FRAME_DISPLAY_INFO (f)->visual->class == StaticGray) disptype = intern ("grayscale"); else disptype = intern ("color"); @@ -5058,7 +5058,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo, /* Now that the frame will be official, it counts as a reference to its display and terminal. */ - FRAME_X_DISPLAY_INFO (f)->reference_count++; + FRAME_DISPLAY_INFO (f)->reference_count++; f->terminal->reference_count++; /* It is now ok to make the frame official even if we get an error @@ -5102,7 +5102,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object if (!INTEGERP (left) || !INTEGERP (top)) { block_input (); - XQueryPointer (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window, + XQueryPointer (FRAME_X_DISPLAY (f), FRAME_DISPLAY_INFO (f)->root_window, &root, &child, root_x, root_y, &win_x, &win_y, &pmask); unblock_input (); } @@ -5112,7 +5112,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object else if (*root_y + XINT (dy) <= 0) *root_y = 0; /* Can happen for negative dy */ else if (*root_y + XINT (dy) + height - <= x_display_pixel_height (FRAME_X_DISPLAY_INFO (f))) + <= x_display_pixel_height (FRAME_DISPLAY_INFO (f))) /* It fits below the pointer */ *root_y += XINT (dy); else if (height + XINT (dy) <= *root_y) @@ -5127,7 +5127,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object else if (*root_x + XINT (dx) <= 0) *root_x = 0; /* Can happen for negative dx */ else if (*root_x + XINT (dx) + width - <= x_display_pixel_width (FRAME_X_DISPLAY_INFO (f))) + <= x_display_pixel_width (FRAME_DISPLAY_INFO (f))) /* It fits to the right of the pointer. */ *root_x += XINT (dx); else if (width + XINT (dx) <= *root_x) @@ -5276,7 +5276,7 @@ Text larger than the specified size is clipped. */) /* Create a frame for the tooltip, and record it in the global variable tip_frame. */ - frame = x_create_tip_frame (FRAME_X_DISPLAY_INFO (f), parms, string); + frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, string); f = XFRAME (frame); /* Set up the frame's root window. */ @@ -5476,7 +5476,7 @@ Value is t if tooltip was open, nil otherwise. */) struct frame *f = SELECTED_FRAME (); w = f->output_data.x->menubar_widget; - if (!DoesSaveUnders (FRAME_X_DISPLAY_INFO (f)->screen) + if (!DoesSaveUnders (FRAME_DISPLAY_INFO (f)->screen) && w != NULL) { block_input (); diff --git a/src/xfont.c b/src/xfont.c index 1aface6f972..6a675482ed9 100644 --- a/src/xfont.c +++ b/src/xfont.c @@ -154,7 +154,7 @@ struct font_driver xfont_driver = static Lisp_Object xfont_get_cache (struct frame *f) { - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); return (dpyinfo->name_list_element); } @@ -488,7 +488,7 @@ xfont_list_pattern (Display *display, const char *pattern, static Lisp_Object xfont_list (struct frame *f, Lisp_Object spec) { - Display *display = FRAME_X_DISPLAY_INFO (f)->display; + Display *display = FRAME_DISPLAY_INFO (f)->display; Lisp_Object registry, list, val, extra, script; int len; /* Large enough to contain the longest XLFD (255 bytes) in UTF-8. */ @@ -566,7 +566,7 @@ xfont_list (struct frame *f, Lisp_Object spec) static Lisp_Object xfont_match (struct frame *f, Lisp_Object spec) { - Display *display = FRAME_X_DISPLAY_INFO (f)->display; + Display *display = FRAME_DISPLAY_INFO (f)->display; Lisp_Object extra, val, entity; char name[512]; XFontStruct *xfont; @@ -620,7 +620,7 @@ xfont_match (struct frame *f, Lisp_Object spec) static Lisp_Object xfont_list_family (struct frame *f) { - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); char **names; int num_fonts, i; Lisp_Object list; @@ -676,7 +676,7 @@ xfont_list_family (struct frame *f) static Lisp_Object xfont_open (struct frame *f, Lisp_Object entity, int pixel_size) { - Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); Display *display = dpyinfo->display; char name[512]; int len; diff --git a/src/xmenu.c b/src/xmenu.c index 823c63bfc6f..1535b00a47f 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -498,7 +498,7 @@ If FRAME is nil or not given, use the selected frame. */) memset (&ev, 0, sizeof ev); ev.xbutton.display = FRAME_X_DISPLAY (f); ev.xbutton.window = XtWindow (menubar); - ev.xbutton.root = FRAME_X_DISPLAY_INFO (f)->root_window; + ev.xbutton.root = FRAME_DISPLAY_INFO (f)->root_window; ev.xbutton.time = XtLastTimestampProcessed (FRAME_X_DISPLAY (f)); ev.xbutton.button = Button1; ev.xbutton.x = ev.xbutton.y = FRAME_MENUBAR_HEIGHT (f) / 2; @@ -1367,7 +1367,7 @@ menu_position_func (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer { struct next_popup_x_y *data = user_data; GtkRequisition req; - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (data->f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (data->f); int disp_width = x_display_pixel_width (dpyinfo); int disp_height = x_display_pixel_height (dpyinfo); @@ -1449,7 +1449,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv, int x, int if (for_click) { for (i = 0; i < 5; i++) - if (FRAME_X_DISPLAY_INFO (f)->grabbed & (1 << i)) + if (FRAME_DISPLAY_INFO (f)->grabbed & (1 << i)) break; } @@ -1474,7 +1474,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv, int x, int /* Must reset this manually because the button release event is not passed to Emacs event loop. */ - FRAME_X_DISPLAY_INFO (f)->grabbed = 0; + FRAME_DISPLAY_INFO (f)->grabbed = 0; } #else /* not USE_GTK */ @@ -1543,7 +1543,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv, event->send_event = 0; event->display = FRAME_X_DISPLAY (f); event->time = CurrentTime; - event->root = FRAME_X_DISPLAY_INFO (f)->root_window; + event->root = FRAME_DISPLAY_INFO (f)->root_window; event->window = event->subwindow = event->root; event->x = x; event->y = y; @@ -1558,7 +1558,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv, event->state = 0; event->button = 0; for (i = 0; i < 5; i++) - if (FRAME_X_DISPLAY_INFO (f)->grabbed & (1 << i)) + if (FRAME_DISPLAY_INFO (f)->grabbed & (1 << i)) event->button = i; /* Don't allow any geometry request from the user. */ @@ -1578,7 +1578,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv, make_number (menu_id & ~(-1 << (fact))))); /* Process events that apply to the menu. */ - popup_get_selection (0, FRAME_X_DISPLAY_INFO (f), menu_id, 1); + popup_get_selection (0, FRAME_DISPLAY_INFO (f), menu_id, 1); unbind_to (specpdl_count, Qnil); } @@ -1962,7 +1962,7 @@ create_and_show_dialog (struct frame *f, widget_value *first_wv) Fcons (make_number (dialog_id >> (fact)), make_number (dialog_id & ~(-1 << (fact))))); - popup_get_selection (0, FRAME_X_DISPLAY_INFO (f), dialog_id, 1); + popup_get_selection (0, FRAME_DISPLAY_INFO (f), dialog_id, 1); unbind_to (count, Qnil); } @@ -2218,13 +2218,13 @@ pop_down_menu (Lisp_Object arg) #ifdef HAVE_X_WINDOWS /* Assume the mouse has moved out of the X window. If it has actually moved in, we will get an EnterNotify. */ - x_mouse_leave (FRAME_X_DISPLAY_INFO (f)); + x_mouse_leave (FRAME_DISPLAY_INFO (f)); /* State that no mouse buttons are now held. (The oldXMenu code doesn't track this info for us.) That is not necessarily true, but the fiction leads to reasonable results, and it is a pain to ask which are actually held now. */ - FRAME_X_DISPLAY_INFO (f)->grabbed = 0; + FRAME_DISPLAY_INFO (f)->grabbed = 0; #endif /* HAVE_X_WINDOWS */ diff --git a/src/xselect.c b/src/xselect.c index e5f2e214fba..238eea50df6 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -318,7 +318,7 @@ x_own_selection (Lisp_Object selection_name, Lisp_Object selection_value, { struct frame *f = XFRAME (frame); Window selecting_window = FRAME_X_WINDOW (f); - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Display *display = dpyinfo->display; Time timestamp = last_event_timestamp; Atom selection_atom = symbol_to_x_atom (dpyinfo, selection_name); @@ -997,7 +997,7 @@ x_clear_frame_selections (struct frame *f) { Lisp_Object frame; Lisp_Object rest; - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); struct terminal *t = dpyinfo->terminal; XSETFRAME (frame, f); @@ -1185,7 +1185,7 @@ x_get_foreign_selection (Lisp_Object selection_symbol, Lisp_Object target_type, Lisp_Object time_stamp, Lisp_Object frame) { struct frame *f = XFRAME (frame); - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Display *display = dpyinfo->display; Window requestor_window = FRAME_X_WINDOW (f); Time requestor_time = last_event_timestamp; @@ -2009,7 +2009,7 @@ On Nextstep, TIME-STAMP and TERMINAL are unused. */) error ("X selection unavailable for this frame"); val = x_get_local_selection (selection_symbol, target_type, 1, - FRAME_X_DISPLAY_INFO (f)); + FRAME_DISPLAY_INFO (f)); if (NILP (val) && FRAME_LIVE_P (f)) { @@ -2056,7 +2056,7 @@ On MS-DOS, all this does is return non-nil if we own the selection. */) if (!f) return Qnil; - dpyinfo = FRAME_X_DISPLAY_INFO (f); + dpyinfo = FRAME_DISPLAY_INFO (f); CHECK_SYMBOL (selection); /* Don't disown the selection when we're not the owner. */ @@ -2108,7 +2108,7 @@ On Nextstep, TERMINAL is unused. */) if (EQ (selection, Qnil)) selection = QPRIMARY; if (EQ (selection, Qt)) selection = QSECONDARY; - if (f && !NILP (LOCAL_SELECTION (selection, FRAME_X_DISPLAY_INFO (f)))) + if (f && !NILP (LOCAL_SELECTION (selection, FRAME_DISPLAY_INFO (f)))) return Qt; else return Qnil; @@ -2141,7 +2141,7 @@ On Nextstep, TERMINAL is unused. */) if (!f) return Qnil; - dpyinfo = FRAME_X_DISPLAY_INFO (f); + dpyinfo = FRAME_DISPLAY_INFO (f); if (!NILP (LOCAL_SELECTION (selection, dpyinfo))) return Qt; @@ -2162,7 +2162,7 @@ static Lisp_Object x_clipboard_manager_save (Lisp_Object frame) { struct frame *f = XFRAME (frame); - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Atom data = dpyinfo->Xatom_UTF8_STRING; XChangeProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), @@ -2212,7 +2212,7 @@ x_clipboard_manager_save_frame (Lisp_Object frame) && (f = XFRAME (frame), FRAME_X_P (f)) && FRAME_LIVE_P (f)) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Lisp_Object local_selection = LOCAL_SELECTION (QCLIPBOARD, dpyinfo); @@ -2458,7 +2458,7 @@ FRAME is on. If FRAME is nil, the selected frame is used. */) Atom x_atom; struct frame *f = decode_window_system_frame (frame); ptrdiff_t i; - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); if (SYMBOLP (atom)) diff --git a/src/xterm.c b/src/xterm.c index ef800461185..60c2ecd1448 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -412,7 +412,7 @@ x_find_topmost_parent (struct frame *f) Window win = None, wi = x->parent_desc; Display *dpy = FRAME_X_DISPLAY (f); - while (wi != FRAME_X_DISPLAY_INFO (f)->root_window) + while (wi != FRAME_DISPLAY_INFO (f)->root_window) { Window root; Window *children; @@ -431,7 +431,7 @@ x_find_topmost_parent (struct frame *f) void x_set_frame_alpha (struct frame *f) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Display *dpy = FRAME_X_DISPLAY (f); Window win = FRAME_OUTER_WINDOW (f); double alpha = 1.0; @@ -788,7 +788,7 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row *row, struct draw_fring if (p->overlay_p) { clipmask = XCreatePixmapFromBitmapData (display, - FRAME_X_DISPLAY_INFO (f)->root_window, + FRAME_DISPLAY_INFO (f)->root_window, bits, p->wd, p->h, 1, 0, 1); gcv.clip_mask = clipmask; @@ -892,14 +892,14 @@ x_set_cursor_gc (struct glyph_string *s) xgcv.graphics_exposures = False; mask = GCForeground | GCBackground | GCGraphicsExposures; - if (FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc) - XChangeGC (s->display, FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc, + if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc) + XChangeGC (s->display, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc, mask, &xgcv); else - FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc + FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc = XCreateGC (s->display, s->window, mask, &xgcv); - s->gc = FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc; + s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc; } } @@ -939,14 +939,14 @@ x_set_mouse_face_gc (struct glyph_string *s) xgcv.graphics_exposures = False; mask = GCForeground | GCBackground | GCGraphicsExposures; - if (FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc) - XChangeGC (s->display, FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc, + if (FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc) + XChangeGC (s->display, FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc, mask, &xgcv); else - FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc + FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc = XCreateGC (s->display, s->window, mask, &xgcv); - s->gc = FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc; + s->gc = FRAME_DISPLAY_INFO (s->f)->scratch_cursor_gc; } eassert (s->gc != 0); @@ -1382,7 +1382,7 @@ x_frame_of_widget (Widget widget) f = XFRAME (frame); if (FRAME_X_P (f) && f->output_data.nothing != 1 - && FRAME_X_DISPLAY_INFO (f) == dpyinfo + && FRAME_DISPLAY_INFO (f) == dpyinfo && f->output_data.x->widget == widget) return f; } @@ -1591,7 +1591,7 @@ x_color_cells (Display *dpy, int *ncells) void x_query_colors (struct frame *f, XColor *colors, int ncolors) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); if (dpyinfo->color_cells) { @@ -1831,7 +1831,7 @@ x_setup_relief_color (struct frame *f, struct relief *relief, double factor, int unsigned long pixel; unsigned long background = di->relief_background; Colormap cmap = FRAME_X_COLORMAP (f); - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Display *dpy = FRAME_X_DISPLAY (f); xgcv.graphics_exposures = False; @@ -3132,9 +3132,9 @@ XTtoggle_invisible_pointer (struct frame *f, int invisible) block_input (); if (invisible) { - if (FRAME_X_DISPLAY_INFO (f)->invisible_cursor != 0) + if (FRAME_DISPLAY_INFO (f)->invisible_cursor != 0) XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), - FRAME_X_DISPLAY_INFO (f)->invisible_cursor); + FRAME_DISPLAY_INFO (f)->invisible_cursor); } else XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), @@ -3404,7 +3404,7 @@ x_window_to_frame (struct x_display_info *dpyinfo, int wdesc) FOR_EACH_FRAME (tail, frame) { f = XFRAME (frame); - if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) + if (!FRAME_X_P (f) || FRAME_DISPLAY_INFO (f) != dpyinfo) continue; if (f->output_data.x->hourglass_window == wdesc) return f; @@ -3454,7 +3454,7 @@ x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc) if (found) break; f = XFRAME (frame); - if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo) + if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo) { /* This frame matches if the window is any of its widgets. */ x = f->output_data.x; @@ -3502,7 +3502,7 @@ x_menubar_window_to_frame (struct x_display_info *dpyinfo, XEvent *event) FOR_EACH_FRAME (tail, frame) { f = XFRAME (frame); - if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) + if (!FRAME_X_P (f) || FRAME_DISPLAY_INFO (f) != dpyinfo) continue; x = f->output_data.x; #ifdef USE_GTK @@ -3534,7 +3534,7 @@ x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc) FOR_EACH_FRAME (tail, frame) { f = XFRAME (frame); - if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) + if (!FRAME_X_P (f) || FRAME_DISPLAY_INFO (f) != dpyinfo) continue; x = f->output_data.x; @@ -3637,7 +3637,7 @@ x_mouse_leave (struct x_display_info *dpyinfo) static void XTframe_rehighlight (struct frame *frame) { - x_frame_rehighlight (FRAME_X_DISPLAY_INFO (frame)); + x_frame_rehighlight (FRAME_DISPLAY_INFO (frame)); } static void @@ -3870,7 +3870,7 @@ construct_mouse_click (struct input_event *result, XButtonEvent *event, struct f result->kind = MOUSE_CLICK_EVENT; result->code = event->button - Button1; result->timestamp = event->time; - result->modifiers = (x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), + result->modifiers = (x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), event->state) | (event->type == ButtonRelease ? up_modifier @@ -4035,7 +4035,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, x_catch_errors (FRAME_X_DISPLAY (*fp)); - if (FRAME_X_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame + if (FRAME_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame && FRAME_LIVE_P (last_mouse_frame)) { /* If mouse was grabbed on a frame, give coords for that frame @@ -4074,7 +4074,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, want the edit window. For non-Gtk+ the innermost window is the edit window. For Gtk+ it might not be. It might be the tool bar for example. */ - if (x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win)) + if (x_window_to_frame (FRAME_DISPLAY_INFO (*fp), win)) break; #endif win = child; @@ -4096,10 +4096,10 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, #ifdef USE_GTK /* We don't wan't to know the innermost window. We want the edit window. */ - f1 = x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win); + f1 = x_window_to_frame (FRAME_DISPLAY_INFO (*fp), win); #else /* Is win one of our frames? */ - f1 = x_any_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win); + f1 = x_any_window_to_frame (FRAME_DISPLAY_INFO (*fp), win); #endif #ifdef USE_X_TOOLKIT @@ -4341,7 +4341,7 @@ x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole) /* Construct a ClientMessage event to send to the frame. */ ev->type = ClientMessage; - ev->message_type = FRAME_X_DISPLAY_INFO (f)->Xatom_Scrollbar; + ev->message_type = FRAME_DISPLAY_INFO (f)->Xatom_Scrollbar; ev->display = FRAME_X_DISPLAY (f); ev->window = FRAME_X_WINDOW (f); ev->format = 32; @@ -4522,8 +4522,8 @@ xg_scroll_callback (GtkRange *range, { case GTK_SCROLL_JUMP: /* Buttons 1 2 or 3 must be grabbed. */ - if (FRAME_X_DISPLAY_INFO (f)->grabbed != 0 - && FRAME_X_DISPLAY_INFO (f)->grabbed < (1 << 4)) + if (FRAME_DISPLAY_INFO (f)->grabbed != 0 + && FRAME_DISPLAY_INFO (f)->grabbed < (1 << 4)) { part = scroll_bar_handle; whole = gtk_adjustment_get_upper (adj) - @@ -5042,7 +5042,7 @@ x_scroll_bar_create (struct window *w, int top, int left, int width, int height) a.event_mask = (ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | PointerMotionHintMask | ExposureMask); - a.cursor = FRAME_X_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; + a.cursor = FRAME_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; mask = (CWBackPixel | CWEventMask | CWCursor); @@ -5615,7 +5615,7 @@ x_scroll_bar_handle_click (struct scroll_bar *bar, XEvent *event, struct input_e emacs_event->kind = SCROLL_BAR_CLICK_EVENT; emacs_event->code = event->xbutton.button - Button1; emacs_event->modifiers - = (x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO + = (x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (XFRAME (WINDOW_FRAME (XWINDOW (bar->window)))), event->xbutton.state) | (event->type == ButtonRelease @@ -6227,8 +6227,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, f->top_pos = y; /* Perhaps reparented due to a WM restart. Reset this. */ - FRAME_X_DISPLAY_INFO (f)->wm_type = X_WMTYPE_UNKNOWN; - FRAME_X_DISPLAY_INFO (f)->net_supported_window = 0; + FRAME_DISPLAY_INFO (f)->wm_type = X_WMTYPE_UNKNOWN; + FRAME_DISPLAY_INFO (f)->net_supported_window = 0; x_set_frame_alpha (f); } @@ -6462,7 +6462,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #endif event.xkey.state - |= x_emacs_to_x_modifiers (FRAME_X_DISPLAY_INFO (f), + |= x_emacs_to_x_modifiers (FRAME_DISPLAY_INFO (f), extra_keyboard_modifiers); modifiers = event.xkey.state; @@ -6536,7 +6536,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, /* Common for all keysym input events. */ XSETFRAME (inev.ie.frame_or_window, f); inev.ie.modifiers - = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), modifiers); + = x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), modifiers); inev.ie.timestamp = event.xkey.time; /* First deal with keysyms which have defined @@ -7312,7 +7312,7 @@ static void x_draw_hollow_cursor (struct window *w, struct glyph_row *row) { struct frame *f = XFRAME (WINDOW_FRAME (w)); - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Display *dpy = FRAME_X_DISPLAY (f); int x, y, wd, h; XGCValues xgcv; @@ -7379,7 +7379,7 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text { Display *dpy = FRAME_X_DISPLAY (f); Window window = FRAME_X_WINDOW (f); - GC gc = FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc; + GC gc = FRAME_DISPLAY_INFO (f)->scratch_cursor_gc; unsigned long mask = GCForeground | GCBackground | GCGraphicsExposures; struct face *face = FACE_FROM_ID (f, cursor_glyph->face_id); XGCValues xgcv; @@ -7400,7 +7400,7 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text else { gc = XCreateGC (dpy, window, mask, &xgcv); - FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc = gc; + FRAME_DISPLAY_INFO (f)->scratch_cursor_gc = gc; } x_clip_to_row (w, row, TEXT_AREA, gc); @@ -7567,7 +7567,7 @@ x_bitmap_icon (struct frame *f, Lisp_Object file) else { /* Create the GNU bitmap and mask if necessary. */ - if (FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id < 0) + if (FRAME_DISPLAY_INFO (f)->icon_bitmap_id < 0) { ptrdiff_t rc = -1; @@ -7581,7 +7581,7 @@ x_bitmap_icon (struct frame *f, Lisp_Object file) rc = x_create_bitmap_from_xpm_data (f, gnu_xpm_bits); if (rc != -1) - FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id = rc; + FRAME_DISPLAY_INFO (f)->icon_bitmap_id = rc; #endif @@ -7593,8 +7593,8 @@ x_bitmap_icon (struct frame *f, Lisp_Object file) if (rc == -1) return 1; - FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id = rc; - x_create_bitmap_mask (f, FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id); + FRAME_DISPLAY_INFO (f)->icon_bitmap_id = rc; + x_create_bitmap_mask (f, FRAME_DISPLAY_INFO (f)->icon_bitmap_id); } } @@ -7602,9 +7602,9 @@ x_bitmap_icon (struct frame *f, Lisp_Object file) this increments the ref-count one extra time. As a result, the GNU bitmap and mask are never freed. That way, we don't have to worry about allocating it again. */ - x_reference_bitmap (f, FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id); + x_reference_bitmap (f, FRAME_DISPLAY_INFO (f)->icon_bitmap_id); - bitmap_id = FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id; + bitmap_id = FRAME_DISPLAY_INFO (f)->icon_bitmap_id; } x_wm_set_icon_pixmap (f, bitmap_id); @@ -7818,7 +7818,7 @@ x_connection_closed (Display *dpy, const char *error_message) if (FRAME_X_P (XFRAME (frame)) && FRAME_X_P (XFRAME (minibuf_frame)) && ! EQ (frame, minibuf_frame) - && FRAME_X_DISPLAY_INFO (XFRAME (minibuf_frame)) == dpyinfo) + && FRAME_DISPLAY_INFO (XFRAME (minibuf_frame)) == dpyinfo) delete_frame (frame, Qnoelisp); } @@ -7827,7 +7827,7 @@ x_connection_closed (Display *dpy, const char *error_message) for another frame that we need to delete. */ FOR_EACH_FRAME (tail, frame) if (FRAME_X_P (XFRAME (frame)) - && FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo) + && FRAME_DISPLAY_INFO (XFRAME (frame)) == dpyinfo) { /* Set this to t so that delete_frame won't get confused trying to find a replacement. */ @@ -8050,7 +8050,7 @@ xim_destroy_callback (XIM xim, XPointer client_data, XPointer call_data) FOR_EACH_FRAME (tail, frame) { struct frame *f = XFRAME (frame); - if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo) + if (FRAME_X_P (f) && FRAME_DISPLAY_INFO (f) == dpyinfo) { FRAME_XIC (f) = NULL; xic_free_xfontset (f); @@ -8141,7 +8141,7 @@ xim_instantiate_callback (Display *display, XPointer client_data, XPointer call_ struct frame *f = XFRAME (frame); if (FRAME_X_P (f) - && FRAME_X_DISPLAY_INFO (f) == xim_inst->dpyinfo) + && FRAME_DISPLAY_INFO (f) == xim_inst->dpyinfo) if (FRAME_XIC (f) == NULL) { create_frame_xic (f); @@ -8239,7 +8239,7 @@ x_calc_absolute_position (struct frame *f) /* Treat negative positions as relative to the leftmost bottommost position that fits on the screen. */ if (flags & XNegative) - f->left_pos = x_display_pixel_width (FRAME_X_DISPLAY_INFO (f)) + f->left_pos = x_display_pixel_width (FRAME_DISPLAY_INFO (f)) - FRAME_PIXEL_WIDTH (f) + f->left_pos; { @@ -8262,7 +8262,7 @@ x_calc_absolute_position (struct frame *f) #endif if (flags & YNegative) - f->top_pos = x_display_pixel_height (FRAME_X_DISPLAY_INFO (f)) + f->top_pos = x_display_pixel_height (FRAME_DISPLAY_INFO (f)) - height + f->top_pos; } @@ -8302,7 +8302,7 @@ x_set_offset (struct frame *f, register int xoff, register int yoff, int change_ modified_left = f->left_pos; modified_top = f->top_pos; - if (change_gravity != 0 && FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A) + if (change_gravity != 0 && FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A) { /* Some WMs (twm, wmaker at least) has an offset that is smaller than the WM decorations. So we use the calculated offset instead @@ -8315,7 +8315,7 @@ x_set_offset (struct frame *f, register int xoff, register int yoff, int change_ modified_left, modified_top); x_sync_with_move (f, f->left_pos, f->top_pos, - FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN + FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN ? 1 : 0); /* change_gravity is non-zero when this function is called from Lisp to @@ -8329,8 +8329,8 @@ x_set_offset (struct frame *f, register int xoff, register int yoff, int change_ need to compute the top/left offset adjustment for this frame. */ if (change_gravity != 0 && - (FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN - || (FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A + (FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN + || (FRAME_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A && (FRAME_X_OUTPUT (f)->move_offset_left == 0 && FRAME_X_OUTPUT (f)->move_offset_top == 0)))) x_check_expected_move (f, modified_left, modified_top); @@ -8351,7 +8351,7 @@ wm_supports (struct frame *f, Atom want_atom) unsigned long actual_size, bytes_remaining; int i, rc, actual_format; Window wmcheck_window; - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Window target_window = dpyinfo->root_window; long max_len = 65536; Display *dpy = FRAME_X_DISPLAY (f); @@ -8432,7 +8432,7 @@ wm_supports (struct frame *f, Atom want_atom) static void set_wm_state (Lisp_Object frame, int add, Atom atom, Atom value) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (frame)); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (XFRAME (frame)); x_send_client_event (frame, make_number (0), frame, dpyinfo->Xatom_net_wm_state, @@ -8451,7 +8451,7 @@ void x_set_sticky (struct frame *f, Lisp_Object new_value, Lisp_Object old_value) { Lisp_Object frame; - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); XSETFRAME (frame, f); @@ -8474,7 +8474,7 @@ get_current_wm_state (struct frame *f, Atom actual_type; unsigned long actual_size, bytes_remaining; int i, rc, actual_format, is_hidden = 0; - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); long max_len = 65536; Display *dpy = FRAME_X_DISPLAY (f); unsigned char *tmp_data = NULL; @@ -8538,7 +8538,7 @@ get_current_wm_state (struct frame *f, static int do_ewmh_fullscreen (struct frame *f) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); int have_net_atom = wm_supports (f, dpyinfo->Xatom_net_wm_state); int cur, dummy; @@ -8656,7 +8656,7 @@ x_check_fullscreen (struct frame *f) if (do_ewmh_fullscreen (f)) return; - if (f->output_data.x->parent_desc != FRAME_X_DISPLAY_INFO (f)->root_window) + if (f->output_data.x->parent_desc != FRAME_DISPLAY_INFO (f)->root_window) return; /* Only fullscreen without WM or with EWM hints (above). */ /* Setting fullscreen to nil doesn't do anything. We could save the @@ -8666,7 +8666,7 @@ x_check_fullscreen (struct frame *f) if (f->want_fullscreen != FULLSCREEN_NONE) { int width = FRAME_PIXEL_WIDTH (f), height = FRAME_PIXEL_HEIGHT (f); - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); switch (f->want_fullscreen) { @@ -8713,7 +8713,7 @@ x_check_expected_move (struct frame *f, int expected_left, int expected_top) int adjusted_left; int adjusted_top; - FRAME_X_DISPLAY_INFO (f)->wm_type = X_WMTYPE_A; + FRAME_DISPLAY_INFO (f)->wm_type = X_WMTYPE_A; FRAME_X_OUTPUT (f)->move_offset_left = expected_left - current_left; FRAME_X_OUTPUT (f)->move_offset_top = expected_top - current_top; @@ -8731,7 +8731,7 @@ x_check_expected_move (struct frame *f, int expected_left, int expected_top) /* It's a "Type B" window manager. We don't have to adjust the frame's position. */ - FRAME_X_DISPLAY_INFO (f)->wm_type = X_WMTYPE_B; + FRAME_DISPLAY_INFO (f)->wm_type = X_WMTYPE_B; } @@ -9023,7 +9023,7 @@ x_ewmh_activate_frame (struct frame *f) /* See Window Manager Specification/Extended Window Manager Hints at http://freedesktop.org/wiki/Specifications/wm-spec */ - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); if (FRAME_VISIBLE_P (f) && wm_supports (f, dpyinfo->Xatom_net_active_window)) { @@ -9057,7 +9057,7 @@ static void xembed_set_info (struct frame *f, enum xembed_info flags) { unsigned long data[2]; - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); data[0] = XEMBED_VERSION; data[1] = flags; @@ -9076,7 +9076,7 @@ xembed_send_message (struct frame *f, Time t, enum xembed_message msg, event.xclient.type = ClientMessage; event.xclient.window = FRAME_X_OUTPUT (f)->parent_desc; - event.xclient.message_type = FRAME_X_DISPLAY_INFO (f)->Xatom_XEMBED; + event.xclient.message_type = FRAME_DISPLAY_INFO (f)->Xatom_XEMBED; event.xclient.format = 32; event.xclient.data.l[0] = t; event.xclient.data.l[1] = msg; @@ -9266,8 +9266,8 @@ x_make_frame_invisible (struct frame *f) window = FRAME_OUTER_WINDOW (f); /* Don't keep the highlight on an invisible frame. */ - if (FRAME_X_DISPLAY_INFO (f)->x_highlight_frame == f) - FRAME_X_DISPLAY_INFO (f)->x_highlight_frame = 0; + if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f) + FRAME_DISPLAY_INFO (f)->x_highlight_frame = 0; block_input (); @@ -9321,8 +9321,8 @@ x_iconify_frame (struct frame *f) Lisp_Object type; /* Don't keep the highlight on an invisible frame. */ - if (FRAME_X_DISPLAY_INFO (f)->x_highlight_frame == f) - FRAME_X_DISPLAY_INFO (f)->x_highlight_frame = 0; + if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f) + FRAME_DISPLAY_INFO (f)->x_highlight_frame = 0; if (FRAME_ICONIFIED_P (f)) return; @@ -9397,7 +9397,7 @@ x_iconify_frame (struct frame *f) msg.xclient.window = FRAME_X_WINDOW (f); msg.xclient.type = ClientMessage; - msg.xclient.message_type = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_change_state; + msg.xclient.message_type = FRAME_DISPLAY_INFO (f)->Xatom_wm_change_state; msg.xclient.format = 32; msg.xclient.data.l[0] = IconicState; @@ -9436,7 +9436,7 @@ x_iconify_frame (struct frame *f) void x_free_frame_resources (struct frame *f) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight; #ifdef USE_X_TOOLKIT Lisp_Object bar; @@ -9559,7 +9559,7 @@ x_free_frame_resources (struct frame *f) static void x_destroy_window (struct frame *f) { - struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); /* If a display connection is dead, don't try sending more commands to the X server. */ @@ -9605,9 +9605,9 @@ x_wm_set_size_hint (struct frame *f, long flags, bool user_position) size_hints.width_inc = FRAME_COLUMN_WIDTH (f); size_hints.height_inc = FRAME_LINE_HEIGHT (f); - size_hints.max_width = x_display_pixel_width (FRAME_X_DISPLAY_INFO (f)) + size_hints.max_width = x_display_pixel_width (FRAME_DISPLAY_INFO (f)) - FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0); - size_hints.max_height = x_display_pixel_height (FRAME_X_DISPLAY_INFO (f)) + size_hints.max_height = x_display_pixel_height (FRAME_DISPLAY_INFO (f)) - FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, 0); /* Calculate the base and minimum sizes. */ diff --git a/src/xterm.h b/src/xterm.h index 2f29667684d..3c091b7afcd 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -700,20 +700,20 @@ enum #define FRAME_BASELINE_OFFSET(f) ((f)->output_data.x->baseline_offset) /* This gives the x_display_info structure for the display F is on. */ -#define FRAME_X_DISPLAY_INFO(f) ((f)->output_data.x->display_info) +#define FRAME_DISPLAY_INFO(f) ((f)->output_data.x->display_info) /* This is the `Display *' which frame F is on. */ -#define FRAME_X_DISPLAY(f) (FRAME_X_DISPLAY_INFO (f)->display) +#define FRAME_X_DISPLAY(f) (FRAME_DISPLAY_INFO (f)->display) /* This is the `Screen *' which frame F is on. */ -#define FRAME_X_SCREEN(f) (FRAME_X_DISPLAY_INFO (f)->screen) +#define FRAME_X_SCREEN(f) (FRAME_DISPLAY_INFO (f)->screen) #define FRAME_X_SCREEN_NUMBER(f) XScreenNumberOfScreen (FRAME_X_SCREEN (f)) /* This is the Visual which frame F is on. */ -#define FRAME_X_VISUAL(f) FRAME_X_DISPLAY_INFO (f)->visual +#define FRAME_X_VISUAL(f) FRAME_DISPLAY_INFO (f)->visual /* This is the Colormap which frame F uses. */ -#define FRAME_X_COLORMAP(f) FRAME_X_DISPLAY_INFO (f)->cmap +#define FRAME_X_COLORMAP(f) FRAME_DISPLAY_INFO (f)->cmap /* The difference in pixels between the top left corner of the Emacs window (including possible window manager decorations) @@ -726,20 +726,20 @@ enum #define FRAME_XIC(f) ((f)->output_data.x->xic) -#define FRAME_X_XIM(f) (FRAME_X_DISPLAY_INFO (f)->xim) -#define FRAME_X_XIM_STYLES(f) (FRAME_X_DISPLAY_INFO (f)->xim_styles) +#define FRAME_X_XIM(f) (FRAME_DISPLAY_INFO (f)->xim) +#define FRAME_X_XIM_STYLES(f) (FRAME_DISPLAY_INFO (f)->xim_styles) #define FRAME_XIC_STYLE(f) ((f)->output_data.x->xic_style) #define FRAME_XIC_FONTSET(f) ((f)->output_data.x->xic_xfs) /* Value is the smallest width of any character in any font on frame F. */ #define FRAME_SMALLEST_CHAR_WIDTH(F) \ - FRAME_X_DISPLAY_INFO(F)->smallest_char_width + FRAME_DISPLAY_INFO(F)->smallest_char_width /* Value is the smallest height of any font on frame F. */ #define FRAME_SMALLEST_FONT_HEIGHT(F) \ - FRAME_X_DISPLAY_INFO(F)->smallest_font_height + FRAME_DISPLAY_INFO(F)->smallest_font_height /* X-specific scroll bar stuff. */ From 6ad9cb087a85c5bb0d7010db98dab006f23c4f1d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 09:11:19 -0700 Subject: [PATCH 132/321] * test/automated/eshell.el (eshell-test-command-result): New, again using a temp directory. Replace eshell-command-result with this throughout. --- test/ChangeLog | 2 ++ test/automated/eshell.el | 38 ++++++++++++++++++++++---------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index de1676341e5..4330b77e21e 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -2,6 +2,8 @@ * automated/eshell.el (with-temp-eshell): Use a temp directory for eshell-directory-name. + (eshell-test-command-result): New, again using a temp directory. + Replace eshell-command-result with this throughout. 2013-09-12 Glenn Morris diff --git a/test/automated/eshell.el b/test/automated/eshell.el index 310e9b6dfde..d5ebc567281 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -56,77 +56,83 @@ (eshell-insert-command text func) (eshell-match-result regexp)) +(defun eshell-test-command-result (command) + "Like `eshell-command-result', but not using HOME." + (let ((eshell-directory-name (make-temp-file "eshell" t)) + (eshell-history-file-name nil)) + (eshell-command-result command))) + ;;; Tests: (ert-deftest eshell-test/simple-command-result () "Test `eshell-command-result' with a simple command." - (should (equal (eshell-command-result "+ 1 2") 3))) + (should (equal (eshell-test-command-result "+ 1 2") 3))) (ert-deftest eshell-test/lisp-command () "Test `eshell-command-result' with an elisp command." - (should (equal (eshell-command-result "(+ 1 2)") 3))) + (should (equal (eshell-test-command-result "(+ 1 2)") 3))) (ert-deftest eshell-test/for-loop () "Test `eshell-command-result' with an elisp command." - (should (equal (eshell-command-result "for foo in 5 { echo $foo }") 5))) + (should (equal (eshell-test-command-result "for foo in 5 { echo $foo }") 5))) (ert-deftest eshell-test/for-name-loop () ;Bug#15231 "Test `eshell-command-result' with an elisp command." - (should (equal (eshell-command-result "for name in 3 { echo $name }") 3))) + (should (equal (eshell-test-command-result "for name in 3 { echo $name }") 3))) (ert-deftest eshell-test/lisp-command-args () "Test `eshell-command-result' with elisp and trailing args. Test that trailing arguments outside the S-expression are ignored. e.g. \"(+ 1 2) 3\" => 3" - (should (equal (eshell-command-result "(+ 1 2) 3") 3))) + (should (equal (eshell-test-command-result "(+ 1 2) 3") 3))) (ert-deftest eshell-test/subcommand () "Test `eshell-command-result' with a simple subcommand." - (should (equal (eshell-command-result "{+ 1 2}") 3))) + (should (equal (eshell-test-command-result "{+ 1 2}") 3))) (ert-deftest eshell-test/subcommand-args () "Test `eshell-command-result' with a subcommand and trailing args. Test that trailing arguments outside the subcommand are ignored. e.g. \"{+ 1 2} 3\" => 3" - (should (equal (eshell-command-result "{+ 1 2} 3") 3))) + (should (equal (eshell-test-command-result "{+ 1 2} 3") 3))) (ert-deftest eshell-test/subcommand-lisp () "Test `eshell-command-result' with an elisp subcommand and trailing args. Test that trailing arguments outside the subcommand are ignored. e.g. \"{(+ 1 2)} 3\" => 3" - (should (equal (eshell-command-result "{(+ 1 2)} 3") 3))) + (should (equal (eshell-test-command-result "{(+ 1 2)} 3") 3))) (ert-deftest eshell-test/interp-cmd () "Interpolate command result" - (should (equal (eshell-command-result "+ ${+ 1 2} 3") 6))) + (should (equal (eshell-test-command-result "+ ${+ 1 2} 3") 6))) (ert-deftest eshell-test/interp-lisp () "Interpolate Lisp form evaluation" - (should (equal (eshell-command-result "+ $(+ 1 2) 3") 6))) + (should (equal (eshell-test-command-result "+ $(+ 1 2) 3") 6))) (ert-deftest eshell-test/interp-concat () "Interpolate and concat command" - (should (equal (eshell-command-result "+ ${+ 1 2}3 3") 36))) + (should (equal (eshell-test-command-result "+ ${+ 1 2}3 3") 36))) (ert-deftest eshell-test/interp-concat-lisp () "Interpolate and concat Lisp form" - (should (equal (eshell-command-result "+ $(+ 1 2)3 3") 36))) + (should (equal (eshell-test-command-result "+ $(+ 1 2)3 3") 36))) (ert-deftest eshell-test/interp-concat2 () "Interpolate and concat two commands" - (should (equal (eshell-command-result "+ ${+ 1 2}${+ 1 2} 3") 36))) + (should (equal (eshell-test-command-result "+ ${+ 1 2}${+ 1 2} 3") 36))) (ert-deftest eshell-test/interp-concat-lisp2 () "Interpolate and concat two Lisp forms" - (should (equal (eshell-command-result "+ $(+ 1 2)$(+ 1 2) 3") 36))) + (should (equal (eshell-test-command-result "+ $(+ 1 2)$(+ 1 2) 3") 36))) (ert-deftest eshell-test/window-height () "$LINES should equal (window-height)" - (should (eshell-command-result "= $LINES (window-height)"))) + (should (eshell-test-command-result "= $LINES (window-height)"))) (ert-deftest eshell-test/window-width () "$COLUMNS should equal (window-width)" - (should (eshell-command-result "= $COLUMNS (window-width)"))) + (should (eshell-test-command-result "= $COLUMNS (window-width)"))) (ert-deftest eshell-test/last-result-var () "Test using the \"last result\" ($$) variable" From bc2c0769db73f5acd7545b4c3f74cae29e4e4315 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 09:16:57 -0700 Subject: [PATCH 133/321] * test/automated/eshell.el (eshell-test-command-result): Clean up when done --- test/automated/eshell.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/automated/eshell.el b/test/automated/eshell.el index d5ebc567281..f9061ceb57c 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -60,7 +60,9 @@ "Like `eshell-command-result', but not using HOME." (let ((eshell-directory-name (make-temp-file "eshell" t)) (eshell-history-file-name nil)) - (eshell-command-result command))) + (unwind-protect + (eshell-command-result command) + (delete-directory eshell-directory-name t)))) ;;; Tests: From fcd42c11c0e0e5fa3ab931ad2126b1d855ba240f Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 13 Sep 2013 20:46:18 +0400 Subject: [PATCH 134/321] Unify Fx_focus_frame between all ports. * src/frame.h (x_focus_frame): New prototype. * src/xfns.c (Fx_focus_frame): Remove. (syms_of_xfns): Do not defsubr it. (x_focus_frame): X implementation. * src/nsfns.m (Fx_focus_frame): Remove. (syms_of_nsfns): Do not defsubr it. (x_focus_frame): NS implementation. * src/w32term.c (Fx_focus_frame): Remove. (x_focus_on_frame): Rename to... (x_focus_frame): W32 implementation. * src/w32term.h (x_focus_on_frame): Remove prototype. * src/w32fns.c (Fx_focus_frame): Remove. (syms_of_w32fns): Do not defsubr it. * src/frame.c (Fx_focus_frame): Define here. (syms_of_frame): Defsubr here. * src/gtkutil.c (xg_tool_bar_callback): Use x_focus_frame. * lisp/frame.el (x-focus-frame): Mark as declared in frame.c. --- lisp/ChangeLog | 4 ++++ lisp/frame.el | 2 +- src/ChangeLog | 20 ++++++++++++++++++++ src/frame.c | 9 +++++++++ src/frame.h | 1 + src/gtkutil.c | 6 +++--- src/nsfns.m | 11 ++--------- src/w32fns.c | 10 ---------- src/w32term.c | 2 +- src/w32term.h | 2 -- src/xfns.c | 10 ++-------- 11 files changed, 43 insertions(+), 34 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 649e3a3b01c..aa17b9328c4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-13 Dmitry Antipov + + * frame.el (x-focus-frame): Mark as declared in frame.c. + 2013-09-13 Stefan Monnier * ls-lisp.el: Use advice-add. diff --git a/lisp/frame.el b/lisp/frame.el index 3668f24ba01..74149a8dc01 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -759,7 +759,7 @@ the user during startup." (nreverse frame-initial-geometry-arguments)) (cdr param-list)) -(declare-function x-focus-frame "xfns.c" (frame)) +(declare-function x-focus-frame "frame.c" (frame)) (defun select-frame-set-input-focus (frame &optional norecord) "Select FRAME, raise it, and set input focus, if possible. diff --git a/src/ChangeLog b/src/ChangeLog index 57cb776038a..cc8704da2a1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,23 @@ +2013-09-13 Dmitry Antipov + + Unify Fx_focus_frame between all ports. + * frame.h (x_focus_frame): New prototype. + * xfns.c (Fx_focus_frame): Remove. + (syms_of_xfns): Do not defsubr it. + (x_focus_frame): X implementation. + * nsfns.m (Fx_focus_frame): Remove. + (syms_of_nsfns): Do not defsubr it. + (x_focus_frame): NS implementation. + * w32term.c (Fx_focus_frame): Remove. + (x_focus_on_frame): Rename to... + (x_focus_frame): W32 implementation. + * w32term.h (x_focus_on_frame): Remove prototype. + * w32fns.c (Fx_focus_frame): Remove. + (syms_of_w32fns): Do not defsubr it. + * frame.c (Fx_focus_frame): Define here. + (syms_of_frame): Defsubr here. + * gtkutil.c (xg_tool_bar_callback): Use x_focus_frame. + 2013-09-13 Dmitry Antipov Unify FRAME_window_system_DISPLAY_INFO macros between all ports. diff --git a/src/frame.c b/src/frame.c index 0de3152166e..74e57f9b5f2 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1901,6 +1901,14 @@ See `redirect-frame-focus'. */) return FRAME_FOCUS_FRAME (decode_live_frame (frame)); } +DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0, + doc: /* Set the input focus to FRAME. +FRAME nil means use the selected frame. */) + (Lisp_Object frame) +{ + x_focus_frame (decode_window_system_frame (frame)); + return Qnil; +} /* Return the value of frame parameter PROP in frame FRAME. */ @@ -4524,6 +4532,7 @@ automatically. See also `mouse-autoselect-window'. */); defsubr (&Svisible_frame_list); defsubr (&Sraise_frame); defsubr (&Slower_frame); + defsubr (&Sx_focus_frame); defsubr (&Sredirect_frame_focus); defsubr (&Sframe_focus); defsubr (&Sframe_parameters); diff --git a/src/frame.h b/src/frame.h index 4184ce24a17..ea550f4a2fa 100644 --- a/src/frame.h +++ b/src/frame.h @@ -1263,6 +1263,7 @@ extern void x_sync (struct frame *); extern void x_query_colors (struct frame *f, XColor *, int); extern void x_query_color (struct frame *f, XColor *); +extern void x_focus_frame (struct frame *); #endif /* HAVE_WINDOW_SYSTEM */ diff --git a/src/gtkutil.c b/src/gtkutil.c index 064145282bc..95154ef9b52 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -3975,9 +3975,9 @@ xg_tool_bar_callback (GtkWidget *w, gpointer client_data) event.modifiers = x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), mod); kbd_buffer_store_event (&event); - /* Return focus to the frame after we have clicked on a detached - tool bar button. */ - Fx_focus_frame (frame); + /* Return focus to the frame after we have clicked on a detached + tool bar button. */ + x_focus_frame (f); } /* Callback function invoked when a tool bar item is pressed in a detached diff --git a/src/nsfns.m b/src/nsfns.m index 2d828991ffe..8eaf529ed04 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1339,13 +1339,9 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side return unbind_to (count, frame); } - -DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0, - doc: /* Set the input focus to FRAME. -FRAME nil means use the selected frame. */) - (Lisp_Object frame) +void +x_focus_frame (struct frame *f) { - struct frame *f = decode_window_system_frame (frame); struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); if (dpyinfo->x_focus_frame != f) @@ -1356,8 +1352,6 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side [[view window] makeKeyAndOrderFront: view]; unblock_input (); } - - return Qnil; } @@ -2894,7 +2888,6 @@ - (NSString *)panel: (id)sender userEnteredFilename: (NSString *)filename defsubr (&Sns_list_services); defsubr (&Sns_perform_service); defsubr (&Sns_convert_utf8_nfd_to_nfc); - defsubr (&Sx_focus_frame); defsubr (&Sns_popup_font_panel); defsubr (&Sns_popup_color_panel); diff --git a/src/w32fns.c b/src/w32fns.c index d2defeed529..0e8b8ab5a5b 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -4622,15 +4622,6 @@ x_get_focus_frame (struct frame *frame) return xfocus; } -DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0, - doc: /* Give FRAME input focus, raising to foreground if necessary. */) - (Lisp_Object frame) -{ - x_focus_on_frame (decode_window_system_frame (frame)); - return Qnil; -} - - DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, doc: /* Internal function called by `color-defined-p', which see. \(Note that the Nextstep version of this function ignores FRAME.) */) @@ -7857,7 +7848,6 @@ only be necessary if the default setting causes problems. */); defsubr (&Sx_close_connection); defsubr (&Sx_display_list); defsubr (&Sx_synchronize); - defsubr (&Sx_focus_frame); /* W32 specific functions */ diff --git a/src/w32term.c b/src/w32term.c index f86f7d351aa..cb7327b21b7 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -5806,7 +5806,7 @@ x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y) /* focus shifting, raising and lowering. */ void -x_focus_on_frame (struct frame *f) +x_focus_frame (struct frame *f) { struct w32_display_info *dpyinfo = &one_w32_display_info; diff --git a/src/w32term.h b/src/w32term.h index 68c0245acb9..5146fa8ef3a 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -199,8 +199,6 @@ Lisp_Object display_x_get_resource (struct w32_display_info *, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); -extern void x_focus_on_frame (struct frame *f); - /* also defined in xterm.h XXX: factor out to common header */ extern struct w32_display_info *w32_term_init (Lisp_Object, diff --git a/src/xfns.c b/src/xfns.c index df5f0a742d9..ecd1ce7bc95 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -3252,12 +3252,9 @@ x_get_focus_frame (struct frame *frame) policy. But I think it's okay to use when it's clearly done following a user-command. */ -DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0, - doc: /* Set the input focus to FRAME. -FRAME nil means use the selected frame. */) - (Lisp_Object frame) +void +x_focus_frame (struct frame *f) { - struct frame *f = decode_window_system_frame (frame); Display *dpy = FRAME_X_DISPLAY (f); block_input (); @@ -3279,8 +3276,6 @@ FRAME nil means use the selected frame. */) x_uncatch_errors (); unblock_input (); - - return Qnil; } @@ -6170,7 +6165,6 @@ When using Gtk+ tooltips, the tooltip face is not used. */); defsubr (&Sx_close_connection); defsubr (&Sx_display_list); defsubr (&Sx_synchronize); - defsubr (&Sx_focus_frame); defsubr (&Sx_backspace_delete_keys_p); defsubr (&Sx_show_tip); From 97fc2468bd2cbce07205d1fc96f17220187a0f84 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 13 Sep 2013 20:55:48 +0400 Subject: [PATCH 135/321] * frame.c (Fx_focus_frame) [HAVE_WINDOW_SYSTEM]: Fix last change. --- src/frame.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/frame.c b/src/frame.c index 74e57f9b5f2..fde2a131548 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1903,10 +1903,13 @@ See `redirect-frame-focus'. */) DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0, doc: /* Set the input focus to FRAME. -FRAME nil means use the selected frame. */) +FRAME nil means use the selected frame. +If there is no window system support, this function does nothing. */) (Lisp_Object frame) { +#ifdef HAVE_WINDOW_SYSTEM x_focus_frame (decode_window_system_frame (frame)); +#endif return Qnil; } From e16582b6bc23a1a514d27cfc38c7ddcd91622adb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 13:13:52 -0400 Subject: [PATCH 136/321] * test/automated/eshell.el (eshell-test/for-loop, eshell-test/for-name-loop): Ensure environment variables don't confuse us. --- test/ChangeLog | 2 ++ test/automated/eshell.el | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index 4330b77e21e..21b22425fb6 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -4,6 +4,8 @@ Use a temp directory for eshell-directory-name. (eshell-test-command-result): New, again using a temp directory. Replace eshell-command-result with this throughout. + (eshell-test/for-loop, eshell-test/for-name-loop): + Ensure environment variables don't confuse us. 2013-09-12 Glenn Morris diff --git a/test/automated/eshell.el b/test/automated/eshell.el index f9061ceb57c..b9eb31660f1 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -76,11 +76,15 @@ (ert-deftest eshell-test/for-loop () "Test `eshell-command-result' with an elisp command." - (should (equal (eshell-test-command-result "for foo in 5 { echo $foo }") 5))) + (let ((process-environment (cons "foo" process-environment))) + (should (equal (eshell-test-command-result + "for foo in 5 { echo $foo }") 5)))) (ert-deftest eshell-test/for-name-loop () ;Bug#15231 "Test `eshell-command-result' with an elisp command." - (should (equal (eshell-test-command-result "for name in 3 { echo $name }") 3))) + (let ((process-environment (cons "name" process-environment))) + (should (equal (eshell-test-command-result + "for name in 3 { echo $name }") 3)))) (ert-deftest eshell-test/lisp-command-args () "Test `eshell-command-result' with elisp and trailing args. From d3fc65499a4bf85799eee7996128cd74fea17cce Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 13 Sep 2013 13:28:34 -0400 Subject: [PATCH 137/321] * lisp/dired-x.el (dired-guess-default): Make `file' available in the env. (dired-guess-shell-alist-user): Doc fix. Fixes: debbugs:15363 --- lisp/ChangeLog | 5 +++++ lisp/dired-x.el | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index aa17b9328c4..ba3de9f4305 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-13 Glenn Morris + + * dired-x.el (dired-guess-shell-alist-user): Doc fix. + (dired-guess-default): Make `file' available in the env. (Bug#15363) + 2013-09-13 Dmitry Antipov * frame.el (x-focus-frame): Mark as declared in frame.c. diff --git a/lisp/dired-x.el b/lisp/dired-x.el index c15f3b5b121..287934f7adc 100644 --- a/lisp/dired-x.el +++ b/lisp/dired-x.el @@ -1047,7 +1047,8 @@ Each element of this list looks like (REGEXP COMMAND...) where each COMMAND can either be a string or a Lisp expression that evaluates -to a string. If several COMMANDs are given, the first one will be the default +to a string. This expression can access the file name as the variable `file'. +If several COMMANDs are given, the first one will be the default and the rest will be added temporarily to the history and can be retrieved with \\[previous-history-element] (M-p) . @@ -1105,8 +1106,8 @@ See `dired-guess-shell-alist-user'." ;; Return commands or nil if flist is still non-nil. ;; Evaluate the commands in order that any logical testing will be done. (if (cdr cmds) - (delete-dups (mapcar #'eval cmds)) - (eval (car cmds))))) ; single command + (delete-dups (mapcar (lambda (cmd) (eval cmd `((file . ,file)))) cmds)) + (eval (car cmds) `((file . ,file)))))) ; single command (defun dired-guess-shell-command (prompt files) "Ask user with PROMPT for a shell command, guessing a default from FILES." From 0df00f5905b75a5a0601c8696f41c8796c3d1baa Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 14 Sep 2013 12:24:34 +0300 Subject: [PATCH 138/321] Fix bug #15375 with inaccurate docs of display margin width values. doc/lispref/display.texi (Display Margins): State the units of measuring margin width. src/buffer.c (syms_of_buffer) : Doc fix. --- doc/lispref/ChangeLog | 5 +++++ doc/lispref/display.texi | 26 ++++++++++++++++---------- src/ChangeLog | 5 +++++ src/buffer.c | 4 ++-- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index b37fa4e64f3..a1503ea4dde 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2013-09-14 Eli Zaretskii + + * display.texi (Display Margins): State the units of measuring + margin width. (Bug#15375) + 2013-09-13 Eli Zaretskii * text.texi (Not Intervals): Minor wording fix. diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index ff9d98170d1..2e7d4f4c010 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -4189,13 +4189,15 @@ them a nonzero width. The usual way to do that is to set these variables: @defvar left-margin-width -This variable specifies the width of the left margin. -It is buffer-local in all buffers. +This variable specifies the width of the left margin, in character +cell units. It is buffer-local in all buffers. A value of @code{nil} +means no left marginal area. @end defvar @defvar right-margin-width -This variable specifies the width of the right margin. -It is buffer-local in all buffers. +This variable specifies the width of the right margin, in character +cell units. It is buffer-local in all buffers. A value of @code{nil} +means no right marginal area. @end defvar Setting these variables does not immediately affect the window. These @@ -4206,15 +4208,19 @@ Thus, you can make changes take effect by calling You can also set the margin widths immediately. @defun set-window-margins window left &optional right -This function specifies the margin widths for window @var{window}. -The argument @var{left} controls the left margin and -@var{right} controls the right margin (default @code{0}). +This function specifies the margin widths for window @var{window}, in +character cell (a.k.a.@: ``column''), units. The argument @var{left} +controls the left margin and @var{right} controls the right margin +(default @code{0}). @end defun @defun window-margins &optional window -This function returns the left and right margins of @var{window} -as a cons cell of the form @code{(@var{left} . @var{right})}. -If @var{window} is @code{nil}, the selected window is used. +This function returns the width of the left and right margins of +@var{window} as a cons cell of the form @w{@code{(@var{left} +. @var{right})}}. If one of the two marginal areas does not exist, +its width is returned as @code{nil}; if none of the two margins exist, +the function returns @code{nil}. If @var{window} is @code{nil}, the +selected window is used. @end defun @node Images diff --git a/src/ChangeLog b/src/ChangeLog index cc8704da2a1..8df160e1196 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-14 Eli Zaretskii + + * buffer.c (syms_of_buffer) : + Doc fix. (Bug#15375) + 2013-09-13 Dmitry Antipov Unify Fx_focus_frame between all ports. diff --git a/src/buffer.c b/src/buffer.c index 0bcb608dbd3..3d7468904f2 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -5900,7 +5900,7 @@ See also the functions `display-table-slot' and `set-display-table-slot'. */); DEFVAR_PER_BUFFER ("left-margin-width", &BVAR (current_buffer, left_margin_cols), Qintegerp, - doc: /* Width of left marginal area for display of a buffer. + doc: /* Width in columns of left marginal area for display of a buffer. A value of nil means no marginal area. Setting this variable does not take effect until a new buffer is displayed @@ -5908,7 +5908,7 @@ in a window. To make the change take effect, call `set-window-buffer'. */); DEFVAR_PER_BUFFER ("right-margin-width", &BVAR (current_buffer, right_margin_cols), Qintegerp, - doc: /* Width of right marginal area for display of a buffer. + doc: /* Width in columns of right marginal area for display of a buffer. A value of nil means no marginal area. Setting this variable does not take effect until a new buffer is displayed From 08a209bff2e8f91720e5b2dfbac071ea2286814b Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 14 Sep 2013 12:26:42 +0300 Subject: [PATCH 139/321] Fix src/ChangeLog entry of last commit. --- src/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8df160e1196..00f3fa8eccf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,6 +1,6 @@ 2013-09-14 Eli Zaretskii - * buffer.c (syms_of_buffer) : + * buffer.c (syms_of_buffer) : Doc fix. (Bug#15375) 2013-09-13 Dmitry Antipov From 0c4efd0a6a21725f83d7d0cba97cc4ca10adf6ca Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 14 Sep 2013 06:19:38 -0400 Subject: [PATCH 140/321] Auto-commit of loaddefs files. --- lisp/dired.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/dired.el b/lisp/dired.el index 345e8d57113..27327352afb 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -4352,7 +4352,7 @@ instead. ;;;*** -;;;### (autoloads nil "dired-x" "dired-x.el" "11fd4a8afa32507cc32d4a04d852587f") +;;;### (autoloads nil "dired-x" "dired-x.el" "732d08c173295dd14a0736fa222f532a") ;;; Generated autoloads from dired-x.el (autoload 'dired-jump "dired-x" "\ From d1ec44a551b0b1035df73e14ff9c8b83f51757b8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 14 Sep 2013 18:34:33 +0300 Subject: [PATCH 141/321] Fix last change in lispref/display.texi. Fixes: debbugs:15375 --- doc/lispref/display.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 2e7d4f4c010..d63f98c55c4 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -4219,7 +4219,7 @@ This function returns the width of the left and right margins of @var{window} as a cons cell of the form @w{@code{(@var{left} . @var{right})}}. If one of the two marginal areas does not exist, its width is returned as @code{nil}; if none of the two margins exist, -the function returns @code{nil}. If @var{window} is @code{nil}, the +the function returns @code{(nil)}. If @var{window} is @code{nil}, the selected window is used. @end defun From 6990c412efd951bc8cc4e4986600893b17d7b148 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 14 Sep 2013 19:33:12 +0300 Subject: [PATCH 142/321] Minor fixes for last change in lispref/display.texi. Fixes: debbugs:15375 --- doc/lispref/display.texi | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index d63f98c55c4..8ebf440c9fe 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -4190,8 +4190,8 @@ variables: @defvar left-margin-width This variable specifies the width of the left margin, in character -cell units. It is buffer-local in all buffers. A value of @code{nil} -means no left marginal area. +cell (a.k.a.@: ``column'') units. It is buffer-local in all buffers. +A value of @code{nil} means no left marginal area. @end defvar @defvar right-margin-width @@ -4209,16 +4209,15 @@ Thus, you can make changes take effect by calling @defun set-window-margins window left &optional right This function specifies the margin widths for window @var{window}, in -character cell (a.k.a.@: ``column''), units. The argument @var{left} -controls the left margin and @var{right} controls the right margin -(default @code{0}). +character cell units. The argument @var{left} controls the left +margin, and @var{right} controls the right margin (default @code{0}). @end defun @defun window-margins &optional window This function returns the width of the left and right margins of @var{window} as a cons cell of the form @w{@code{(@var{left} . @var{right})}}. If one of the two marginal areas does not exist, -its width is returned as @code{nil}; if none of the two margins exist, +its width is returned as @code{nil}; if neither of the two margins exist, the function returns @code{(nil)}. If @var{window} is @code{nil}, the selected window is used. @end defun From 95d0fa3a55974a6e9ef7f433d8ec8aeb9fd4a793 Mon Sep 17 00:00:00 2001 From: Vivek Dasmohapatra Date: Sat, 14 Sep 2013 16:33:19 -0700 Subject: [PATCH 143/321] * erc.el (erc-update-mode-line-buffer): Handle absent topic. Fixes: debbugs:15377 --- lisp/erc/ChangeLog | 5 +++++ lisp/erc/erc.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 70cab5af319..2c10f7fef22 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,8 @@ +2013-09-14 Vivek Dasmohapatra + + * erc.el (erc-update-mode-line-buffer): + Handle absent topic. (Bug#15377) + 2013-09-13 Glenn Morris * erc-desktop-notifications.el (dbus-debug): Declare. diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 0bfd21d6c3a..771b7016bcd 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -6189,7 +6189,7 @@ if `erc-away' is non-nil." ?m (erc-format-channel-modes) ?n (or (erc-current-nick) "") ?N (erc-format-network) - ?o (erc-controls-strip erc-channel-topic) + ?o (or (erc-controls-strip erc-channel-topic) "") ?p (erc-port-to-string erc-session-port) ?s (erc-format-target-and/or-server) ?S (erc-format-target-and/or-network) From fe30962e0b82e6069c72b4c929c1c660017635b8 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 14 Sep 2013 16:47:54 -0700 Subject: [PATCH 144/321] * doc/misc/eshell.texi: Markup fixes. --- doc/misc/ChangeLog | 4 ++++ doc/misc/eshell.texi | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index aa1e69891a2..4a52e2314ca 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,7 @@ +2013-09-14 Glenn Morris + + * eshell.texi: Markup fixes. + 2013-09-11 Xue Fuqiao * ido.texi (Interactive Substring Matching): Use @key{RET} instead diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi index 4604b262e72..bbe741a7a1d 100644 --- a/doc/misc/eshell.texi +++ b/doc/misc/eshell.texi @@ -353,7 +353,7 @@ sudo is an alias, defined as "*sudo $*" @vindex eshell-prefer-lisp-functions If you would prefer to use the built-in commands instead of the external -commands, set @var{eshell-prefer-lisp-functions} to @code{t}. +commands, set @code{eshell-prefer-lisp-functions} to @code{t}. Some of the built-in commands have different behaviour from their external counterparts, and some have no external counterpart. Most of @@ -515,7 +515,7 @@ Aliases are commands that expand to a longer input line. For example, with the command invocation @samp{alias ll ls -l}; with this defined, running @samp{ll foo} in Eshell will actually run @samp{ls -l foo}. Aliases defined (or deleted) by the @command{alias} command are -automatically written to the file named by @var{eshell-aliases-file}, +automatically written to the file named by @code{eshell-aliases-file}, which you can also edit directly (although you will have to manually reload it). @@ -539,7 +539,7 @@ by @code{!foo:n}. The history ring is loaded from a file at the start of every session, and written back to the file at the end of every session. The file path -is specified in @var{eshell-history-file-name}. Unlike other shells, +is specified in @code{eshell-history-file-name}. Unlike other shells, such as Bash, Eshell can not be configured to keep a history ring of a different size than that of the history file. @@ -721,11 +721,11 @@ terminal emulator. Programs that need a terminal to display output properly are referred to in this manual as ``visual commands,'' because they are not simply line-oriented. You must tell Eshell which commands are visual, by -adding them to @var{eshell-visual-commands}; for commands that are +adding them to @code{eshell-visual-commands}; for commands that are visual for only certain @emph{sub}-commands -- e.g. @samp{git log} but -not @samp{git status} -- use @var{eshell-visual-subcommands}; and for +not @samp{git status} -- use @code{eshell-visual-subcommands}; and for commands that are visual only when passed certain options, use -@var{eshell-visual-options}. +@code{eshell-visual-options}. @section Redirection Redirection is mostly the same in Eshell as it is in other command @@ -740,16 +740,16 @@ on the right-hand side, into which it inserts the output of the left-hand side. e.g., @samp{echo hello >>> #} inserts the string @code{"hello"} into the @code{*scratch*} buffer. -@var{eshell-virtual-targets} is a list of mappings of virtual device +@code{eshell-virtual-targets} is a list of mappings of virtual device names to functions. Eshell comes with two virtual devices: @file{/dev/kill}, which sends the text to the kill ring, and @file{/dev/clip}, which sends text to the clipboard. You can, of course, define your own virtual targets. They are defined -by adding a list of the form @code{("/dev/name" function mode)} to -@var{eshell-virtual-targets}. The first element is the device name; -@code{function} may be either a lambda or a function name. If -@code{mode} is nil, then the function is the output function; if it is +by adding a list of the form @samp{("/dev/name" @var{function} @var{mode})} to +@code{eshell-virtual-targets}. The first element is the device name; +@var{function} may be either a lambda or a function name. If +@var{mode} is nil, then the function is the output function; if it is non-nil, then the function is passed the redirection mode as a symbol--@code{overwrite} for @code{>}, @code{append} for @code{>>}, or @code{insert} for @code{>>>}--and the function is expected to return @@ -774,7 +774,7 @@ Eshell module.} You also need to load the following as shown: @example (eval-when-compile - (require 'cl) + (require 'cl-lib) (require 'esh-mode) (require 'eshell)) From 0d8863b3b1829f8e53da8dff9ffc2dab60390da6 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 14 Sep 2013 16:55:15 -0700 Subject: [PATCH 145/321] * eshell/esh-var.el (eshell-variable-aliases-list): Fix doc typo. --- lisp/ChangeLog | 4 ++++ lisp/eshell/esh-var.el | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ba3de9f4305..8384f53d946 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-14 Glenn Morris + + * eshell/esh-var.el (eshell-variable-aliases-list): Fix doc typo. + 2013-09-13 Glenn Morris * dired-x.el (dired-guess-shell-alist-user): Doc fix. diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el index f68b65dfd46..8dd19618da2 100644 --- a/lisp/eshell/esh-var.el +++ b/lisp/eshell/esh-var.el @@ -184,9 +184,9 @@ if they are quoted with a backslash." indices))))) "This list provides aliasing for variable references. It is very similar in concept to what `eshell-user-aliases-list' does -for commands. Each member of this defines defines the name of a -command, and the Lisp value to return for that variable if it is -accessed via the syntax '$NAME'. +for commands. Each member of this defines the name of a command, +and the Lisp value to return for that variable if it is accessed +via the syntax '$NAME'. If the value is a function, that function will be called with two arguments: the list of the indices that was used in the reference, and From 1e53bb4bf2754c724bcb894e730fd77e25dae80c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 14 Sep 2013 17:10:45 -0700 Subject: [PATCH 146/321] * lisp/eshell/esh-cmd.el (eshell--local-vars): New variable. (eshell-rewrite-for-command): Add for loop vars to eshell--local-vars. * lisp/eshell/esh-var.el (eshell-get-variable): Respect eshell--local-vars. * test/automated/eshell.el (eshell-test/for-name-shadow-loop): New test. (eshell-test/for-loop, eshell-test/for-name-loop): Doc fix. Fixes: debbugs:15372 --- lisp/ChangeLog | 6 ++++++ lisp/eshell/esh-cmd.el | 6 +++++- lisp/eshell/esh-var.el | 1 + test/ChangeLog | 6 ++++++ test/automated/eshell.el | 10 ++++++++-- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8384f53d946..f63a0d6681f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-09-15 Glenn Morris + + * eshell/esh-cmd.el (eshell--local-vars): New variable. (Bug#15372) + (eshell-rewrite-for-command): Add for loop vars to eshell--local-vars. + * eshell/esh-var.el (eshell-get-variable): Respect eshell--local-vars. + 2013-09-14 Glenn Morris * eshell/esh-var.el (eshell-variable-aliases-list): Fix doc typo. diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index cc4fdd15bda..75e0e1d27c8 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -473,6 +473,8 @@ the second is ignored." arg)) (defvar eshell-last-command-status) ;Define in esh-io.el. +(defvar eshell--local-vars nil + "List of locally bound vars that should take precedence over env-vars.") (defun eshell-rewrite-for-command (terms) "Rewrite a `for' command into its equivalent Eshell command form. @@ -495,7 +497,9 @@ implemented via rewriting, rather than as a function." (eshell-command-body '(nil)) (eshell-test-body '(nil))) (while (car for-items) - (let ((,(intern (cadr terms)) (car for-items))) + (let ((,(intern (cadr terms)) (car for-items)) + (eshell--local-vars (cons ',(intern (cadr terms)) + eshell--local-vars))) (eshell-protect ,(eshell-invokify-arg body t))) (setcar for-items (cadr for-items)) diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el index 8dd19618da2..3121dadace2 100644 --- a/lisp/eshell/esh-var.el +++ b/lisp/eshell/esh-var.el @@ -502,6 +502,7 @@ Possible options are: (let ((sym (intern-soft var))) (if (and sym (boundp sym) (or eshell-prefer-lisp-variables + (memq sym eshell--local-vars) ; bug#15372 (not (getenv var)))) (symbol-value sym) (getenv var)))) diff --git a/test/ChangeLog b/test/ChangeLog index 21b22425fb6..85119db69f2 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2013-09-15 Glenn Morris + + * automated/eshell.el (eshell-test/for-name-shadow-loop): + New test. (Bug#15372) + (eshell-test/for-loop, eshell-test/for-name-loop): Doc fix. + 2013-09-13 Glenn Morris * automated/eshell.el (with-temp-eshell): diff --git a/test/automated/eshell.el b/test/automated/eshell.el index b9eb31660f1..6f7a35371a6 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -75,17 +75,23 @@ (should (equal (eshell-test-command-result "(+ 1 2)") 3))) (ert-deftest eshell-test/for-loop () - "Test `eshell-command-result' with an elisp command." + "Test `eshell-command-result' with a for loop.." (let ((process-environment (cons "foo" process-environment))) (should (equal (eshell-test-command-result "for foo in 5 { echo $foo }") 5)))) (ert-deftest eshell-test/for-name-loop () ;Bug#15231 - "Test `eshell-command-result' with an elisp command." + "Test `eshell-command-result' with a for loop using `name'." (let ((process-environment (cons "name" process-environment))) (should (equal (eshell-test-command-result "for name in 3 { echo $name }") 3)))) +(ert-deftest eshell-test/for-name-shadow-loop () ; bug#15372 + "Test `eshell-command-result' with a for loop using an env-var." + (let ((process-environment (cons "name=env-value" process-environment))) + (should (equal (eshell-test-command-result + "for name in 3 { echo $name }") 3)))) + (ert-deftest eshell-test/lisp-command-args () "Test `eshell-command-result' with elisp and trailing args. Test that trailing arguments outside the S-expression are From 307532421098fd42d632b169a0eed9e04a47e822 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 14 Sep 2013 17:35:54 -0700 Subject: [PATCH 147/321] * eshell/em-unix.el (eshell/rm): Make -f ignore missing files. Does not work until bug=15379 gets fixed. Fixes: debbugs:15373 --- lisp/ChangeLog | 3 +++ lisp/eshell/em-unix.el | 25 ++++++++++++++----------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f63a0d6681f..e151ca9312b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-15 Glenn Morris + * eshell/em-unix.el (eshell/rm): + Make -f ignore missing files. (Bug#15373) + * eshell/esh-cmd.el (eshell--local-vars): New variable. (Bug#15372) (eshell-rewrite-for-command): Add for loop vars to eshell--local-vars. * eshell/esh-var.el (eshell-get-variable): Respect eshell--local-vars. diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index 52d2b4d2a2d..5792fe17506 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -284,18 +284,21 @@ Remove (unlink) the FILE(s).") entry))))) (eshell-funcalln 'unintern entry))) ((stringp entry) - (if (and (file-directory-p entry) - (not (file-symlink-p entry))) - (if (or em-recursive - eshell-rm-removes-directories) - (if (or em-preview - (not em-interactive) - (y-or-n-p - (format "rm: descend into directory `%s'? " - entry))) + ;; -f should silently ignore missing files (bug#15373). + (unless (and force-removal + (not (file-exists-p entry))) + (if (and (file-directory-p entry) + (not (file-symlink-p entry))) + (if (or em-recursive + eshell-rm-removes-directories) + (if (or em-preview + (not em-interactive) + (y-or-n-p + (format "rm: descend into directory `%s'? " + entry))) (eshell-remove-entries nil (list entry) t)) - (eshell-error (format "rm: %s: is a directory\n" entry))) - (eshell-remove-entries nil (list entry) t))))) + (eshell-error (format "rm: %s: is a directory\n" entry))) + (eshell-remove-entries nil (list entry) t)))))) (setq args (cdr args))) nil)) From 07013c68954574404c3f7fc640ec4bfc34a4e3b8 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Sun, 15 Sep 2013 10:50:41 +0400 Subject: [PATCH 148/321] * xterm.h (FRAME_X_SCREEN_NUMBER): Add comment. (BLACK_PIX_DEFAULT, WHITE_PIX_DEFAULT): Use FRAME_X_SCREEN_NUMBER. --- src/ChangeLog | 5 +++++ src/xterm.h | 11 +++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 00f3fa8eccf..102818e04a5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-15 Dmitry Antipov + + * xterm.h (FRAME_X_SCREEN_NUMBER): Add comment. + (BLACK_PIX_DEFAULT, WHITE_PIX_DEFAULT): Use FRAME_X_SCREEN_NUMBER. + 2013-09-14 Eli Zaretskii * buffer.c (syms_of_buffer) : diff --git a/src/xterm.h b/src/xterm.h index 3c091b7afcd..aa128cb5072 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -78,10 +78,11 @@ typedef GtkWidget *xt_or_gtk_widget; #include "dispextern.h" #include "termhooks.h" -#define BLACK_PIX_DEFAULT(f) BlackPixel (FRAME_X_DISPLAY (f), \ - XScreenNumberOfScreen (FRAME_X_SCREEN (f))) -#define WHITE_PIX_DEFAULT(f) WhitePixel (FRAME_X_DISPLAY (f), \ - XScreenNumberOfScreen (FRAME_X_SCREEN (f))) +/* Black and white pixel values for the screen which frame F is on. */ +#define BLACK_PIX_DEFAULT(f) \ + BlackPixel (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f)) +#define WHITE_PIX_DEFAULT(f) \ + WhitePixel (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f)) #define FONT_WIDTH(f) ((f)->max_width) #define FONT_HEIGHT(f) ((f)->ascent + (f)->descent) @@ -707,6 +708,8 @@ enum /* This is the `Screen *' which frame F is on. */ #define FRAME_X_SCREEN(f) (FRAME_DISPLAY_INFO (f)->screen) + +/* This is the screen index number of screen which frame F is on. */ #define FRAME_X_SCREEN_NUMBER(f) XScreenNumberOfScreen (FRAME_X_SCREEN (f)) /* This is the Visual which frame F is on. */ From c7cc32f7ab5a5a0b4037cb17b84b396fd079747b Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Sun, 15 Sep 2013 11:06:05 +0400 Subject: [PATCH 149/321] * frame.h (FRAME_SMALLEST_CHAR_WIDTH, FRAME_SMALLEST_FONT_HEIGHT): Define once here... * nsterm.h, w32term.h, xterm.h: ...and not here. --- src/ChangeLog | 3 +++ src/frame.h | 9 +++++++++ src/nsterm.h | 4 ---- src/w32term.h | 10 ---------- src/xterm.h | 10 ---------- 5 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 102818e04a5..3473ec9ab02 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -2,6 +2,9 @@ * xterm.h (FRAME_X_SCREEN_NUMBER): Add comment. (BLACK_PIX_DEFAULT, WHITE_PIX_DEFAULT): Use FRAME_X_SCREEN_NUMBER. + * frame.h (FRAME_SMALLEST_CHAR_WIDTH, FRAME_SMALLEST_FONT_HEIGHT): + Define once here... + * nsterm.h, w32term.h, xterm.h: ...and not here. 2013-09-14 Eli Zaretskii diff --git a/src/frame.h b/src/frame.h index ea550f4a2fa..d8a6d380090 100644 --- a/src/frame.h +++ b/src/frame.h @@ -1131,6 +1131,15 @@ extern Lisp_Object selected_frame; (FRAME_PIXEL_Y_TO_LINE (f, ((height) \ - FRAME_INTERNAL_BORDER_WIDTH (f)))) +/* Value is the smallest width of any character in any font on frame F. */ + +#define FRAME_SMALLEST_CHAR_WIDTH(f) \ + FRAME_DISPLAY_INFO (f)->smallest_char_width + +/* Value is the smallest height of any font on frame F. */ + +#define FRAME_SMALLEST_FONT_HEIGHT(f) \ + FRAME_DISPLAY_INFO (f)->smallest_font_height /*********************************************************************** Frame Parameters diff --git a/src/nsterm.h b/src/nsterm.h index 487422b13db..5f89267be53 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -746,10 +746,6 @@ struct x_output #define FRAME_FONTSET(f) ((f)->output_data.ns->fontset) -#define FRAME_SMALLEST_CHAR_WIDTH(f) \ - (FRAME_DISPLAY_INFO (f)->smallest_char_width) -#define FRAME_SMALLEST_FONT_HEIGHT(f) \ - (FRAME_DISPLAY_INFO (f)->smallest_font_height) #define FRAME_BASELINE_OFFSET(f) ((f)->output_data.ns->baseline_offset) #define BLACK_PIX_DEFAULT(f) 0x000000 #define WHITE_PIX_DEFAULT(f) 0xFFFFFF diff --git a/src/w32term.h b/src/w32term.h index 5146fa8ef3a..9c7134ddf11 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -382,16 +382,6 @@ extern struct w32_output w32term_display; /* This is the `Display *' which frame F is on. */ #define FRAME_X_DISPLAY(f) (0) -/* Value is the smallest width of any character in any font on frame F. */ - -#define FRAME_SMALLEST_CHAR_WIDTH(F) \ - FRAME_DISPLAY_INFO(F)->smallest_char_width - -/* Value is the smallest height of any font on frame F. */ - -#define FRAME_SMALLEST_FONT_HEIGHT(F) \ - FRAME_DISPLAY_INFO(F)->smallest_font_height - #define FRAME_NORMAL_PLACEMENT(F) ((F)->output_data.w32->normal_placement) #define FRAME_PREV_FSMODE(F) ((F)->output_data.w32->prev_fsmode) diff --git a/src/xterm.h b/src/xterm.h index aa128cb5072..4f6b545cb45 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -734,16 +734,6 @@ enum #define FRAME_XIC_STYLE(f) ((f)->output_data.x->xic_style) #define FRAME_XIC_FONTSET(f) ((f)->output_data.x->xic_xfs) -/* Value is the smallest width of any character in any font on frame F. */ - -#define FRAME_SMALLEST_CHAR_WIDTH(F) \ - FRAME_DISPLAY_INFO(F)->smallest_char_width - -/* Value is the smallest height of any font on frame F. */ - -#define FRAME_SMALLEST_FONT_HEIGHT(F) \ - FRAME_DISPLAY_INFO(F)->smallest_font_height - /* X-specific scroll bar stuff. */ /* We represent scroll bars as lisp vectors. This allows us to place From 901049a6611e92b539e5fd2d661a9f0558a281dd Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Sun, 15 Sep 2013 11:28:38 +0400 Subject: [PATCH 150/321] * xterm.h (SCROLL_BAR_X_WIDGET, SET_SCROLL_BAR_X_WIDGET) [USE_X_TOOLKIT]: Define as such. * w32term.h (SCROLL_BAR_X_WIDGET, SET_SCROLL_BAR_X_WIDGET): Remove unused Xisms. --- src/ChangeLog | 4 ++++ src/w32term.h | 8 -------- src/xterm.h | 2 ++ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3473ec9ab02..4040681f7ca 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -2,9 +2,13 @@ * xterm.h (FRAME_X_SCREEN_NUMBER): Add comment. (BLACK_PIX_DEFAULT, WHITE_PIX_DEFAULT): Use FRAME_X_SCREEN_NUMBER. + (SCROLL_BAR_X_WIDGET, SET_SCROLL_BAR_X_WIDGET) [USE_X_TOOLKIT]: + Define as such. * frame.h (FRAME_SMALLEST_CHAR_WIDTH, FRAME_SMALLEST_FONT_HEIGHT): Define once here... * nsterm.h, w32term.h, xterm.h: ...and not here. + * w32term.h (SCROLL_BAR_X_WIDGET, SET_SCROLL_BAR_X_WIDGET): + Remove unused Xisms. 2013-09-14 Eli Zaretskii diff --git a/src/w32term.h b/src/w32term.h index 9c7134ddf11..6a49753a70a 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -473,14 +473,6 @@ struct scroll_bar { #define SET_SCROLL_BAR_W32_WINDOW(ptr, id) \ (SCROLL_BAR_UNPACK ((ptr)->w32_window_low, (ptr)->w32_window_high, (intptr_t) id)) -/* Extract the X widget of the scroll bar from a struct scroll_bar. */ -#define SCROLL_BAR_X_WIDGET(ptr) \ - ((Widget) SCROLL_BAR_PACK ((ptr)->x_widget_low, (ptr)->x_widget_high)) - -/* Store a widget id in a struct scroll_bar. */ -#define SET_SCROLL_BAR_X_WIDGET(ptr, w) \ - (SCROLL_BAR_UNPACK ((ptr)->x_widget_low, (ptr)->x_widget_high, (int) w)) - /* Return the inside width of a vertical scroll bar, given the outside width. */ #define VERTICAL_SCROLL_BAR_INSIDE_WIDTH(f,width) \ diff --git a/src/xterm.h b/src/xterm.h index 4f6b545cb45..b7efee4b6cc 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -796,6 +796,7 @@ struct scroll_bar /* Turning a lisp vector value into a pointer to a struct scroll_bar. */ #define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec)) +#ifdef USE_X_TOOLKIT /* Extract the X widget of the scroll bar from a struct scroll_bar. XtWindowToWidget should be fast enough since Xt uses a hash table @@ -812,6 +813,7 @@ struct scroll_bar ptr->x_window = window; \ } while (0) +#endif /* USE_X_TOOLKIT */ /* Return the inside width of a vertical scroll bar, given the outside width. */ From 7f09455e5807f0a2b14a313762f6b547490265d1 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Sun, 15 Sep 2013 11:48:25 +0400 Subject: [PATCH 151/321] * xterm.c, xfns.c (toplevel): Remove #ifdef HAVE_X_WINDOWS because these modules are never compiled otherwise. --- src/ChangeLog | 2 ++ src/xfns.c | 4 ---- src/xterm.c | 4 ---- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4040681f7ca..1e50b4391ba 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -9,6 +9,8 @@ * nsterm.h, w32term.h, xterm.h: ...and not here. * w32term.h (SCROLL_BAR_X_WIDGET, SET_SCROLL_BAR_X_WIDGET): Remove unused Xisms. + * xterm.c, xfns.c (toplevel): Remove #ifdef HAVE_X_WINDOWS because + these modules are never compiled otherwise. 2013-09-14 Eli Zaretskii diff --git a/src/xfns.c b/src/xfns.c index ecd1ce7bc95..d455b2f21e4 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -42,8 +42,6 @@ along with GNU Emacs. If not, see . */ #include "termchar.h" #include "font.h" -#ifdef HAVE_X_WINDOWS - #include #include @@ -6186,5 +6184,3 @@ When using Gtk+ tooltips, the tooltip face is not used. */); defsubr (&Sx_select_font); #endif } - -#endif /* HAVE_X_WINDOWS */ diff --git a/src/xterm.c b/src/xterm.c index 60c2ecd1448..05766341cbc 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -23,8 +23,6 @@ along with GNU Emacs. If not, see . */ #include #include -#ifdef HAVE_X_WINDOWS - #include "lisp.h" #include "blockinput.h" #include "syssignal.h" @@ -10865,5 +10863,3 @@ default is nil, which is the same as `super'. */); make_float (DEFAULT_REHASH_THRESHOLD), Qnil); } - -#endif /* HAVE_X_WINDOWS */ From 0eed03550425dd3e3689a7fa4d0f1a95b2e48254 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Sun, 15 Sep 2013 12:28:30 +0400 Subject: [PATCH 152/321] Drop VERTICAL_SCROLL_BAR_WIDTH_TRIM. For X, it is zero since 1999, and it is always zero for others, so I assume that this is an ancient leftover which nobody will want to change any more. * xterm.h, w32term.h, nsterm.h (VERTICAL_SCROLL_BAR_WIDTH_TRIM): Remove. (VERTICAL_SCROLL_BAR_INSIDE_WIDTH): * frame.c (x_set_scroll_bar_width): * w32fns.c (w32_createscrollbar): * w32term.c (w32_set_vertical_scroll_bar): * xfns.c (x_set_scroll_bar_default_width): * xterm.c (XTflash, x_scroll_bar_create, XTset_vertical_scroll_bar) (x_scroll_bar_expose): Related users changed. --- src/ChangeLog | 14 ++++++++++ src/frame.c | 3 -- src/nsterm.h | 4 --- src/w32fns.c | 15 ++++------ src/w32term.c | 3 +- src/w32term.h | 8 +----- src/xfns.c | 5 ++-- src/xterm.c | 76 ++++++++------------------------------------------- src/xterm.h | 8 +----- 9 files changed, 36 insertions(+), 100 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 1e50b4391ba..5f28dc3d7df 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,17 @@ +2013-09-15 Dmitry Antipov + + Drop VERTICAL_SCROLL_BAR_WIDTH_TRIM. For X, it is zero since 1999, + and it is always zero for others, so I assume that this is an ancient + leftover which nobody will want to change any more. + * xterm.h, w32term.h, nsterm.h (VERTICAL_SCROLL_BAR_WIDTH_TRIM): Remove. + (VERTICAL_SCROLL_BAR_INSIDE_WIDTH): + * frame.c (x_set_scroll_bar_width): + * w32fns.c (w32_createscrollbar): + * w32term.c (w32_set_vertical_scroll_bar): + * xfns.c (x_set_scroll_bar_default_width): + * xterm.c (XTflash, x_scroll_bar_create, XTset_vertical_scroll_bar) + (x_scroll_bar_expose): Related users changed. + 2013-09-15 Dmitry Antipov * xterm.h (FRAME_X_SCREEN_NUMBER): Add comment. diff --git a/src/frame.c b/src/frame.c index fde2a131548..8eabef55d1b 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3369,9 +3369,6 @@ x_set_scroll_bar_width (struct frame *f, Lisp_Object arg, Lisp_Object oldval) else if (RANGED_INTEGERP (1, arg, INT_MAX) && XFASTINT (arg) != FRAME_CONFIG_SCROLL_BAR_WIDTH (f)) { - if (XFASTINT (arg) <= 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM) - XSETINT (arg, 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM + 1); - FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = XFASTINT (arg); FRAME_CONFIG_SCROLL_BAR_COLS (f) = (XFASTINT (arg) + wid-1) / wid; if (FRAME_X_WINDOW (f)) diff --git a/src/nsterm.h b/src/nsterm.h index 5f89267be53..d8482cebbb0 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -900,8 +900,4 @@ extern char gnustep_base_version[]; /* version tracking */ ? (min) : (((x)>(max)) ? (max) : (x))) #define SCREENMAXBOUND(x) (IN_BOUND (-SCREENMAX, x, SCREENMAX)) -/* needed somewhere... */ -#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0) - - #endif /* HAVE_NS */ diff --git a/src/w32fns.c b/src/w32fns.c index 0e8b8ab5a5b..4cbbe1d5a80 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -1890,16 +1890,11 @@ w32_init_class (HINSTANCE hinst) static HWND w32_createscrollbar (struct frame *f, struct scroll_bar * bar) { - return (CreateWindow ("SCROLLBAR", "", SBS_VERT | WS_CHILD | WS_VISIBLE, - /* Position and size of scroll bar. */ - XINT (bar->left) + VERTICAL_SCROLL_BAR_WIDTH_TRIM, - XINT (bar->top), - XINT (bar->width) - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, - XINT (bar->height), - FRAME_W32_WINDOW (f), - NULL, - hinst, - NULL)); + return CreateWindow ("SCROLLBAR", "", SBS_VERT | WS_CHILD | WS_VISIBLE, + /* Position and size of scroll bar. */ + XINT (bar->left), XINT (bar->top), + XINT (bar->width), XINT (bar->height), + FRAME_W32_WINDOW (f), NULL, hinst, NULL); } static void diff --git a/src/w32term.c b/src/w32term.c index cb7327b21b7..af73e66d882 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -3866,8 +3866,7 @@ w32_set_vertical_scroll_bar (struct window *w, /* Make sure scroll bar is "visible" before moving, to ensure the area of the parent window now exposed will be refreshed. */ my_show_window (f, hwnd, SW_HIDE); - MoveWindow (hwnd, sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, - top, sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, + MoveWindow (hwnd, sb_left, top, sb_width, max (height, 1), TRUE); si.cbSize = sizeof (si); diff --git a/src/w32term.h b/src/w32term.h index 6a49753a70a..1cbadadc84e 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -478,8 +478,7 @@ struct scroll_bar { #define VERTICAL_SCROLL_BAR_INSIDE_WIDTH(f,width) \ ((width) \ - VERTICAL_SCROLL_BAR_LEFT_BORDER \ - - VERTICAL_SCROLL_BAR_RIGHT_BORDER \ - - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2) + - VERTICAL_SCROLL_BAR_RIGHT_BORDER) /* Return the length of the rectangle within which the top of the handle must stay. This isn't equivalent to the inside height, @@ -516,11 +515,6 @@ struct scroll_bar { /* Minimum lengths for scroll bar handles, in pixels. */ #define VERTICAL_SCROLL_BAR_MIN_HANDLE (vertical_scroll_bar_min_handle) -/* Trimming off a few pixels from each side prevents - text from glomming up against the scroll bar */ -#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0) - - struct frame; /* from frame.h */ extern void w32_fill_rect (struct frame *, HDC, COLORREF, RECT *); diff --git a/src/xfns.c b/src/xfns.c index d455b2f21e4..38aa5b3bbfe 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -1468,9 +1468,8 @@ x_set_scroll_bar_default_width (struct frame *f) int minw = 16; #endif /* A minimum width of 14 doesn't look good for toolkit scroll bars. */ - int width = minw + 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM; - FRAME_CONFIG_SCROLL_BAR_COLS (f) = (width + wid - 1) / wid; - FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = width; + FRAME_CONFIG_SCROLL_BAR_COLS (f) = (minw + wid - 1) / wid; + FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = minw; #else /* Make the actual width at least 14 pixels and a multiple of a character width. */ diff --git a/src/xterm.c b/src/xterm.c index 05766341cbc..4086d913c8a 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -3019,26 +3019,7 @@ XTflash (struct frame *f) /* These will be the left and right margins of the rectangles. */ int flash_left = FRAME_INTERNAL_BORDER_WIDTH (f); int flash_right = FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f); - - int width; - - /* Don't flash the area between a scroll bar and the frame - edge it is next to. */ - switch (FRAME_VERTICAL_SCROLL_BAR_TYPE (f)) - { - case vertical_scroll_bar_left: - flash_left += VERTICAL_SCROLL_BAR_WIDTH_TRIM; - break; - - case vertical_scroll_bar_right: - flash_right -= VERTICAL_SCROLL_BAR_WIDTH_TRIM; - break; - - default: - break; - } - - width = flash_right - flash_left; + int width = flash_right - flash_left; /* If window is tall, flash top and bottom line. */ if (height > 3 * FRAME_LINE_HEIGHT (f)) @@ -5053,12 +5034,9 @@ x_scroll_bar_create (struct window *w, int top, int left, int width, int height) window = XCreateWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), /* Position and size of scroll bar. */ - left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, - top, - width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, - height, + left, top, width, height, /* Border width, depth, class, and visual. */ - 0, + 0, CopyFromParent, CopyFromParent, CopyFromParent, @@ -5093,19 +5071,11 @@ x_scroll_bar_create (struct window *w, int top, int left, int width, int height) #ifdef USE_TOOLKIT_SCROLL_BARS { #ifdef USE_GTK - xg_update_scrollbar_pos (f, - bar->x_window, - top, - left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, - width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, - max (height, 1)); + xg_update_scrollbar_pos (f, bar->x_window, top, + left,width, max (height, 1)); #else /* not USE_GTK */ Widget scroll_bar = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar); - XtConfigureWidget (scroll_bar, - left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, - top, - width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, - max (height, 1), 0); + XtConfigureWidget (scroll_bar, left, top, width, max (height, 1), 0); XtMapWidget (scroll_bar); #endif /* not USE_GTK */ } @@ -5353,33 +5323,15 @@ XTset_vertical_scroll_bar (struct window *w, int portion, int whole, int positio left, top, width, height); } #ifdef USE_GTK - xg_update_scrollbar_pos (f, - bar->x_window, - top, - sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, - sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM *2, - max (height, 1)); + xg_update_scrollbar_pos (f, bar->x_window, top, + sb_left, sb_width, max (height, 1)); #else /* not USE_GTK */ XtConfigureWidget (SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar), - sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, - top, - sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, - max (height, 1), 0); + sb_left, top, sb_width, max (height, 1), 0); #endif /* not USE_GTK */ } #else /* not USE_TOOLKIT_SCROLL_BARS */ - /* Clear areas not covered by the scroll bar because of - VERTICAL_SCROLL_BAR_WIDTH_TRIM. */ - if (VERTICAL_SCROLL_BAR_WIDTH_TRIM) - { - x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), - left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, height); - x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), - left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM, - top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, height); - } - /* Clear areas not covered by the scroll bar because it's not as wide as the area reserved for it. This makes sure a previous mode line display is cleared after C-x 2 C-x 1, for @@ -5403,9 +5355,9 @@ XTset_vertical_scroll_bar (struct window *w, int portion, int whole, int positio { XWindowChanges wc; - wc.x = sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM; + wc.x = sb_left; wc.y = top; - wc.width = sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2; + wc.width = sb_width; wc.height = height; XConfigureWindow (FRAME_X_DISPLAY (f), bar->x_window, mask, &wc); @@ -5568,7 +5520,6 @@ x_scroll_bar_expose (struct scroll_bar *bar, XEvent *event) Window w = bar->x_window; struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); GC gc = f->output_data.x->normal_gc; - int width_trim = VERTICAL_SCROLL_BAR_WIDTH_TRIM; block_input (); @@ -5581,11 +5532,8 @@ x_scroll_bar_expose (struct scroll_bar *bar, XEvent *event) /* Draw a one-pixel border just inside the edges of the scroll bar. */ XDrawRectangle (FRAME_X_DISPLAY (f), w, gc, - /* x, y, width, height */ - 0, 0, - bar->width - 1 - width_trim - width_trim, - bar->height - 1); + 0, 0, bar->width - 1, bar->height - 1); /* Restore the foreground color of the GC if we changed it above. */ if (f->output_data.x->scroll_bar_foreground_pixel != -1) diff --git a/src/xterm.h b/src/xterm.h index b7efee4b6cc..2703c743292 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -820,8 +820,7 @@ struct scroll_bar #define VERTICAL_SCROLL_BAR_INSIDE_WIDTH(f, width) \ ((width) \ - VERTICAL_SCROLL_BAR_LEFT_BORDER \ - - VERTICAL_SCROLL_BAR_RIGHT_BORDER \ - - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2) + - VERTICAL_SCROLL_BAR_RIGHT_BORDER) /* Return the length of the rectangle within which the top of the handle must stay. This isn't equivalent to the inside height, @@ -858,11 +857,6 @@ struct scroll_bar /* Minimum lengths for scroll bar handles, in pixels. */ #define VERTICAL_SCROLL_BAR_MIN_HANDLE (5) -/* Trimming off a few pixels from each side prevents - text from glomming up against the scroll bar */ -#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0) - - /* If a struct input_event has a kind which is SELECTION_REQUEST_EVENT or SELECTION_CLEAR_EVENT, then its contents are really described by this structure. */ From 820a4cbeb61a8d16c3ad77788245b0ad1c711f71 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 15 Sep 2013 06:22:42 -0400 Subject: [PATCH 153/321] Auto-commit of loaddefs files. --- lisp/ibuffer.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index 8356a186f13..cde6e2e3d43 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -2628,7 +2628,7 @@ will be inserted before the group at point." ;;; Start of automatically extracted autoloads. -;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "85795a4045d20654599b73b88e8e1bc9") +;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "d06b2735a74954e0c6922a811de7608c") ;;; Generated autoloads from ibuf-ext.el (autoload 'ibuffer-auto-mode "ibuf-ext" "\ From c089653d568d5c696f2d35e1bcf9bba64af85b97 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Sun, 15 Sep 2013 18:08:04 +0200 Subject: [PATCH 154/321] In window--state-put-2 don't process buffer state when buffer doesn't exist (Bug#15382). * window.el (window--state-put-2): Don't process buffer state when buffer doesn't exist any more (Bug#15382). --- lisp/ChangeLog | 5 +++ lisp/window.el | 110 +++++++++++++++++++++++++------------------------ 2 files changed, 62 insertions(+), 53 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e151ca9312b..01400a96009 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-15 Martin Rudalics + + * window.el (window--state-put-2): Don't process buffer state + when buffer doesn't exist any more (Bug#15382). + 2013-09-15 Glenn Morris * eshell/em-unix.el (eshell/rm): diff --git a/lisp/window.el b/lisp/window.el index a111b3cb5b4..14e9f6bc128 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -4464,62 +4464,66 @@ value can be also stored on disk and read back in a new session." (set-window-parameter window (car parameter) (cdr parameter)))) ;; Process buffer related state. (when state - ;; We don't want to raise an error in case the buffer does not - ;; exist anymore, so we switch to a previous one and save the - ;; window with the intention of deleting it later if possible. (let ((buffer (get-buffer (car state)))) (if buffer - (set-window-buffer window buffer) + (with-current-buffer buffer + (set-window-buffer window buffer) + (set-window-hscroll window (cdr (assq 'hscroll state))) + (apply 'set-window-fringes + (cons window (cdr (assq 'fringes state)))) + (let ((margins (cdr (assq 'margins state)))) + (set-window-margins window (car margins) (cdr margins))) + (let ((scroll-bars (cdr (assq 'scroll-bars state)))) + (set-window-scroll-bars + window (car scroll-bars) (nth 2 scroll-bars) + (nth 3 scroll-bars))) + (set-window-vscroll window (cdr (assq 'vscroll state))) + ;; Adjust vertically. + (if (memq window-size-fixed '(t height)) + ;; A fixed height window, try to restore the + ;; original size. + (let ((delta (- (cdr (assq 'total-height item)) + (window-total-height window))) + window-size-fixed) + (when (window-resizable-p window delta) + (window-resize window delta))) + ;; Else check whether the window is not high enough. + (let* ((min-size (window-min-size window nil ignore)) + (delta (- min-size (window-total-size window)))) + (when (and (> delta 0) + (window-resizable-p window delta nil ignore)) + (window-resize window delta nil ignore)))) + ;; Adjust horizontally. + (if (memq window-size-fixed '(t width)) + ;; A fixed width window, try to restore the original + ;; size. + (let ((delta (- (cdr (assq 'total-width item)) + (window-total-width window))) + window-size-fixed) + (when (window-resizable-p window delta) + (window-resize window delta))) + ;; Else check whether the window is not wide enough. + (let* ((min-size (window-min-size window t ignore)) + (delta (- min-size (window-total-size window t)))) + (when (and (> delta 0) + (window-resizable-p window delta t ignore)) + (window-resize window delta t ignore)))) + ;; Set dedicated status. + (set-window-dedicated-p window (cdr (assq 'dedicated state))) + ;; Install positions (maybe we should do this after all + ;; windows have been created and sized). + (ignore-errors + (set-window-start window (cdr (assq 'start state))) + (set-window-point window (cdr (assq 'point state)))) + ;; Select window if it's the selected one. + (when (cdr (assq 'selected state)) + (select-window window))) + ;; We don't want to raise an error in case the buffer does + ;; not exist anymore, so we switch to a previous one and + ;; save the window with the intention of deleting it later + ;; if possible. (switch-to-prev-buffer window) - (push window window-state-put-stale-windows))) - (with-current-buffer (window-buffer window) - (set-window-hscroll window (cdr (assq 'hscroll state))) - (apply 'set-window-fringes - (cons window (cdr (assq 'fringes state)))) - (let ((margins (cdr (assq 'margins state)))) - (set-window-margins window (car margins) (cdr margins))) - (let ((scroll-bars (cdr (assq 'scroll-bars state)))) - (set-window-scroll-bars - window (car scroll-bars) (nth 2 scroll-bars) (nth 3 scroll-bars))) - (set-window-vscroll window (cdr (assq 'vscroll state))) - ;; Adjust vertically. - (if (memq window-size-fixed '(t height)) - ;; A fixed height window, try to restore the original size. - (let ((delta (- (cdr (assq 'total-height item)) - (window-total-height window))) - window-size-fixed) - (when (window-resizable-p window delta) - (window-resize window delta))) - ;; Else check whether the window is not high enough. - (let* ((min-size (window-min-size window nil ignore)) - (delta (- min-size (window-total-size window)))) - (when (and (> delta 0) - (window-resizable-p window delta nil ignore)) - (window-resize window delta nil ignore)))) - ;; Adjust horizontally. - (if (memq window-size-fixed '(t width)) - ;; A fixed width window, try to restore the original size. - (let ((delta (- (cdr (assq 'total-width item)) - (window-total-width window))) - window-size-fixed) - (when (window-resizable-p window delta) - (window-resize window delta))) - ;; Else check whether the window is not wide enough. - (let* ((min-size (window-min-size window t ignore)) - (delta (- min-size (window-total-size window t)))) - (when (and (> delta 0) - (window-resizable-p window delta t ignore)) - (window-resize window delta t ignore)))) - ;; Set dedicated status. - (set-window-dedicated-p window (cdr (assq 'dedicated state))) - ;; Install positions (maybe we should do this after all windows - ;; have been created and sized). - (ignore-errors - (set-window-start window (cdr (assq 'start state))) - (set-window-point window (cdr (assq 'point state)))) - ;; Select window if it's the selected one. - (when (cdr (assq 'selected state)) - (select-window window))))))) + (push window window-state-put-stale-windows))))))) (defun window-state-put (state &optional window ignore) "Put window state STATE into WINDOW. From 3fa2054efdfa3c22456072254e6c67682a595233 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Sun, 15 Sep 2013 19:58:46 +0200 Subject: [PATCH 155/321] Port the font backend from the Mac port. * configure.ac: Add check for OSX 10.5, required for macfont.o. * etc/NEWS: Mention the macfont backend. * src/Makefile.in (NS_OBJ, SOME_MACHINE_OBJECTS): Add macfont.o. * src/font.c (syms_of_font): Call syms_of_macfont. * src/font.h: Declare syms_of_macfont. * src/nsfns.m: Include macfont.h. (Fx_create_frame): Register macfont driver, make a better default font. (Fns_popup_font_panel): Get font from macfont driver, if used. * src/nsfont.m (ns_tmp_flags, ns_tmp_font): Remove. (nsfont_open): Set font driver type. Set font->ascent and font->descent. Figure out font instead of ns_tmp_font, and flags instead of ns_tmp_flags. Fix indentation. Remove call to ns_draw_text_decoration, moved to nsterm. * src/nsterm.m: Include macfont.h. (ns_tmp_flags, ns_tmp_font): Remove. (ns_compute_glyph_string_overhangs): Check for driver Qns. (ns_draw_glyph_string): Use local variables instead of ns_tmp_flags, ns_tmp_font. Call ns_draw_text_decoration here instead of nsfont.m. (changeFont:): Fix code style. Check for font driver type when getiing font. * src/nsterm.h (FONT_DESCENT, FONT_ASCENT): Define to (f)->ascent and (f)->descent. --- ChangeLog | 4 +++ configure.ac | 34 +++++++++++++++++++++---- etc/ChangeLog | 4 +++ etc/NEWS | 5 ++++ src/ChangeLog | 32 ++++++++++++++++++++++++ src/Makefile.in | 4 +-- src/font.c | 1 + src/font.h | 1 + src/nsfns.m | 32 +++++++++++++++++++++--- src/nsfont.m | 35 +++++++++++++++----------- src/nsterm.h | 6 ++--- src/nsterm.m | 66 ++++++++++++++++++++++++++++++++++--------------- 12 files changed, 175 insertions(+), 49 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4fc4e065e92..c034a293004 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-09-15 Jan Djärv + + * configure.ac: Add check for OSX 10.5, required for macfont.o. + 2013-09-09 Glenn Morris * configure.ac (LDFLAGS_NOCOMBRELOC): New variable. diff --git a/configure.ac b/configure.ac index ab2e48b6f0f..86a5f300982 100644 --- a/configure.ac +++ b/configure.ac @@ -1623,7 +1623,10 @@ fail; [AC_MSG_ERROR([`--with-ns' was specified, but the include files are missing or cannot be compiled.])]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], + macfont_file="" + if test "${NS_IMPL_COCOA}" = "yes"; then + AC_MSG_CHECKING([for OSX 10.4 or newer]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [ #ifdef MAC_OS_X_VERSION_MAX_ALLOWED #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 @@ -1635,13 +1638,33 @@ fail; ])], ns_osx_have_104=yes, ns_osx_have_104=no) + AC_MSG_RESULT([$ns_osx_have_104]) + + if test $ns_osx_have_104 = no; then + AC_MSG_ERROR([`OSX 10.4 or newer is required']); + fi + AC_MSG_CHECKING([for OSX 10.5 or newer]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], + [ +#ifdef MAC_OS_X_VERSION_MAX_ALLOWED +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + ; /* OK */ +#else +#error "OSX 10.5 not found" +#endif +#endif + ])], + ns_osx_have_105=yes, + ns_osx_have_105=no) + AC_MSG_RESULT([$ns_osx_have_105]) + if test $ns_osx_have_105 = yes; then + macfont_file="macfont.o" + fi + fi AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [NSInteger i;])], ns_have_nsinteger=yes, ns_have_nsinteger=no) - if test $ns_osx_have_104 = no; then - AC_MSG_ERROR([`OSX 10.4 or newer is required']); - fi if test $ns_have_nsinteger = yes; then AC_DEFINE(NS_HAVE_NSINTEGER, 1, [Define to 1 if `NSInteger' is defined.]) fi @@ -1677,7 +1700,8 @@ if test "${HAVE_NS}" = yes; then leimdir="\${ns_appresdir}/leim" INSTALL_ARCH_INDEP_EXTRA= fi - NS_OBJC_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o" + + NS_OBJC_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o $macfont_file" fi CFLAGS="$tmp_CFLAGS" CPPFLAGS="$tmp_CPPFLAGS" diff --git a/etc/ChangeLog b/etc/ChangeLog index bd5534d9446..5483d824da4 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2013-09-15 Jan Djärv + + * NEWS: Mention the macfont backend. + 2013-09-09 Glenn Morris * refcards/Makefile (PS_ENGLISH, PS_CZECH, PS_FRENCH, PS_GERMAN) diff --git a/etc/NEWS b/etc/NEWS index a5da8eaa893..7558fc53052 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -54,6 +54,11 @@ and zlib-format compressed data. ** Emacs for NS (OSX, GNUStep) can be built with ImageMagick support. pkg-config is required to find ImageMagick libraries. +** For OSX >= 10.5, the Core text based font backend from the Mac port is used. +For GNUStep and OSX 10.4 the old backend is used. +To use the old backend by default, do on the command line: +% defaults write org.gnu.Emacs FontBackend ns + * Startup Changes in Emacs 24.4 diff --git a/src/ChangeLog b/src/ChangeLog index 5f28dc3d7df..e3b29c9b21d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,35 @@ +2013-09-15 Jan Djärv + + * nsterm.m: Include macfont.h. + (ns_tmp_flags, ns_tmp_font): Remove. + (ns_compute_glyph_string_overhangs): Check for driver Qns. + (ns_draw_glyph_string): Use local variables instead of ns_tmp_flags, + ns_tmp_font. Call ns_draw_text_decoration here instead of nsfont.m. + (changeFont:): Fix code style. Check for font driver type when + getiing font. + + * nsterm.h (FONT_DESCENT, FONT_ASCENT): Define to (f)->ascent and + (f)->descent. + + * nsfont.m (ns_tmp_flags, ns_tmp_font): Remove. + (nsfont_open): Set font driver type. + Set font->ascent and font->descent. Figure out font instead of + ns_tmp_font, and flags instead of ns_tmp_flags. + Fix indentation. Remove call to ns_draw_text_decoration, + moved to nsterm. + + * nsfns.m: Include macfont.h. + (Fx_create_frame): Register macfont driver, make a better default font. + (Fns_popup_font_panel): Get font from macfont driver, if used. + + * macfont.m, macfont.h, maccuvs.h: New files. + + * font.h: Declare syms_of_macfont. + + * font.c (syms_of_font): Call syms_of_macfont. + + * Makefile.in (NS_OBJ, SOME_MACHINE_OBJECTS): Add macfont.o. + 2013-09-15 Dmitry Antipov Drop VERTICAL_SCROLL_BAR_WIDTH_TRIM. For X, it is zero since 1999, diff --git a/src/Makefile.in b/src/Makefile.in index fe8d2d13ce0..254aa175d49 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -266,7 +266,7 @@ MSDOS_OBJ = MSDOS_X_OBJ = NS_OBJ=@NS_OBJ@ -## nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o if HAVE_NS. +## nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o macfont.o if HAVE_NS. NS_OBJC_OBJ=@NS_OBJC_OBJ@ ## Only set if NS_IMPL_GNUSTEP. GNU_OBJC_CFLAGS=@GNU_OBJC_CFLAGS@ @@ -388,7 +388,7 @@ obj = $(base_obj) $(NS_OBJC_OBJ) SOME_MACHINE_OBJECTS = dosfns.o msdos.o \ xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \ fontset.o dbusbind.o cygw32.o \ - nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o \ + nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o macfont.o \ w32.o w32console.o w32fns.o w32heap.o w32inevt.o w32notify.o \ w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o \ w16select.o widget.o xfont.o ftfont.o xftfont.o ftxfont.o gtkutil.o \ diff --git a/src/font.c b/src/font.c index fb64f2d9071..27f4f5dca91 100644 --- a/src/font.c +++ b/src/font.c @@ -5199,6 +5199,7 @@ EMACS_FONT_LOG is set. Otherwise, it is set to t. */); #endif /* HAVE_NTGUI */ #ifdef HAVE_NS syms_of_nsfont (); + syms_of_macfont (); #endif /* HAVE_NS */ #endif /* HAVE_WINDOW_SYSTEM */ } diff --git a/src/font.h b/src/font.h index 3e0d97baaac..0ec56590916 100644 --- a/src/font.h +++ b/src/font.h @@ -825,6 +825,7 @@ extern void syms_of_w32font (void); extern Lisp_Object Qfontsize; extern struct font_driver nsfont_driver; extern void syms_of_nsfont (void); +extern void syms_of_macfont (void); #endif /* HAVE_NS */ #ifndef FONT_DEBUG diff --git a/src/nsfns.m b/src/nsfns.m index 8eaf529ed04..1b4e6b7f57e 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -46,6 +46,9 @@ Updated by Christian Limpach (chris@nice.ch) #ifdef NS_IMPL_COCOA #include +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 +#include "macfont.h" +#endif #endif #if 0 @@ -1171,7 +1174,17 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side } block_input (); + +#ifdef NS_IMPL_GNUSTEP || \ + MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 register_font_driver (&nsfont_driver, f); +#else + if (CTGetCoreTextVersion != NULL + && CTGetCoreTextVersion () >= kCTVersionNumber10_5) + mac_register_font_driver (f); + register_font_driver (&nsfont_driver, f); +#endif + x_default_parameter (f, parms, Qfont_backend, Qnil, "fontBackend", "FontBackend", RES_TYPE_STRING); @@ -1181,8 +1194,13 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side x_default_parameter (f, parms, Qfontsize, make_number (0 /*(int)[font pointSize]*/), "fontSize", "FontSize", RES_TYPE_NUMBER); + // Remove ' Regular', not handled by backends. + char *fontname = xstrdup ([[font displayName] UTF8String]); + int len = strlen (fontname); + if (len > 8 && strcmp (fontname + len - 8, " Regular") == 0) + fontname[len-8] = '\0'; x_default_parameter (f, parms, Qfont, - build_string ([[font fontName] UTF8String]), + build_string (fontname), "font", "Font", RES_TYPE_STRING); } unblock_input (); @@ -1362,9 +1380,15 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side { struct frame *f = decode_window_system_frame (frame); id fm = [NSFontManager sharedFontManager]; - - [fm setSelectedFont: ((struct nsfont_info *)f->output_data.ns->font)->nsfont - isMultiple: NO]; + struct font *font = f->output_data.ns->font; + NSFont *nsfont; + if (EQ (font->driver->type, Qns)) + nsfont = ((struct nsfont_info *)font)->nsfont; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 + else + nsfont = (NSFont *) macfont_get_nsctfont (font); +#endif + [fm setSelectedFont: nsfont isMultiple: NO]; [fm orderFrontFontPanel: NSApp]; return Qnil; } diff --git a/src/nsfont.m b/src/nsfont.m index b61147d66c4..d9c8660f1cd 100644 --- a/src/nsfont.m +++ b/src/nsfont.m @@ -51,8 +51,6 @@ static Lisp_Object Qcondensed, Qexpanded; extern Lisp_Object Qappend; extern float ns_antialias_threshold; -extern int ns_tmp_flags; -extern struct nsfont_info *ns_tmp_font; /* font glyph and metrics caching functions, implemented at end */ @@ -798,6 +796,7 @@ when setting family in ns_spec_to_descriptor(). */ font_object = font_make_object (VECSIZE (struct nsfont_info), font_entity, pixel_size); + ASET (font_object, FONT_TYPE_INDEX, nsfont_driver.type); font_info = (struct nsfont_info *) XFONT_OBJECT (font_object); font = (struct font *) font_info; if (!font) @@ -871,10 +870,11 @@ when setting family in ns_spec_to_descriptor(). */ font_info->size = font->pixel_size; /* max bounds */ - font_info->max_bounds.ascent = lrint ([sfont ascender]); + font->ascent = font_info->max_bounds.ascent = lrint ([sfont ascender]); /* Descender is usually negative. Use floor to avoid clipping descenders. */ - font_info->max_bounds.descent = -lrint (floor(adjusted_descender)); + font->descent = + font_info->max_bounds.descent = -lrint (floor(adjusted_descender)); font_info->height = font_info->max_bounds.ascent + font_info->max_bounds.descent; font_info->max_bounds.width = lrint (font_info->width); @@ -1051,16 +1051,26 @@ is false when (FROM > 0 || TO < S->nchars). */ #endif struct face *face; NSRect r; - struct nsfont_info *font = ns_tmp_font; + struct nsfont_info *font; NSColor *col, *bgCol; unsigned short *t = s->char2b; - int i, len; + int i, len, flags; char isComposite = s->first_glyph->type == COMPOSITE_GLYPH; int end = isComposite ? s->cmp_to : s->nchars; block_input (); + + font = (struct nsfont_info *)s->face->font; + if (font == NULL) + font = (struct nsfont_info *)FRAME_FONT (s->f); + /* Select face based on input flags */ - switch (ns_tmp_flags) + flags = s->hl == DRAW_CURSOR ? NS_DUMPGLYPH_CURSOR : + (s->hl == DRAW_MOUSE_FACE ? NS_DUMPGLYPH_MOUSEFACE : + (s->for_overlaps ? NS_DUMPGLYPH_FOREGROUND : + NS_DUMPGLYPH_NORMAL)); + + switch (flags) { case NS_DUMPGLYPH_CURSOR: face = s->face; @@ -1188,8 +1198,8 @@ is false when (FROM > 0 || TO < S->nchars). */ col = (NS_FACE_FOREGROUND (face) != 0 ? ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f) : FRAME_FOREGROUND_COLOR (s->f)); - /* FIXME: find another way to pass this */ - bgCol = (ns_tmp_flags != NS_DUMPGLYPH_FOREGROUND ? nil + + bgCol = (flags != NS_DUMPGLYPH_FOREGROUND ? nil : (NS_FACE_BACKGROUND (face) != 0 ? ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) : FRAME_BACKGROUND_COLOR (s->f))); @@ -1264,22 +1274,19 @@ is false when (FROM > 0 || TO < S->nchars). */ CGContextSetTextPosition (gcontext, r.origin.x, r.origin.y); CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from, - advances, len); + advances, len); if (face->overstrike) { CGContextSetTextPosition (gcontext, r.origin.x+0.5, r.origin.y); CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from, - advances, len); + advances, len); } CGContextRestoreGState (gcontext); } #endif /* NS_IMPL_COCOA */ - /* Draw underline, overline, strike-through. */ - ns_draw_text_decoration (s, face, col, r.size.width, r.origin.x); - unblock_input (); return to-from; } diff --git a/src/nsterm.h b/src/nsterm.h index d8482cebbb0..1b5804b98b5 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -701,10 +701,8 @@ struct x_output #define FONT_WIDTH(f) ((f)->max_width) #define FONT_HEIGHT(f) ((f)->height) -/*#define FONT_BASE(f) ((f)->ascent) */ -#define FONT_BASE(f) (((struct nsfont_info *)f)->max_bounds.ascent) -/*#define FONT_DESCENT(f) ((f)->descent) */ -#define FONT_DESCENT(f) (((struct nsfont_info *)f)->max_bounds.descent) +#define FONT_BASE(f) ((f)->ascent) +#define FONT_DESCENT(f) ((f)->descent) #define FRAME_DEFAULT_FACE(f) FACE_FROM_ID (f, DEFAULT_FACE_ID) diff --git a/src/nsterm.m b/src/nsterm.m index 1dac6ba9fe4..2fc8a09c80f 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -64,6 +64,12 @@ Updated by Christian Limpach (chris@nice.ch) #include "process.h" #endif +#ifdef NS_IMPL_COCOA +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 +#include "macfont.h" +#endif +#endif + /* call tracing */ #if 0 int term_trace_num = 0; @@ -198,8 +204,6 @@ Updated by Christian Limpach (chris@nice.ch) #endif static BOOL gsaved = NO; static BOOL ns_fake_keydown = NO; -int ns_tmp_flags; /* FIXME */ -struct nsfont_info *ns_tmp_font; /* FIXME */ #ifdef NS_IMPL_COCOA static BOOL ns_menu_bar_is_hidden = NO; #endif @@ -2158,8 +2162,11 @@ Free a pool and temporary objects it refers to (callable from C) else { s->left_overhang = 0; - s->right_overhang = ((struct nsfont_info *)font)->ital ? - FONT_HEIGHT (font) * 0.2 : 0; + if (EQ (font->driver->type, Qns)) + s->right_overhang = ((struct nsfont_info *)font)->ital ? + FONT_HEIGHT (font) * 0.2 : 0; + else + s->right_overhang = 0; } } @@ -3133,8 +3140,10 @@ overwriting cursor (usually when cursor on a tab) */ { /* TODO (optimize): focus for box and contents draw */ NSRect r[2]; - int n; + int n, flags; char box_drawn_p = 0; + struct font *font = s->face->font; + if (! font) font = FRAME_FONT (s->f); NSTRACE (ns_draw_glyph_string); @@ -3201,13 +3210,10 @@ overwriting cursor (usually when cursor on a tab) */ ns_maybe_dumpglyphs_background (s, s->first_glyph->type == COMPOSITE_GLYPH); - ns_tmp_flags = s->hl == DRAW_CURSOR ? NS_DUMPGLYPH_CURSOR : - (s->hl == DRAW_MOUSE_FACE ? NS_DUMPGLYPH_MOUSEFACE : - (s->for_overlaps ? NS_DUMPGLYPH_FOREGROUND : - NS_DUMPGLYPH_NORMAL)); - ns_tmp_font = (struct nsfont_info *)s->face->font; - if (ns_tmp_font == NULL) - ns_tmp_font = (struct nsfont_info *)FRAME_FONT (s->f); + flags = s->hl == DRAW_CURSOR ? NS_DUMPGLYPH_CURSOR : + (s->hl == DRAW_MOUSE_FACE ? NS_DUMPGLYPH_MOUSEFACE : + (s->for_overlaps ? NS_DUMPGLYPH_FOREGROUND : + NS_DUMPGLYPH_NORMAL)); if (s->hl == DRAW_CURSOR && s->w->phys_cursor_type == FILLED_BOX_CURSOR) { @@ -3216,10 +3222,21 @@ overwriting cursor (usually when cursor on a tab) */ NS_FACE_FOREGROUND (s->face) = tmp; } - ns_tmp_font->font.driver->draw + font->driver->draw (s, 0, s->nchars, s->x, s->y, - (ns_tmp_flags == NS_DUMPGLYPH_NORMAL && !s->background_filled_p) - || ns_tmp_flags == NS_DUMPGLYPH_MOUSEFACE); + (flags == NS_DUMPGLYPH_NORMAL && !s->background_filled_p) + || flags == NS_DUMPGLYPH_MOUSEFACE); + + { + NSColor *col = (NS_FACE_FOREGROUND (s->face) != 0 + ? ns_lookup_indexed_color (NS_FACE_FOREGROUND (s->face), + s->f) + : FRAME_FOREGROUND_COLOR (s->f)); + [col set]; + + /* Draw underline, overline, strike-through. */ + ns_draw_text_decoration (s, s->face, col, s->width, s->x); + } if (s->hl == DRAW_CURSOR && s->w->phys_cursor_type == FILLED_BOX_CURSOR) { @@ -3959,7 +3976,7 @@ static Lisp_Object ns_string_to_lispmod (const char *s) 0, /* define_fringe_bitmap */ /* FIXME: simplify ns_draw_fringe_bitmap */ 0, /* destroy_fringe_bitmap */ ns_compute_glyph_string_overhangs, - ns_draw_glyph_string, /* interface to nsfont.m */ + ns_draw_glyph_string, ns_define_frame_cursor, ns_clear_frame_area, ns_draw_window_cursor, @@ -4809,17 +4826,26 @@ - (void)dealloc /* called on font panel selection */ - (void)changeFont: (id)sender { - NSEvent *e =[[self window] currentEvent]; - struct face *face =FRAME_DEFAULT_FACE (emacsframe); + NSEvent *e = [[self window] currentEvent]; + struct face *face = FRAME_DEFAULT_FACE (emacsframe); + struct font *font = face->font; id newFont; CGFloat size; + NSFont *nsfont; NSTRACE (changeFont); + if (!emacs_event) return; - if ((newFont = [sender convertFont: - ((struct nsfont_info *)face->font)->nsfont])) + if (EQ (font->driver->type, Qns)) + nsfont = ((struct nsfont_info *)font)->nsfont; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 + else + nsfont = (NSFont *) macfont_get_nsctfont (font); +#endif + + if ((newFont = [sender convertFont: nsfont])) { SET_FRAME_GARBAGED (emacsframe); /* now needed as of 2008/10 */ From d93ab42eb9ee55bccc1c014ee846f8e2bc555020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Sun, 15 Sep 2013 21:36:20 +0200 Subject: [PATCH 156/321] Forgot to add files. --- src/macfont.h | 144 + src/macfont.m | 3858 +++++++++++++++++++++ src/macuvs.h | 9215 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 13217 insertions(+) create mode 100644 src/macfont.h create mode 100644 src/macfont.m create mode 100644 src/macuvs.h diff --git a/src/macfont.h b/src/macfont.h new file mode 100644 index 00000000000..141d60bfb0a --- /dev/null +++ b/src/macfont.h @@ -0,0 +1,144 @@ +/* Interface definition for Mac OSX Core text font backend. + Copyright (C) 2009-2013 Free Software Foundation, Inc. + +This file is part of GNU Emacs. + +GNU Emacs is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +GNU Emacs is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Emacs. If not, see . + +Original author: YAMAMOTO Mitsuharu +*/ + +/* Structure used by Mac `shape' functions for storing layout + information for each glyph. */ +struct mac_glyph_layout +{ + /* Range of indices of the characters composed into the group of + glyphs that share the cursor position with this glyph. The + members `location' and `length' are in UTF-16 indices. */ + CFRange comp_range; + + /* UTF-16 index in the source string for the first character + associated with this glyph. */ + CFIndex string_index; + + /* Horizontal and vertical adjustments of glyph position. The + coordinate space is that of Core Text. So, the `baseline_delta' + value is negative if the glyph should be placed below the + baseline. */ + CGFloat advance_delta, baseline_delta; + + /* Typographical width of the glyph. */ + CGFloat advance; + + /* Glyph ID of the glyph. */ + CGGlyph glyph_id; +}; + +typedef CTFontDescriptorRef FontDescriptorRef; +typedef CTFontRef FontRef; +typedef CTFontSymbolicTraits FontSymbolicTraits; +typedef CTCharacterCollection CharacterCollection; + +#define MAC_FONT_NAME_ATTRIBUTE kCTFontNameAttribute +#define MAC_FONT_FAMILY_NAME_ATTRIBUTE kCTFontFamilyNameAttribute +#define MAC_FONT_TRAITS_ATTRIBUTE kCTFontTraitsAttribute +#define MAC_FONT_SIZE_ATTRIBUTE kCTFontSizeAttribute +#define MAC_FONT_CASCADE_LIST_ATTRIBUTE kCTFontCascadeListAttribute +#define MAC_FONT_CHARACTER_SET_ATTRIBUTE kCTFontCharacterSetAttribute +#define MAC_FONT_LANGUAGES_ATTRIBUTE kCTFontLanguagesAttribute +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 +#define MAC_FONT_FORMAT_ATTRIBUTE kCTFontFormatAttribute +#else +#define MAC_FONT_FORMAT_ATTRIBUTE (CFSTR ("NSCTFontFormatAttribute")) +#endif +#define MAC_FONT_SYMBOLIC_TRAIT kCTFontSymbolicTrait +#define MAC_FONT_WEIGHT_TRAIT kCTFontWeightTrait +#define MAC_FONT_WIDTH_TRAIT kCTFontWidthTrait +#define MAC_FONT_SLANT_TRAIT kCTFontSlantTrait + +enum { + MAC_FONT_TRAIT_ITALIC = kCTFontItalicTrait, + MAC_FONT_TRAIT_BOLD = kCTFontBoldTrait, + MAC_FONT_TRAIT_MONO_SPACE = kCTFontMonoSpaceTrait, +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 + MAC_FONT_TRAIT_COLOR_GLYPHS = kCTFontColorGlyphsTrait +#else + MAC_FONT_TRAIT_COLOR_GLYPHS = (1 << 13) +#endif +}; + +enum { +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 + MAC_FONT_FORMAT_BITMAP = kCTFontFormatBitmap +#else + MAC_FONT_FORMAT_BITMAP = 5 +#endif +}; + +enum { + MAC_CHARACTER_COLLECTION_IDENTITY_MAPPING = kCTIdentityMappingCharacterCollection, + MAC_CHARACTER_COLLECTION_ADOBE_JAPAN1 = kCTAdobeJapan1CharacterCollection +}; + +#define mac_font_descriptor_create_with_attributes \ + CTFontDescriptorCreateWithAttributes +#define mac_font_descriptor_create_matching_font_descriptors \ + CTFontDescriptorCreateMatchingFontDescriptors +#define mac_font_descriptor_create_matching_font_descriptor \ + CTFontDescriptorCreateMatchingFontDescriptor +#define mac_font_descriptor_copy_attribute CTFontDescriptorCopyAttribute +#define mac_font_descriptor_supports_languages \ + mac_ctfont_descriptor_supports_languages +#define mac_font_create_with_name(name, size) \ + CTFontCreateWithName (name, size, NULL) +#define mac_font_get_size CTFontGetSize +#define mac_font_copy_family_name CTFontCopyFamilyName +#define mac_font_copy_character_set CTFontCopyCharacterSet +#define mac_font_get_glyphs_for_characters CTFontGetGlyphsForCharacters +#define mac_font_get_ascent CTFontGetAscent +#define mac_font_get_descent CTFontGetDescent +#define mac_font_get_leading CTFontGetLeading +#define mac_font_get_underline_position CTFontGetUnderlinePosition +#define mac_font_get_underline_thickness CTFontGetUnderlineThickness +#define mac_font_copy_graphics_font(font) CTFontCopyGraphicsFont (font, NULL) +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 +#define mac_font_copy_non_synthetic_table(font, table) \ + CTFontCopyTable (font, table, kCTFontTableOptionNoOptions) +#else +#define mac_font_copy_non_synthetic_table(font, table) \ + CTFontCopyTable (font, table, kCTFontTableOptionExcludeSynthetic) +#endif + +#define mac_font_create_preferred_family_for_attributes \ + mac_ctfont_create_preferred_family_for_attributes +#define mac_font_get_advance_width_for_glyph \ + mac_ctfont_get_advance_width_for_glyph +#define mac_font_get_bounding_rect_for_glyph \ + mac_ctfont_get_bounding_rect_for_glyph +#define mac_font_create_available_families mac_ctfont_create_available_families +#define mac_font_shape mac_ctfont_shape +#if USE_CT_GLYPH_INFO +#define mac_font_get_glyph_for_cid mac_ctfont_get_glyph_for_cid +#endif + +#define mac_nsctfont_copy_font_descriptor CTFontCopyFontDescriptor + +#define MAC_FONT_CHARACTER_SET_STRING_ATTRIBUTE \ + (CFSTR ("MAC_FONT_CHARACTER_SET_STRING_ATTRIBUTE")) + +typedef const struct _EmacsScreenFont *ScreenFontRef; /* opaque */ + +extern void mac_register_font_driver (struct frame *f); +extern void *macfont_get_nsctfont (struct font *font); + diff --git a/src/macfont.m b/src/macfont.m new file mode 100644 index 00000000000..2a6d219d059 --- /dev/null +++ b/src/macfont.m @@ -0,0 +1,3858 @@ +/* Font driver on Mac OSX Core text. + Copyright (C) 2009-2013 Free Software Foundation, Inc. + +This file is part of GNU Emacs. + +GNU Emacs is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +GNU Emacs is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Emacs. If not, see . + +Original author: YAMAMOTO Mitsuharu +*/ + +#include + +#include "lisp.h" +#include "dispextern.h" +#include "frame.h" +#include "blockinput.h" +#include "character.h" +#include "charset.h" +#include "composite.h" +#include "fontset.h" +#include "font.h" +#include "nsgui.h" +#include "nsterm.h" +#include "macfont.h" +#include "macuvs.h" + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + +#include + +static struct font_driver macfont_driver; + +/* Core Text, for Mac OS X 10.5 and later. */ +static Lisp_Object Qmac_ct; + +static double mac_ctfont_get_advance_width_for_glyph (CTFontRef, CGGlyph); +static CGRect mac_ctfont_get_bounding_rect_for_glyph (CTFontRef, CGGlyph); +static CFArrayRef mac_ctfont_create_available_families (void); +static Boolean mac_ctfont_equal_in_postscript_name (CTFontRef, CTFontRef); +static CTLineRef mac_ctfont_create_line_with_string_and_font (CFStringRef, + CTFontRef); +static CFComparisonResult mac_font_family_compare (const void *, + const void *, void *); +static Boolean mac_ctfont_descriptor_supports_languages (CTFontDescriptorRef, + CFArrayRef); +static CFStringRef mac_ctfont_create_preferred_family_for_attributes (CFDictionaryRef); +static CFIndex mac_ctfont_shape (CTFontRef, CFStringRef, + struct mac_glyph_layout *, CFIndex); +#if USE_CT_GLYPH_INFO +static CGGlyph mac_ctfont_get_glyph_for_cid (CTFontRef, + CTCharacterCollection, + CGFontIndex); +#endif + +/* The font property key specifying the font design destination. The + value is an unsigned integer code: 0 for WYSIWIG, and 1 for Video + text. (See the documentation of X Logical Font Description + Conventions.) In the Mac font driver, 1 means the screen font is + used for calculating some glyph metrics. You can see the + difference with Monaco 8pt or 9pt, for example. */ +static Lisp_Object QCdestination; + +/* The boolean-valued font property key specifying the use of + leading. */ +static Lisp_Object QCminspace; + +struct macfont_metrics; + +/* The actual structure for Mac font that can be casted to struct font. */ + +struct macfont_info +{ + struct font font; + FontRef macfont; + CGFontRef cgfont; + ScreenFontRef screen_font; + struct macfont_cache *cache; + struct macfont_metrics **metrics; + short metrics_nrows; + unsigned synthetic_italic_p : 1; + unsigned synthetic_bold_p : 1; + unsigned spacing : 2; + unsigned antialias : 2; + unsigned color_bitmap_p : 1; +}; + +/* Values for the `spacing' member in `struct macfont_info'. */ + +enum + { + MACFONT_SPACING_PROPORTIONAL, + MACFONT_SPACING_MONO, + MACFONT_SPACING_SYNTHETIC_MONO, + }; + +/* Values for the `antialias' member in `struct macfont_info'. */ + +enum + { + MACFONT_ANTIALIAS_DEFAULT, + MACFONT_ANTIALIAS_OFF, + MACFONT_ANTIALIAS_ON, + }; + +enum {FONT_SLANT_SYNTHETIC_ITALIC = 200}; /* FC_SLANT_ITALIC + 100 */ +enum {FONT_WEIGHT_SYNTHETIC_BOLD = 200}; /* FC_WEIGHT_BOLD */ +enum {FONT_SPACING_SYNTHETIC_MONO = FONT_SPACING_MONO}; + +static const CGAffineTransform synthetic_italic_atfm = {1, 0, 0.25, 1, 0, 0}; +static const CGFloat synthetic_bold_factor = 0.024; + +static Boolean cfnumber_get_font_symbolic_traits_value (CFNumberRef, + FontSymbolicTraits *); +static void macfont_store_descriptor_attributes (FontDescriptorRef, + Lisp_Object); +static Lisp_Object macfont_descriptor_entity (FontDescriptorRef, + Lisp_Object, + FontSymbolicTraits); +static CFStringRef macfont_create_family_with_symbol (Lisp_Object); +static int macfont_glyph_extents (struct font *, CGGlyph, + struct font_metrics *, CGFloat *, int); +static CFMutableDictionaryRef macfont_create_attributes_with_spec (Lisp_Object); +static Boolean macfont_supports_charset_and_languages_p (FontDescriptorRef, + CFCharacterSetRef, + Lisp_Object, + CFArrayRef); +static CFIndex macfont_closest_traits_index (CFArrayRef, + FontSymbolicTraits); +static CFDataRef mac_font_copy_uvs_table (FontRef); +static void mac_font_get_glyphs_for_variants (CFDataRef, UTF32Char, + const UTF32Char [], + CGGlyph [], CFIndex); + +/* From CFData to a lisp string. Always returns a unibyte string. */ + +static Lisp_Object +cfdata_to_lisp (CFDataRef data) +{ + CFIndex len = CFDataGetLength (data); + Lisp_Object result = make_uninit_string (len); + + CFDataGetBytes (data, CFRangeMake (0, len), SDATA (result)); + + return result; +} + + + +/* From CFString to a lisp string. Returns a unibyte string + containing a UTF-8 byte sequence. */ + +static Lisp_Object +cfstring_to_lisp_nodecode (CFStringRef string) +{ + Lisp_Object result = Qnil; + CFDataRef data; + const char *s = CFStringGetCStringPtr (string, kCFStringEncodingUTF8); + + if (s) + { + CFIndex i, length = CFStringGetLength (string); + + for (i = 0; i < length; i++) + if (CFStringGetCharacterAtIndex (string, i) == 0) + break; + + if (i == length) + return make_unibyte_string (s, strlen (s)); + } + + data = CFStringCreateExternalRepresentation (NULL, string, + kCFStringEncodingUTF8, '?'); + if (data) + { + result = cfdata_to_lisp (data); + CFRelease (data); + } + + return result; +} + +/* Lisp string containing a UTF-8 byte sequence to CFString. Unlike + cfstring_create_with_utf8_cstring, this function preserves NUL + characters. */ + +static CFStringRef +cfstring_create_with_string_noencode (Lisp_Object s) +{ + CFStringRef string = CFStringCreateWithBytes (NULL, SDATA (s), SBYTES (s), + kCFStringEncodingUTF8, false); + + if (string == NULL) + /* Failed to interpret as UTF 8. Fall back on Mac Roman. */ + string = CFStringCreateWithBytes (NULL, SDATA (s), SBYTES (s), + kCFStringEncodingMacRoman, false); + + return string; +} + +static CGFloat +mac_screen_font_get_advance_width_for_glyph (ScreenFontRef font, CGGlyph glyph) +{ + NSSize advancement = [(NSFont *)font advancementForGlyph:glyph]; + + return advancement.width; +} + +static CGGlyph +mac_font_get_glyph_for_cid (FontRef font, CharacterCollection collection, + CGFontIndex cid) +{ +#if USE_CT_GLYPH_INFO + return mac_ctfont_get_glyph_for_cid ((CTFontRef) font, collection, cid); +#else + { + CGGlyph result = kCGFontIndexInvalid; + NSFont *nsFont = (NSFont *) font; + unichar characters[] = {0xfffd}; + NSString *string = + [NSString stringWithCharacters:characters + length:(sizeof (characters) + / sizeof (characters[0]))]; + NSGlyphInfo *glyphInfo = + [NSGlyphInfo glyphInfoWithCharacterIdentifier:cid + collection:collection + baseString:string]; + NSDictionary *attributes = + [NSDictionary dictionaryWithObjectsAndKeys:nsFont,NSFontAttributeName, + glyphInfo,NSGlyphInfoAttributeName,nil]; + NSTextStorage *textStorage = + [[NSTextStorage alloc] initWithString:string + attributes:attributes]; + NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init]; + NSTextContainer *textContainer = [[NSTextContainer alloc] init]; + NSFont *fontInTextStorage; + + [layoutManager addTextContainer:textContainer]; + [textContainer release]; + [textStorage addLayoutManager:layoutManager]; + [layoutManager release]; + + /* Force layout. */ + (void) [layoutManager glyphRangeForTextContainer:textContainer]; + + fontInTextStorage = [textStorage attribute:NSFontAttributeName atIndex:0 + effectiveRange:NULL]; + if (fontInTextStorage == nsFont + || [[fontInTextStorage fontName] isEqualToString:[nsFont fontName]]) + { + NSGlyph glyph = [layoutManager glyphAtIndex:0]; + + if (glyph < [nsFont numberOfGlyphs]) + result = glyph; + } + + [textStorage release]; + + return result; + } +} +#endif + +static ScreenFontRef +mac_screen_font_create_with_name (CFStringRef name, CGFloat size) +{ + NSFont *result, *font; + + font = [NSFont fontWithName:((NSString *) name) size:size]; + result = [font screenFont]; + + return (ScreenFontRef)[result retain]; +} + + +static Boolean +mac_screen_font_get_metrics (ScreenFontRef font, CGFloat *ascent, + CGFloat *descent, CGFloat *leading) +{ + NSFont *nsFont = [(NSFont *)font printerFont]; + NSTextStorage *textStorage; + NSLayoutManager *layoutManager; + NSTextContainer *textContainer; + NSRect usedRect; + NSPoint spaceLocation; + CGFloat descender; + + textStorage = [[NSTextStorage alloc] initWithString:@" "]; + layoutManager = [[NSLayoutManager alloc] init]; + textContainer = [[NSTextContainer alloc] init]; + + [textStorage setFont:nsFont]; + [textContainer setLineFragmentPadding:0]; + [layoutManager setUsesScreenFonts:YES]; + + [layoutManager addTextContainer:textContainer]; + [textContainer release]; + [textStorage addLayoutManager:layoutManager]; + [layoutManager release]; + + if (!(textStorage && layoutManager && textContainer)) + { + [textStorage release]; + + return false; + } + + usedRect = [layoutManager lineFragmentUsedRectForGlyphAtIndex:0 + effectiveRange:NULL]; + spaceLocation = [layoutManager locationForGlyphAtIndex:0]; + [textStorage release]; + + *ascent = spaceLocation.y; + *descent = NSHeight (usedRect) - spaceLocation.y; + *leading = 0; + descender = [nsFont descender]; + if (- descender < *descent) + { + *leading = *descent + descender; + *descent = - descender; + } + + return true; +} + +static CFIndex +mac_font_shape_1 (NSFont *font, NSString *string, + struct mac_glyph_layout *glyph_layouts, CFIndex glyph_len, + BOOL screen_font_p) +{ + NSUInteger i; + CFIndex result = 0; + NSTextStorage *textStorage; + NSLayoutManager *layoutManager; + NSTextContainer *textContainer; + NSUInteger stringLength; + NSPoint spaceLocation; + NSUInteger used, numberOfGlyphs; + + textStorage = [[NSTextStorage alloc] initWithString:string]; + layoutManager = [[NSLayoutManager alloc] init]; + textContainer = [[NSTextContainer alloc] init]; + + /* Append a trailing space to measure baseline position. */ + [textStorage appendAttributedString:([[[NSAttributedString alloc] + initWithString:@" "] autorelease])]; + [textStorage setFont:font]; + [textContainer setLineFragmentPadding:0]; + [layoutManager setUsesScreenFonts:screen_font_p]; + + [layoutManager addTextContainer:textContainer]; + [textContainer release]; + [textStorage addLayoutManager:layoutManager]; + [layoutManager release]; + + if (!(textStorage && layoutManager && textContainer)) + { + [textStorage release]; + + return 0; + } + + stringLength = [string length]; + + /* Force layout. */ + (void) [layoutManager glyphRangeForTextContainer:textContainer]; + + spaceLocation = [layoutManager locationForGlyphAtIndex:stringLength]; + + /* Remove the appended trailing space because otherwise it may + generate a wrong result for a right-to-left text. */ + [textStorage beginEditing]; + [textStorage deleteCharactersInRange:(NSMakeRange (stringLength, 1))]; + [textStorage endEditing]; + (void) [layoutManager glyphRangeForTextContainer:textContainer]; + + i = 0; + while (i < stringLength) + { + NSRange range; + NSFont *fontInTextStorage = + [textStorage attribute:NSFontAttributeName atIndex:i + longestEffectiveRange:&range + inRange:(NSMakeRange (0, stringLength))]; + + if (!(fontInTextStorage == font + || [[fontInTextStorage fontName] isEqualToString:[font fontName]])) + break; + i = NSMaxRange (range); + } + if (i < stringLength) + /* Make the test `used <= glyph_len' below fail if textStorage + contained some fonts other than the specified one. */ + used = glyph_len + 1; + else + { + NSRange range = NSMakeRange (0, stringLength); + + range = [layoutManager glyphRangeForCharacterRange:range + actualCharacterRange:NULL]; + numberOfGlyphs = NSMaxRange (range); + used = numberOfGlyphs; + for (i = 0; i < numberOfGlyphs; i++) + if ([layoutManager notShownAttributeForGlyphAtIndex:i]) + used--; + } + + if (0 < used && used <= glyph_len) + { + NSUInteger glyphIndex, prevGlyphIndex; + unsigned char bidiLevel; + NSUInteger *permutation; + NSRange compRange, range; + CGFloat totalAdvance; + + glyphIndex = 0; + while ([layoutManager notShownAttributeForGlyphAtIndex:glyphIndex]) + glyphIndex++; + + /* For now we assume the direction is not changed within the + string. */ + [layoutManager getGlyphsInRange:(NSMakeRange (glyphIndex, 1)) + glyphs:NULL characterIndexes:NULL + glyphInscriptions:NULL elasticBits:NULL + bidiLevels:&bidiLevel]; + if (bidiLevel & 1) + permutation = xmalloc (sizeof (NSUInteger) * used); + else + permutation = NULL; + +#define RIGHT_TO_LEFT_P permutation + + /* Fill the `comp_range' member of struct mac_glyph_layout, and + setup a permutation for right-to-left text. */ + compRange = NSMakeRange (0, 0); + for (range = NSMakeRange (0, 0); NSMaxRange (range) < used; + range.length++) + { + struct mac_glyph_layout *gl = glyph_layouts + NSMaxRange (range); + NSUInteger characterIndex = + [layoutManager characterIndexForGlyphAtIndex:glyphIndex]; + + gl->string_index = characterIndex; + + if (characterIndex >= NSMaxRange (compRange)) + { + compRange.location = NSMaxRange (compRange); + do + { + NSRange characterRange = + [string + rangeOfComposedCharacterSequenceAtIndex:characterIndex]; + + compRange.length = + NSMaxRange (characterRange) - compRange.location; + [layoutManager glyphRangeForCharacterRange:compRange + actualCharacterRange:&characterRange]; + characterIndex = NSMaxRange (characterRange) - 1; + } + while (characterIndex >= NSMaxRange (compRange)); + + if (RIGHT_TO_LEFT_P) + for (i = 0; i < range.length; i++) + permutation[range.location + i] = NSMaxRange (range) - i - 1; + + range = NSMakeRange (NSMaxRange (range), 0); + } + + gl->comp_range.location = compRange.location; + gl->comp_range.length = compRange.length; + + while (++glyphIndex < numberOfGlyphs) + if (![layoutManager notShownAttributeForGlyphAtIndex:glyphIndex]) + break; + } + if (RIGHT_TO_LEFT_P) + for (i = 0; i < range.length; i++) + permutation[range.location + i] = NSMaxRange (range) - i - 1; + + /* Then fill the remaining members. */ + glyphIndex = prevGlyphIndex = 0; + while ([layoutManager notShownAttributeForGlyphAtIndex:glyphIndex]) + glyphIndex++; + + if (!RIGHT_TO_LEFT_P) + totalAdvance = 0; + else + { + NSUInteger nrects; + NSRect *glyphRects = + [layoutManager + rectArrayForGlyphRange:(NSMakeRange (0, numberOfGlyphs)) + withinSelectedGlyphRange:(NSMakeRange (NSNotFound, 0)) + inTextContainer:textContainer rectCount:&nrects]; + + totalAdvance = NSMaxX (glyphRects[0]); + } + + for (i = 0; i < used; i++) + { + struct mac_glyph_layout *gl; + NSPoint location; + NSUInteger nextGlyphIndex; + NSRange glyphRange; + NSRect *glyphRects; + NSUInteger nrects; + + if (!RIGHT_TO_LEFT_P) + gl = glyph_layouts + i; + else + { + NSUInteger dest = permutation[i]; + + gl = glyph_layouts + dest; + if (i < dest) + { + CFIndex tmp = gl->string_index; + + gl->string_index = glyph_layouts[i].string_index; + glyph_layouts[i].string_index = tmp; + } + } + gl->glyph_id = [layoutManager glyphAtIndex:glyphIndex]; + + location = [layoutManager locationForGlyphAtIndex:glyphIndex]; + gl->baseline_delta = spaceLocation.y - location.y; + + for (nextGlyphIndex = glyphIndex + 1; nextGlyphIndex < numberOfGlyphs; + nextGlyphIndex++) + if (![layoutManager + notShownAttributeForGlyphAtIndex:nextGlyphIndex]) + break; + + if (!RIGHT_TO_LEFT_P) + { + CGFloat maxX; + + if (prevGlyphIndex == 0) + glyphRange = NSMakeRange (0, nextGlyphIndex); + else + glyphRange = NSMakeRange (glyphIndex, + nextGlyphIndex - glyphIndex); + glyphRects = + [layoutManager + rectArrayForGlyphRange:glyphRange + withinSelectedGlyphRange:(NSMakeRange (NSNotFound, 0)) + inTextContainer:textContainer rectCount:&nrects]; + maxX = max (NSMaxX (glyphRects[0]), totalAdvance); + gl->advance_delta = location.x - totalAdvance; + gl->advance = maxX - totalAdvance; + totalAdvance = maxX; + } + else + { + CGFloat minX; + + if (nextGlyphIndex == numberOfGlyphs) + glyphRange = NSMakeRange (prevGlyphIndex, + numberOfGlyphs - prevGlyphIndex); + else + glyphRange = NSMakeRange (prevGlyphIndex, + glyphIndex + 1 - prevGlyphIndex); + glyphRects = + [layoutManager + rectArrayForGlyphRange:glyphRange + withinSelectedGlyphRange:(NSMakeRange (NSNotFound, 0)) + inTextContainer:textContainer rectCount:&nrects]; + minX = min (NSMinX (glyphRects[0]), totalAdvance); + gl->advance = totalAdvance - minX; + totalAdvance = minX; + gl->advance_delta = location.x - totalAdvance; + } + + prevGlyphIndex = glyphIndex + 1; + glyphIndex = nextGlyphIndex; + } + + if (RIGHT_TO_LEFT_P) + xfree (permutation); + +#undef RIGHT_TO_LEFT_P + + result = used; + } + [textStorage release]; + + return result; +} + +static CFIndex +mac_screen_font_shape (ScreenFontRef font, CFStringRef string, + struct mac_glyph_layout *glyph_layouts, + CFIndex glyph_len) +{ + return mac_font_shape_1 ([(NSFont *)font printerFont], + (NSString *) string, + glyph_layouts, glyph_len, YES); +} + +static CGColorRef +get_cgcolor(unsigned long idx, struct frame *f) +{ + NSColor *nsColor = ns_lookup_indexed_color (idx, f); + [nsColor set]; + CGColorSpaceRef colorSpace = [[nsColor colorSpace] CGColorSpace]; + NSInteger noc = [nsColor numberOfComponents]; + CGFloat *components = xmalloc (sizeof(CGFloat)*(1+noc)); + CGColorRef cgColor; + + [nsColor getComponents: components]; + cgColor = CGColorCreate (colorSpace, components); + xfree (components); + return cgColor; +} + +#define CG_SET_FILL_COLOR_WITH_GC_FOREGROUND(context, s) \ + CGContextSetFillColorWithColor (context, \ + get_cgcolor (NS_FACE_FOREGROUND (s->face), \ + s->f)) + +#define CG_SET_FILL_COLOR_WITH_GC_BACKGROUND(context, s) \ + CGContextSetFillColorWithColor (context, \ + get_cgcolor (NS_FACE_BACKGROUND (s->face), \ + s->f)) + +#define CG_SET_STROKE_COLOR_WITH_GC_FOREGROUND(context, s) \ + CGContextSetStrokeColorWithColor (context, \ + get_cgcolor (NS_FACE_FOREGROUND (s->face),\ + s->f)) + + +/* Mac font driver. */ + +static struct +{ + /* registry name */ + const char *name; + /* characters to distinguish the charset from the others */ + int uniquifier[6]; + /* additional constraint by language */ + CFStringRef lang; + /* set on demand */ + CFCharacterSetRef cf_charset; + CFStringRef cf_charset_string; +} cf_charset_table[] = + { { "iso8859-1", { 0x00A0, 0x00A1, 0x00B4, 0x00BC, 0x00D0 } }, + { "iso8859-2", { 0x00A0, 0x010E }}, + { "iso8859-3", { 0x00A0, 0x0108 }}, + { "iso8859-4", { 0x00A0, 0x00AF, 0x0128, 0x0156, 0x02C7 }}, + { "iso8859-5", { 0x00A0, 0x0401 }}, + { "iso8859-6", { 0x00A0, 0x060C }}, + { "iso8859-7", { 0x00A0, 0x0384 }}, + { "iso8859-8", { 0x00A0, 0x05D0 }}, + { "iso8859-9", { 0x00A0, 0x00A1, 0x00BC, 0x011E }}, + { "iso8859-10", { 0x00A0, 0x00D0, 0x0128, 0x2015 }}, + { "iso8859-11", { 0x00A0, 0x0E01 }}, + { "iso8859-13", { 0x00A0, 0x201C }}, + { "iso8859-14", { 0x00A0, 0x0174 }}, + { "iso8859-15", { 0x00A0, 0x00A1, 0x00D0, 0x0152 }}, + { "iso8859-16", { 0x00A0, 0x0218}}, + { "gb2312.1980-0", { 0x4E13 }, CFSTR ("zh-Hans")}, + { "big5-0", { /* 0xF6B1 in ftfont.c */ 0xF7E5 }, CFSTR ("zh-Hant") }, + { "jisx0208.1983-0", { 0x4E55 }, CFSTR ("ja")}, + { "ksc5601.1987-0", { 0xAC00 }, CFSTR ("ko")}, + { "cns11643.1992-1", { 0xFE32 }, CFSTR ("zh-Hant")}, + { "cns11643.1992-2", { 0x4E33, 0x7934 }}, + { "cns11643.1992-3", { 0x201A9 }}, + { "cns11643.1992-4", { 0x20057 }}, + { "cns11643.1992-5", { 0x20000 }}, + { "cns11643.1992-6", { 0x20003 }}, + { "cns11643.1992-7", { 0x20055 }}, + { "gbk-0", { 0x4E06 }, CFSTR ("zh-Hans")}, + { "jisx0212.1990-0", { 0x4E44 }}, + { "jisx0213.2000-1", { 0xFA10 }, CFSTR ("ja")}, + { "jisx0213.2000-2", { 0xFA49 }}, + { "jisx0213.2004-1", { 0x20B9F }}, + { "viscii1.1-1", { 0x1EA0, 0x1EAE, 0x1ED2 }, CFSTR ("vi")}, + { "tis620.2529-1", { 0x0E01 }, CFSTR ("th")}, + { "windows-1251", { 0x0401, 0x0490 }, CFSTR ("ru")}, + { "koi8-r", { 0x0401, 0x2219 }, CFSTR ("ru")}, + { "mulelao-1", { 0x0E81 }, CFSTR ("lo")}, + { "unicode-sip", { 0x20000 }}, + { NULL } + }; + +static CGFloat macfont_antialias_threshold; + +void +macfont_update_antialias_threshold (void) +{ + int threshold; + Boolean valid_p; + + threshold = + CFPreferencesGetAppIntegerValue (CFSTR ("AppleAntiAliasingThreshold"), + kCFPreferencesCurrentApplication, + &valid_p); + if (valid_p) + macfont_antialias_threshold = threshold; +} + +static inline Lisp_Object +macfont_intern_prop_cfstring (CFStringRef cfstring) +{ + Lisp_Object string = cfstring_to_lisp_nodecode (cfstring); + + return font_intern_prop (SSDATA (string), SBYTES (string), 1); +} + +static inline CFIndex +macfont_store_utf32char_to_unichars (UTF32Char c, UniChar *unichars) +{ + if (c < 0x10000) + { + unichars[0] = c; + + return 1; + } + else + { + c -= 0x10000; + unichars[0] = (c >> 10) + 0xD800; + unichars[1] = (c & 0x3FF) + 0xDC00; + + return 2; + } +} + +static Boolean +cfnumber_get_font_symbolic_traits_value (CFNumberRef number, + FontSymbolicTraits *sym_traits) +{ + SInt64 sint64_value; + + /* Getting symbolic traits with kCFNumberSInt32Type is lossy on Mac + OS 10.6 when the value is greater than or equal to 1 << 31. */ + if (CFNumberGetValue (number, kCFNumberSInt64Type, &sint64_value)) + { + *sym_traits = (FontSymbolicTraits) sint64_value; + + return true; + } + + return false; +} + +static void +macfont_store_descriptor_attributes (FontDescriptorRef desc, + Lisp_Object spec_or_entity) +{ + CFStringRef str; + CFDictionaryRef dict; + CFNumberRef num; + CGFloat floatval; + + str = mac_font_descriptor_copy_attribute (desc, + MAC_FONT_FAMILY_NAME_ATTRIBUTE); + if (str) + { + ASET (spec_or_entity, FONT_FAMILY_INDEX, + macfont_intern_prop_cfstring (str)); + CFRelease (str); + } + dict = mac_font_descriptor_copy_attribute (desc, MAC_FONT_TRAITS_ATTRIBUTE); + if (dict) + { + struct { + enum font_property_index index; + CFStringRef trait; + CGPoint points[6]; + } numeric_traits[] = + {{FONT_WEIGHT_INDEX, MAC_FONT_WEIGHT_TRAIT, + {{-0.4, 50}, /* light */ + {-0.24, 87.5}, /* (semi-light + normal) / 2 */ + {0, 100}, /* normal */ + {0.24, 140}, /* (semi-bold + normal) / 2 */ + {0.4, 200}, /* bold */ + {CGFLOAT_MAX, CGFLOAT_MAX}}}, + {FONT_SLANT_INDEX, MAC_FONT_SLANT_TRAIT, + {{0, 100}, {0.1, 200}, {CGFLOAT_MAX, CGFLOAT_MAX}}}, + {FONT_WIDTH_INDEX, MAC_FONT_WIDTH_TRAIT, + {{0, 100}, {1, 200}, {CGFLOAT_MAX, CGFLOAT_MAX}}}}; + int i; + + for (i = 0; i < sizeof (numeric_traits) / sizeof (numeric_traits[0]); i++) + { + num = CFDictionaryGetValue (dict, numeric_traits[i].trait); + if (num && CFNumberGetValue (num, kCFNumberCGFloatType, &floatval)) + { + CGPoint *point = numeric_traits[i].points; + + while (point->x < floatval) + point++; + if (point == numeric_traits[i].points) + point++; + else if (point->x == CGFLOAT_MAX) + point--; + floatval = (point - 1)->y + ((floatval - (point - 1)->x) + * ((point->y - (point - 1)->y) + / (point->x - (point - 1)->x))); + FONT_SET_STYLE (spec_or_entity, numeric_traits[i].index, + make_number (lround (floatval))); + } + } + + num = CFDictionaryGetValue (dict, MAC_FONT_SYMBOLIC_TRAIT); + if (num) + { + FontSymbolicTraits sym_traits; + int spacing; + + cfnumber_get_font_symbolic_traits_value (num, &sym_traits); + spacing = (sym_traits & MAC_FONT_TRAIT_MONO_SPACE + ? FONT_SPACING_MONO : FONT_SPACING_PROPORTIONAL); + ASET (spec_or_entity, FONT_SPACING_INDEX, make_number (spacing)); + } + + CFRelease (dict); + } + num = mac_font_descriptor_copy_attribute (desc, MAC_FONT_SIZE_ATTRIBUTE); + if (num && CFNumberGetValue (num, kCFNumberCGFloatType, &floatval)) + ASET (spec_or_entity, FONT_SIZE_INDEX, make_number (floatval)); + else + ASET (spec_or_entity, FONT_SIZE_INDEX, make_number (0)); + if (num) + CFRelease (num); +} + +static Lisp_Object +macfont_descriptor_entity (FontDescriptorRef desc, Lisp_Object extra, + FontSymbolicTraits synth_sym_traits) +{ + Lisp_Object entity; + CFDictionaryRef dict; + FontSymbolicTraits sym_traits = 0; + CFStringRef name; + + entity = font_make_entity (); + + ASET (entity, FONT_TYPE_INDEX, macfont_driver.type); + ASET (entity, FONT_REGISTRY_INDEX, Qiso10646_1); + + macfont_store_descriptor_attributes (desc, entity); + + dict = mac_font_descriptor_copy_attribute (desc, MAC_FONT_TRAITS_ATTRIBUTE); + if (dict) + { + CFNumberRef num = CFDictionaryGetValue (dict, MAC_FONT_SYMBOLIC_TRAIT); + + if (num) + cfnumber_get_font_symbolic_traits_value (num, &sym_traits); + CFRelease (dict); + } + if (EQ (AREF (entity, FONT_SIZE_INDEX), make_number (0))) + ASET (entity, FONT_AVGWIDTH_INDEX, make_number (0)); + ASET (entity, FONT_EXTRA_INDEX, Fcopy_sequence (extra)); + name = mac_font_descriptor_copy_attribute (desc, MAC_FONT_NAME_ATTRIBUTE); + font_put_extra (entity, QCfont_entity, + make_save_ptr_int ((void *) name, sym_traits)); + if (synth_sym_traits & MAC_FONT_TRAIT_ITALIC) + FONT_SET_STYLE (entity, FONT_SLANT_INDEX, + make_number (FONT_SLANT_SYNTHETIC_ITALIC)); + if (synth_sym_traits & MAC_FONT_TRAIT_BOLD) + FONT_SET_STYLE (entity, FONT_WEIGHT_INDEX, + make_number (FONT_WEIGHT_SYNTHETIC_BOLD)); + if (synth_sym_traits & MAC_FONT_TRAIT_MONO_SPACE) + ASET (entity, FONT_SPACING_INDEX, + make_number (FONT_SPACING_SYNTHETIC_MONO)); + + return entity; +} + +static CFStringRef +macfont_create_family_with_symbol (Lisp_Object symbol) +{ + static CFArrayRef families = NULL; + CFStringRef result = NULL, family_name; + int using_cache_p = 1; + CFComparatorFunction family_name_comparator; + + family_name = cfstring_create_with_string_noencode (SYMBOL_NAME (symbol)); + if (family_name == NULL) + return NULL; + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + if (CTFontManagerCompareFontFamilyNames != NULL) +#endif + { + family_name_comparator = CTFontManagerCompareFontFamilyNames; + } +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + else /* CTFontManagerCompareFontFamilyNames == NULL */ +#endif +#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 */ +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + { + family_name_comparator = mac_font_family_compare; + } +#endif + + if ((*family_name_comparator) (family_name, CFSTR ("LastResort"), NULL) + == kCFCompareEqualTo) + result = CFSTR ("LastResort"); + else + while (1) + { + CFIndex i, count; + + if (families == NULL) + { + families = mac_font_create_available_families (); + using_cache_p = 0; + if (families == NULL) + break; + } + + count = CFArrayGetCount (families); + i = CFArrayBSearchValues (families, CFRangeMake (0, count), + (const void *) family_name, + family_name_comparator, NULL); + if (i < count) + { + CFStringRef name = CFArrayGetValueAtIndex (families, i); + + if ((*family_name_comparator) (name, family_name, NULL) + == kCFCompareEqualTo) + result = CFRetain (name); + } + + if (result || !using_cache_p) + break; + else + { + CFRelease (families); + families = NULL; + } + } + + CFRelease (family_name); + + return result; +} + +#define WIDTH_FRAC_BITS (4) +#define WIDTH_FRAC_SCALE (2 * ((1 << (WIDTH_FRAC_BITS - 1)) - 1)) + +struct macfont_metrics +{ + unsigned char lbearing_low, rbearing_low; + signed lbearing_high : 4, rbearing_high : 4; + unsigned char ascent_low, descent_low; + signed ascent_high : 4, descent_high : 4; + + /* These two members are used for fixed-point representation of + glyph width. The `width_int' member is an integer that is + closest to the width. The `width_frac' member is the fractional + adjustment representing a value in [-.5, .5], multiplied by + WIDTH_FRAC_SCALE. For synthetic monospace fonts, they represent + the advance delta for centering instead of the glyph width. */ + signed width_frac : WIDTH_FRAC_BITS, width_int : 16 - WIDTH_FRAC_BITS; +}; + +#define METRICS_VALUE(metrics, member) \ + (((metrics)->member##_high << 8) | (metrics)->member##_low) +#define METRICS_SET_VALUE(metrics, member, value) \ + do {short tmp = (value); (metrics)->member##_low = tmp & 0xff; \ + (metrics)->member##_high = tmp >> 8;} while (0) + +enum metrics_status + { + METRICS_INVALID = -1, /* metrics entry is invalid */ + METRICS_WIDTH_VALID = -2 /* width is valid but others are invalid */ + }; + +#define METRICS_STATUS(metrics) \ + (METRICS_VALUE (metrics, ascent) + METRICS_VALUE (metrics, descent)) +#define METRICS_SET_STATUS(metrics, status) \ + do {METRICS_SET_VALUE (metrics, ascent, 0); \ + METRICS_SET_VALUE (metrics, descent, status);} while (0) + +#define METRICS_NCOLS_PER_ROW (128) +#define LCD_FONT_SMOOTHING_LEFT_MARGIN (0.396f) +#define LCD_FONT_SMOOTHING_RIGHT_MARGIN (0.396f) + +static int +macfont_glyph_extents (struct font *font, CGGlyph glyph, + struct font_metrics *metrics, CGFloat *advance_delta, + int force_integral_p) +{ + struct macfont_info *macfont_info = (struct macfont_info *) font; + FontRef macfont = macfont_info->macfont; + int row, col; + struct macfont_metrics *cache; + int width; + + row = glyph / METRICS_NCOLS_PER_ROW; + col = glyph % METRICS_NCOLS_PER_ROW; + if (row >= macfont_info->metrics_nrows) + { + macfont_info->metrics = + xrealloc (macfont_info->metrics, + sizeof (struct macfont_metrics *) * (row + 1)); + memset (macfont_info->metrics + macfont_info->metrics_nrows, 0, + (sizeof (struct macfont_metrics *) + * (row + 1 - macfont_info->metrics_nrows))); + macfont_info->metrics_nrows = row + 1; + } + if (macfont_info->metrics[row] == NULL) + { + struct macfont_metrics *new; + int i; + + new = xmalloc (sizeof (struct macfont_metrics) * METRICS_NCOLS_PER_ROW); + for (i = 0; i < METRICS_NCOLS_PER_ROW; i++) + METRICS_SET_STATUS (new + i, METRICS_INVALID); + macfont_info->metrics[row] = new; + } + cache = macfont_info->metrics[row] + col; + + if (METRICS_STATUS (cache) == METRICS_INVALID) + { + CGFloat fwidth; + + if (macfont_info->screen_font) + fwidth = mac_screen_font_get_advance_width_for_glyph (macfont_info->screen_font, glyph); + else + fwidth = mac_font_get_advance_width_for_glyph (macfont, glyph); + + /* For synthetic mono fonts, cache->width_{int,frac} holds the + advance delta value. */ + if (macfont_info->spacing == MACFONT_SPACING_SYNTHETIC_MONO) + fwidth = (font->pixel_size - fwidth) / 2; + cache->width_int = lround (fwidth); + cache->width_frac = lround ((fwidth - cache->width_int) + * WIDTH_FRAC_SCALE); + METRICS_SET_STATUS (cache, METRICS_WIDTH_VALID); + } + if (macfont_info->spacing == MACFONT_SPACING_SYNTHETIC_MONO) + width = font->pixel_size; + else + width = cache->width_int; + + if (metrics) + { + if (METRICS_STATUS (cache) == METRICS_WIDTH_VALID) + { + CGRect bounds = mac_font_get_bounding_rect_for_glyph (macfont, glyph); + + if (macfont_info->synthetic_italic_p) + { + /* We assume the members a, b, c, and d in + synthetic_italic_atfm are non-negative. */ + bounds.origin = + CGPointApplyAffineTransform (bounds.origin, + synthetic_italic_atfm); + bounds.size = + CGSizeApplyAffineTransform (bounds.size, synthetic_italic_atfm); + } + if (macfont_info->synthetic_bold_p) + { + CGFloat d = + - synthetic_bold_factor * mac_font_get_size (macfont) / 2; + + bounds = CGRectInset (bounds, d, d); + } + switch (macfont_info->spacing) + { + case MACFONT_SPACING_PROPORTIONAL: + bounds.origin.x += - (cache->width_frac + / (CGFloat) (WIDTH_FRAC_SCALE * 2)); + break; + case MACFONT_SPACING_MONO: + break; + case MACFONT_SPACING_SYNTHETIC_MONO: + bounds.origin.x += (cache->width_int + + (cache->width_frac + / (CGFloat) WIDTH_FRAC_SCALE)); + break; + } + if (bounds.size.width > 0) + { + bounds.origin.x -= LCD_FONT_SMOOTHING_LEFT_MARGIN; + bounds.size.width += (LCD_FONT_SMOOTHING_LEFT_MARGIN + + LCD_FONT_SMOOTHING_RIGHT_MARGIN); + } + bounds = CGRectIntegral (bounds); + METRICS_SET_VALUE (cache, lbearing, CGRectGetMinX (bounds)); + METRICS_SET_VALUE (cache, rbearing, CGRectGetMaxX (bounds)); + METRICS_SET_VALUE (cache, ascent, CGRectGetMaxY (bounds)); + METRICS_SET_VALUE (cache, descent, -CGRectGetMinY (bounds)); + } + metrics->lbearing = METRICS_VALUE (cache, lbearing); + metrics->rbearing = METRICS_VALUE (cache, rbearing); + metrics->width = width; + metrics->ascent = METRICS_VALUE (cache, ascent); + metrics->descent = METRICS_VALUE (cache, descent); + } + + if (advance_delta) + { + switch (macfont_info->spacing) + { + case MACFONT_SPACING_PROPORTIONAL: + *advance_delta = (force_integral_p ? 0 + : - (cache->width_frac + / (CGFloat) (WIDTH_FRAC_SCALE * 2))); + break; + case MACFONT_SPACING_MONO: + *advance_delta = 0; + break; + case MACFONT_SPACING_SYNTHETIC_MONO: + *advance_delta = (force_integral_p ? cache->width_int + : (cache->width_int + + (cache->width_frac + / (CGFloat) WIDTH_FRAC_SCALE))); + break; + } + } + + return width; +} + +static CFMutableDictionaryRef macfont_cache_dictionary; + +/* Threshold used in row_nkeys_or_perm. This must be less than or + equal to the number of rows that are invalid as BMP (i.e., from + U+D800 to U+DFFF). */ +#define ROW_PERM_OFFSET (8) + +/* The number of glyphs that can be stored in a value for a single + entry of CFDictionary. */ +#define NGLYPHS_IN_VALUE (sizeof (void *) / sizeof (CGGlyph)) + +struct macfont_cache +{ + int reference_count; + CFCharacterSetRef cf_charset; + struct { + /* The cached glyph for a BMP character c is stored in + matrix[row_nkeys_or_perm[c / 256] - ROW_PERM_OFFSET][c % 256] + if row_nkeys_or_perm[c / 256] >= ROW_PERM_OFFSET. */ + unsigned char row_nkeys_or_perm[256]; + CGGlyph **matrix; + + /* Number of rows for which the BMP cache is allocated so far. + I.e., matrix[0] ... matrix[nrows - 1] are non-NULL. */ + int nrows; + + /* The cached glyph for a character c is stored as the (c % + NGLYPHS_IN_VALUE)-th CGGlyph block of a value for the key (c / + NGLYPHS_IN_VALUE). However, the glyph for a BMP characrer c is + not stored here if row_nkeys_or_perm[c / 256] >= + ROW_PERM_OFFSET. */ + CFMutableDictionaryRef dictionary; + } glyph; + + struct { + /* UVS (Unicode Variation Sequence) subtable data, which is of + type CFDataRef if available. NULL means it is not initialized + yet. kCFNull means the subtable is not found and there is no + suitable fallback table for this font. */ + CFTypeRef table; + + /* Character collection specifying the destination of the mapping + provided by `table' above. If `table' is obtained from the UVS + subtable in the font cmap table, then the value of this member + should be MAC_CHARACTER_COLLECTION_IDENTITY_MAPPING. */ + CharacterCollection collection; + } uvs; +}; + +static struct macfont_cache *macfont_lookup_cache (CFStringRef); +static struct macfont_cache *macfont_retain_cache (struct macfont_cache *); +static void macfont_release_cache (struct macfont_cache *); +static CFCharacterSetRef macfont_get_cf_charset (struct font *); +static CFCharacterSetRef macfont_get_cf_charset_for_name (CFStringRef); +static CGGlyph macfont_get_glyph_for_character (struct font *, UTF32Char); +static CGGlyph macfont_get_glyph_for_cid (struct font *font, + CharacterCollection, CGFontIndex); +static CFDataRef macfont_get_uvs_table (struct font *, CharacterCollection *); + +static struct macfont_cache * +macfont_lookup_cache (CFStringRef key) +{ + struct macfont_cache *cache; + + if (macfont_cache_dictionary == NULL) + { + macfont_cache_dictionary = + CFDictionaryCreateMutable (NULL, 0, + &kCFTypeDictionaryKeyCallBacks, NULL); + cache = NULL; + } + else + cache = ((struct macfont_cache *) + CFDictionaryGetValue (macfont_cache_dictionary, key)); + + if (cache == NULL) + { + FontRef macfont = mac_font_create_with_name (key, 0); + + if (macfont) + { + cache = xzalloc (sizeof (struct macfont_cache)); + /* Treat the LastResort font as if it contained glyphs for + all characters. This may look too rough, but neither + CTFontCopyCharacterSet nor -[NSFont coveredCharacterSet] + for this font is correct for non-BMP characters on Mac OS + X 10.5, anyway. */ + if (CFStringCompare (key, CFSTR ("LastResort"), 0) + == kCFCompareEqualTo) + { + CFRange range = CFRangeMake (0, MAX_UNICODE_CHAR + 1); + + cache->cf_charset = + CFCharacterSetCreateWithCharactersInRange (NULL, range); + } + if (cache->cf_charset == NULL) + cache->cf_charset = mac_font_copy_character_set (macfont); + CFDictionaryAddValue (macfont_cache_dictionary, key, + (const void *) cache); + CFRelease (macfont); + } + } + + return cache; +} + +static struct macfont_cache * +macfont_retain_cache (struct macfont_cache *cache) +{ + cache->reference_count++; + + return cache; +} + +static void +macfont_release_cache (struct macfont_cache *cache) +{ + if (--cache->reference_count == 0) + { + int i; + + for (i = 0; i < cache->glyph.nrows; i++) + xfree (cache->glyph.matrix[i]); + xfree (cache->glyph.matrix); + if (cache->glyph.dictionary) + CFRelease (cache->glyph.dictionary); + memset (&cache->glyph, 0, sizeof (cache->glyph)); + if (cache->uvs.table) + CFRelease (cache->uvs.table); + memset (&cache->uvs, 0, sizeof (cache->uvs)); + } +} + +static CFCharacterSetRef +macfont_get_cf_charset (struct font *font) +{ + struct macfont_info *macfont_info = (struct macfont_info *) font; + + return macfont_info->cache->cf_charset; +} + +static CFCharacterSetRef +macfont_get_cf_charset_for_name (CFStringRef name) +{ + struct macfont_cache *cache = macfont_lookup_cache (name); + + return cache->cf_charset; +} + +static CGGlyph +macfont_get_glyph_for_character (struct font *font, UTF32Char c) +{ + struct macfont_info *macfont_info = (struct macfont_info *) font; + FontRef macfont = macfont_info->macfont; + struct macfont_cache *cache = macfont_info->cache; + + if (c < 0xD800 || (c > 0xDFFF && c < 0x10000)) + { + int row = c / 256; + int nkeys_or_perm = cache->glyph.row_nkeys_or_perm[row]; + + if (nkeys_or_perm < ROW_PERM_OFFSET) + { + UniChar unichars[256], ch; + CGGlyph *glyphs; + int i, len; + int nrows; +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + dispatch_queue_t queue; + dispatch_group_t group = NULL; +#else + int nkeys; +#endif + + if (row != 0) + { + CFMutableDictionaryRef dictionary; + uintptr_t key, value; + int nshifts; + CGGlyph glyph; + + if (cache->glyph.dictionary == NULL) + cache->glyph.dictionary = + CFDictionaryCreateMutable (NULL, 0, NULL, NULL); + dictionary = cache->glyph.dictionary; + key = c / NGLYPHS_IN_VALUE; + nshifts = ((c % NGLYPHS_IN_VALUE) * sizeof (CGGlyph) * 8); + value = ((uintptr_t) + CFDictionaryGetValue (dictionary, (const void *) key)); + glyph = (value >> nshifts); + if (glyph) + return glyph; + + if (nkeys_or_perm + 1 != ROW_PERM_OFFSET) + { + ch = c; + if (!mac_font_get_glyphs_for_characters (macfont, &ch, + &glyph, 1) + || glyph == 0) + glyph = kCGFontIndexInvalid; + + if (value == 0) + cache->glyph.row_nkeys_or_perm[row] = nkeys_or_perm + 1; + value |= ((uintptr_t) glyph << nshifts); + CFDictionarySetValue (dictionary, (const void *) key, + (const void *) value); + + return glyph; + } + +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + queue = + dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + group = dispatch_group_create (); + dispatch_group_async (group, queue, ^{ + int nkeys; + uintptr_t key; +#endif + nkeys = nkeys_or_perm; + for (key = row * (256 / NGLYPHS_IN_VALUE); ; key++) + if (CFDictionaryContainsKey (dictionary, + (const void *) key)) + { + CFDictionaryRemoveValue (dictionary, + (const void *) key); + if (--nkeys == 0) + break; + } +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + }); +#endif + } + + len = 0; + for (i = 0; i < 256; i++) + { + ch = row * 256 + i; + if (CFCharacterSetIsLongCharacterMember (cache->cf_charset, ch)) + unichars[len++] = ch; + } + + glyphs = xmalloc (sizeof (CGGlyph) * 256); + if (len > 0) + { + mac_font_get_glyphs_for_characters (macfont, unichars, + glyphs, len); + while (i > len) + { + int next = unichars[len - 1] % 256; + + while (--i > next) + glyphs[i] = kCGFontIndexInvalid; + + len--; + glyphs[i] = glyphs[len]; + if (len == 0) + break; + } + } + if (i > len) + while (i-- > 0) + glyphs[i] = kCGFontIndexInvalid; + + nrows = cache->glyph.nrows; + nkeys_or_perm = nrows + ROW_PERM_OFFSET; + cache->glyph.row_nkeys_or_perm[row] = nkeys_or_perm; + nrows++; + cache->glyph.matrix = xrealloc (cache->glyph.matrix, + sizeof (CGGlyph *) * nrows); + cache->glyph.matrix[nrows - 1] = glyphs; + cache->glyph.nrows = nrows; + +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + if (group) + { + dispatch_group_wait (group, DISPATCH_TIME_FOREVER); + dispatch_release (group); + } +#endif + } + + return cache->glyph.matrix[nkeys_or_perm - ROW_PERM_OFFSET][c % 256]; + } + else + { + uintptr_t key, value; + int nshifts; + CGGlyph glyph; + + if (cache->glyph.dictionary == NULL) + cache->glyph.dictionary = + CFDictionaryCreateMutable (NULL, 0, NULL, NULL); + key = c / NGLYPHS_IN_VALUE; + nshifts = ((c % NGLYPHS_IN_VALUE) * sizeof (CGGlyph) * 8); + value = (uintptr_t) CFDictionaryGetValue (cache->glyph.dictionary, + (const void *) key); + glyph = (value >> nshifts); + if (glyph == 0) + { + UniChar unichars[2]; + CGGlyph glyphs[2]; + CFIndex count = macfont_store_utf32char_to_unichars (c, unichars); + + if (mac_font_get_glyphs_for_characters (macfont, unichars, glyphs, + count)) + glyph = glyphs[0]; + if (glyph == 0) + glyph = kCGFontIndexInvalid; + + value |= ((uintptr_t) glyph << nshifts); + CFDictionarySetValue (cache->glyph.dictionary, + (const void *) key, (const void *) value); + } + + return glyph; + } +} + +static CGGlyph +macfont_get_glyph_for_cid (struct font *font, CharacterCollection collection, + CGFontIndex cid) +{ + struct macfont_info *macfont_info = (struct macfont_info *) font; + FontRef macfont = macfont_info->macfont; + + /* Cache it? */ + return mac_font_get_glyph_for_cid (macfont, collection, cid); +} + +static CFDataRef +macfont_get_uvs_table (struct font *font, CharacterCollection *collection) +{ + struct macfont_info *macfont_info = (struct macfont_info *) font; + FontRef macfont = macfont_info->macfont; + struct macfont_cache *cache = macfont_info->cache; + CFDataRef result = NULL; + + if (cache->uvs.table == NULL) + { + CFDataRef uvs_table = mac_font_copy_uvs_table (macfont); + CharacterCollection uvs_collection = + MAC_CHARACTER_COLLECTION_IDENTITY_MAPPING; + + if (uvs_table == NULL + && mac_font_get_glyph_for_cid (macfont, + MAC_CHARACTER_COLLECTION_ADOBE_JAPAN1, + 6480) != kCGFontIndexInvalid) + { + /* If the glyph for U+4E55 is accessible via its CID 6480, + then we use the Adobe-Japan1 UVS table, which maps a + variation sequence to a CID, as a fallback. */ + static CFDataRef mac_uvs_table_adobe_japan1 = NULL; + + if (mac_uvs_table_adobe_japan1 == NULL) + mac_uvs_table_adobe_japan1 = + CFDataCreateWithBytesNoCopy (NULL, + mac_uvs_table_adobe_japan1_bytes, + sizeof (mac_uvs_table_adobe_japan1_bytes), + kCFAllocatorNull); + if (mac_uvs_table_adobe_japan1) + { + uvs_table = CFRetain (mac_uvs_table_adobe_japan1); + uvs_collection = MAC_CHARACTER_COLLECTION_ADOBE_JAPAN1; + } + } + if (uvs_table == NULL) + cache->uvs.table = kCFNull; + else + cache->uvs.table = uvs_table; + cache->uvs.collection = uvs_collection; + } + + if (cache->uvs.table != kCFNull) + { + result = cache->uvs.table; + *collection = cache->uvs.collection; + } + + return result; +} + +static Lisp_Object macfont_get_cache (struct frame *); +static Lisp_Object macfont_list (struct frame *, Lisp_Object); +static Lisp_Object macfont_match (struct frame *, Lisp_Object); +static Lisp_Object macfont_list_family (struct frame *); +static void macfont_free_entity (Lisp_Object); +static Lisp_Object macfont_open (struct frame *, Lisp_Object, int); +static void macfont_close (struct frame *, struct font *); +static int macfont_has_char (Lisp_Object, int); +static unsigned macfont_encode_char (struct font *, int); +static int macfont_text_extents (struct font *, unsigned int *, int, + struct font_metrics *); +static int macfont_draw (struct glyph_string *, int, int, int, int, bool); +static Lisp_Object macfont_shape (Lisp_Object); +static int macfont_variation_glyphs (struct font *, int c, + unsigned variations[256]); +static void macfont_filter_properties (Lisp_Object, Lisp_Object); + +static struct font_driver macfont_driver = + { + LISP_INITIALLY_ZERO, /* Qmac_ct */ + 0, /* case insensitive */ + macfont_get_cache, + macfont_list, + macfont_match, + macfont_list_family, + macfont_free_entity, + macfont_open, + macfont_close, + NULL, /* prepare_face */ + NULL, /* done_face */ + macfont_has_char, + macfont_encode_char, + macfont_text_extents, + macfont_draw, + NULL, /* get_bitmap */ + NULL, /* free_bitmap */ + NULL, /* get_outline */ + NULL, /* free_outline */ + NULL, /* anchor_point */ + NULL, /* otf_capability */ + NULL, /* otf_drive */ + NULL, /* start_for_frame */ + NULL, /* end_for_frame */ + macfont_shape, + NULL, /* check */ + macfont_variation_glyphs, + macfont_filter_properties, + }; + +static Lisp_Object +macfont_get_cache (struct frame * f) +{ + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); + + return (dpyinfo->name_list_element); +} + +static int +macfont_get_charset (Lisp_Object registry) +{ + char *str = SSDATA (SYMBOL_NAME (registry)); + char *re = alloca (SBYTES (SYMBOL_NAME (registry)) * 2 + 1); + Lisp_Object regexp; + int i, j; + + for (i = j = 0; i < SBYTES (SYMBOL_NAME (registry)); i++, j++) + { + if (str[i] == '.') + re[j++] = '\\'; + else if (str[i] == '*') + re[j++] = '.'; + re[j] = str[i]; + if (re[j] == '?') + re[j] = '.'; + } + re[j] = '\0'; + regexp = make_unibyte_string (re, j); + for (i = 0; cf_charset_table[i].name; i++) + if (fast_c_string_match_ignore_case + (regexp, cf_charset_table[i].name, + strlen (cf_charset_table[i].name)) >= 0) + break; + if (! cf_charset_table[i].name) + return -1; + if (! cf_charset_table[i].cf_charset) + { + int *uniquifier = cf_charset_table[i].uniquifier; + UniChar *unichars = alloca (sizeof (cf_charset_table[i].uniquifier)); + CFIndex count = 0; + CFStringRef string; + CFMutableCharacterSetRef charset = CFCharacterSetCreateMutable (NULL); + + if (! charset) + return -1; + for (j = 0; uniquifier[j]; j++) + { + count += macfont_store_utf32char_to_unichars (uniquifier[j], + unichars + count); + CFCharacterSetAddCharactersInRange (charset, + CFRangeMake (uniquifier[j], 1)); + } + + string = CFStringCreateWithCharacters (NULL, unichars, count); + if (! string) + { + CFRelease (charset); + return -1; + } + cf_charset_table[i].cf_charset = CFCharacterSetCreateCopy (NULL, + charset); + CFRelease (charset); + /* CFCharacterSetCreateWithCharactersInString does not handle + surrogate pairs properly as of Mac OS X 10.5. */ + cf_charset_table[i].cf_charset_string = string; + } + return i; +} + +struct OpenTypeSpec +{ + Lisp_Object script; + unsigned int script_tag, langsys_tag; + int nfeatures[2]; + unsigned int *features[2]; +}; + +#define OTF_SYM_TAG(SYM, TAG) \ + do { \ + unsigned char *p = SDATA (SYMBOL_NAME (SYM)); \ + TAG = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; \ + } while (0) + +#define OTF_TAG_STR(TAG, P) \ + do { \ + (P)[0] = (char) (TAG >> 24); \ + (P)[1] = (char) ((TAG >> 16) & 0xFF); \ + (P)[2] = (char) ((TAG >> 8) & 0xFF); \ + (P)[3] = (char) (TAG & 0xFF); \ + (P)[4] = '\0'; \ + } while (0) + +static struct OpenTypeSpec * +macfont_get_open_type_spec (Lisp_Object otf_spec) +{ + struct OpenTypeSpec *spec = xmalloc (sizeof *spec); + Lisp_Object val; + int i, j; + bool negative; + + if (! spec) + return NULL; + spec->script = XCAR (otf_spec); + if (! NILP (spec->script)) + { + OTF_SYM_TAG (spec->script, spec->script_tag); + val = assq_no_quit (spec->script, Votf_script_alist); + if (CONSP (val) && SYMBOLP (XCDR (val))) + spec->script = XCDR (val); + else + spec->script = Qnil; + } + else + spec->script_tag = 0x44464C54; /* "DFLT" */ + otf_spec = XCDR (otf_spec); + spec->langsys_tag = 0; + if (! NILP (otf_spec)) + { + val = XCAR (otf_spec); + if (! NILP (val)) + OTF_SYM_TAG (val, spec->langsys_tag); + otf_spec = XCDR (otf_spec); + } + spec->nfeatures[0] = spec->nfeatures[1] = 0; + for (i = 0; i < 2 && ! NILP (otf_spec); i++, otf_spec = XCDR (otf_spec)) + { + Lisp_Object len; + + val = XCAR (otf_spec); + if (NILP (val)) + continue; + len = Flength (val); + spec->features[i] = + (min (PTRDIFF_MAX, SIZE_MAX) / sizeof (int) < XINT (len) + ? 0 + : malloc (XINT (len) * sizeof *spec->features[i])); + if (! spec->features[i]) + { + if (i > 0 && spec->features[0]) + free (spec->features[0]); + free (spec); + return NULL; + } + for (j = 0, negative = 0; CONSP (val); val = XCDR (val)) + { + if (NILP (XCAR (val))) + negative = 1; + else + { + unsigned int tag; + + OTF_SYM_TAG (XCAR (val), tag); + spec->features[i][j++] = negative ? tag & 0x80000000 : tag; + } + } + spec->nfeatures[i] = j; + } + return spec; +} + +static CFMutableDictionaryRef +macfont_create_attributes_with_spec (Lisp_Object spec) +{ + Lisp_Object tmp, extra; + CFMutableArrayRef langarray = NULL; + CFCharacterSetRef charset = NULL; + CFStringRef charset_string = NULL; + CFMutableDictionaryRef attributes = NULL, traits = NULL; + Lisp_Object script = Qnil; + Lisp_Object registry; + int cf_charset_idx, i; + struct OpenTypeSpec *otspec = NULL; + struct { + enum font_property_index index; + CFStringRef trait; + CGPoint points[6]; + } numeric_traits[] = + {{FONT_WEIGHT_INDEX, MAC_FONT_WEIGHT_TRAIT, + {{-0.4, 50}, /* light */ + {-0.24, 87.5}, /* (semi-light + normal) / 2 */ + {0, 100}, /* normal */ + {0.24, 140}, /* (semi-bold + normal) / 2 */ + {0.4, 200}, /* bold */ + {CGFLOAT_MAX, CGFLOAT_MAX}}}, + {FONT_SLANT_INDEX, MAC_FONT_SLANT_TRAIT, + {{0, 100}, {0.1, 200}, {CGFLOAT_MAX, CGFLOAT_MAX}}}, + {FONT_WIDTH_INDEX, MAC_FONT_WIDTH_TRAIT, + {{0, 100}, {1, 200}, {CGFLOAT_MAX, CGFLOAT_MAX}}}}; + + registry = AREF (spec, FONT_REGISTRY_INDEX); + if (NILP (registry) + || EQ (registry, Qascii_0) + || EQ (registry, Qiso10646_1) + || EQ (registry, Qunicode_bmp)) + cf_charset_idx = -1; + else + { + CFStringRef lang; + + cf_charset_idx = macfont_get_charset (registry); + if (cf_charset_idx < 0) + goto err; + charset = cf_charset_table[cf_charset_idx].cf_charset; + charset_string = cf_charset_table[cf_charset_idx].cf_charset_string; + lang = cf_charset_table[cf_charset_idx].lang; + if (lang) + { + langarray = CFArrayCreateMutable (NULL, 0, &kCFTypeArrayCallBacks); + if (! langarray) + goto err; + CFArrayAppendValue (langarray, lang); + } + } + + for (extra = AREF (spec, FONT_EXTRA_INDEX); + CONSP (extra); extra = XCDR (extra)) + { + Lisp_Object key, val; + + tmp = XCAR (extra); + key = XCAR (tmp), val = XCDR (tmp); + if (EQ (key, QClang)) + { + if (! langarray) + langarray = CFArrayCreateMutable (NULL, 0, &kCFTypeArrayCallBacks); + if (! langarray) + goto err; + if (SYMBOLP (val)) + val = list1 (val); + for (; CONSP (val); val = XCDR (val)) + if (SYMBOLP (XCAR (val))) + { + CFStringRef lang = + cfstring_create_with_string_noencode (SYMBOL_NAME + (XCAR (val))); + + if (lang == NULL) + goto err; + CFArrayAppendValue (langarray, lang); + CFRelease (lang); + } + } + else if (EQ (key, QCotf)) + { + otspec = macfont_get_open_type_spec (val); + if (! otspec) + goto err; + script = otspec->script; + } + else if (EQ (key, QCscript)) + script = val; + } + + if (! NILP (script) && ! charset) + { + Lisp_Object chars = assq_no_quit (script, Vscript_representative_chars); + + if (CONSP (chars) && CONSP (CDR (chars))) + { + CFMutableStringRef string = CFStringCreateMutable (NULL, 0); + CFMutableCharacterSetRef cs = CFCharacterSetCreateMutable (NULL); + + if (! string || !cs) + { + if (string) + CFRelease (string); + else if (cs) + CFRelease (cs); + goto err; + } + for (chars = XCDR (chars); CONSP (chars); chars = XCDR (chars)) + if (CHARACTERP (XCAR (chars))) + { + UniChar unichars[2]; + CFIndex count = + macfont_store_utf32char_to_unichars (XFASTINT (XCAR (chars)), + unichars); + CFRange range = CFRangeMake (XFASTINT (XCAR (chars)), 1); + + CFStringAppendCharacters (string, unichars, count); + CFCharacterSetAddCharactersInRange (cs, range); + } + charset = cs; + /* CFCharacterSetCreateWithCharactersInString does not + handle surrogate pairs properly as of Mac OS X 10.5. */ + charset_string = string; + } + } + + attributes = CFDictionaryCreateMutable (NULL, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + if (! attributes) + goto err; + + tmp = AREF (spec, FONT_FAMILY_INDEX); + if (SYMBOLP (tmp) && ! NILP (tmp)) + { + CFStringRef family = macfont_create_family_with_symbol (tmp); + + if (! family) + goto err; + CFDictionaryAddValue (attributes, MAC_FONT_FAMILY_NAME_ATTRIBUTE, + family); + CFRelease (family); + } + + traits = CFDictionaryCreateMutable (NULL, 4, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + if (! traits) + goto err; + + for (i = 0; i < sizeof (numeric_traits) / sizeof (numeric_traits[0]); i++) + { + tmp = AREF (spec, numeric_traits[i].index); + if (INTEGERP (tmp)) + { + CGPoint *point = numeric_traits[i].points; + CGFloat floatval = (XINT (tmp) >> 8); // XXX + CFNumberRef num; + + while (point->y < floatval) + point++; + if (point == numeric_traits[i].points) + point++; + else if (point->y == CGFLOAT_MAX) + point--; + floatval = (point - 1)->x + ((floatval - (point - 1)->y) + * ((point->x - (point - 1)->x) + / (point->y - (point - 1)->y))); + if (floatval > 1.0) + floatval = 1.0; + else if (floatval < -1.0) + floatval = -1.0; + num = CFNumberCreate (NULL, kCFNumberCGFloatType, &floatval); + if (! num) + goto err; + CFDictionaryAddValue (traits, numeric_traits[i].trait, num); + CFRelease (num); + } + } + if (CFDictionaryGetCount (traits)) + CFDictionaryAddValue (attributes, MAC_FONT_TRAITS_ATTRIBUTE, traits); + + if (charset) + CFDictionaryAddValue (attributes, MAC_FONT_CHARACTER_SET_ATTRIBUTE, + charset); + if (charset_string) + CFDictionaryAddValue (attributes, MAC_FONT_CHARACTER_SET_STRING_ATTRIBUTE, + charset_string); + if (langarray) + CFDictionaryAddValue (attributes, MAC_FONT_LANGUAGES_ATTRIBUTE, langarray); + + goto finish; + + err: + if (attributes) + { + CFRelease (attributes); + attributes = NULL; + } + + finish: + if (langarray) CFRelease (langarray); + if (charset && cf_charset_idx < 0) CFRelease (charset); + if (charset_string && cf_charset_idx < 0) CFRelease (charset_string); + if (traits) CFRelease (traits); + if (otspec) + { + if (otspec->nfeatures[0] > 0) + free (otspec->features[0]); + if (otspec->nfeatures[1] > 0) + free (otspec->features[1]); + free (otspec); + } + + return attributes; +} + +static Boolean +macfont_supports_charset_and_languages_p (FontDescriptorRef desc, + CFCharacterSetRef charset, + Lisp_Object chars, + CFArrayRef languages) +{ + Boolean result = true; + + if (charset || VECTORP (chars)) + { + CFCharacterSetRef desc_charset = + mac_font_descriptor_copy_attribute (desc, + MAC_FONT_CHARACTER_SET_ATTRIBUTE); + + if (desc_charset == NULL) + result = false; + else + { + if (charset) + result = CFCharacterSetIsSupersetOfSet (desc_charset, charset); + else /* VECTORP (chars) */ + { + ptrdiff_t j; + + for (j = 0; j < ASIZE (chars); j++) + if (TYPE_RANGED_INTEGERP (UTF32Char, AREF (chars, j)) + && CFCharacterSetIsLongCharacterMember (desc_charset, + XFASTINT (AREF (chars, j)))) + break; + if (j == ASIZE (chars)) + result = false; + } + CFRelease (desc_charset); + } + } + if (result && languages) + result = mac_font_descriptor_supports_languages (desc, languages); + + return result; +} + +static CFIndex +macfont_closest_traits_index (CFArrayRef traits_array, + FontSymbolicTraits target) +{ + CFIndex i, result = -1, count = CFArrayGetCount (traits_array); + int min_distance = (1 << 3); + + for (i = 0; i < count; i++) + { + FontSymbolicTraits traits, diff; + int distance = 0; + + traits = ((FontSymbolicTraits) (uintptr_t) + CFArrayGetValueAtIndex (traits_array, i)); + diff = (target ^ traits); + /* We prefer synthetic bold of italic to synthetic italic of + bold when both bold and italic are available but bold-italic + is not available. */ + if (diff & MAC_FONT_TRAIT_BOLD) + distance |= (1 << 0); + if (diff & MAC_FONT_TRAIT_ITALIC) + distance |= (1 << 1); + if (diff & MAC_FONT_TRAIT_MONO_SPACE) + distance |= (1 << 2); + if (distance < min_distance) + { + min_distance = distance; + result = i; + } + } + + return result; +} + +static Lisp_Object +macfont_list (struct frame *f, Lisp_Object spec) +{ + Lisp_Object val = Qnil, family, extra; + int i, n; + CFStringRef family_name = NULL; + CFMutableDictionaryRef attributes = NULL, traits; + Lisp_Object chars = Qnil; + int spacing = -1; + FontSymbolicTraits synth_sym_traits = 0; + CFArrayRef families; + CFIndex families_count; + CFCharacterSetRef charset = NULL; + CFArrayRef languages = NULL; + + block_input (); + + family = AREF (spec, FONT_FAMILY_INDEX); + if (! NILP (family)) + { + family_name = macfont_create_family_with_symbol (family); + if (family_name == NULL) + goto finish; + } + + attributes = macfont_create_attributes_with_spec (spec); + if (! attributes) + goto finish; + + charset = ((CFCharacterSetRef) + CFDictionaryGetValue (attributes, + MAC_FONT_CHARACTER_SET_ATTRIBUTE)); + if (charset) + { + CFRetain (charset); + CFDictionaryRemoveValue (attributes, MAC_FONT_CHARACTER_SET_ATTRIBUTE); + } + else + { + val = assq_no_quit (QCscript, AREF (spec, FONT_EXTRA_INDEX)); + if (! NILP (val)) + { + val = assq_no_quit (XCDR (val), Vscript_representative_chars); + if (CONSP (val) && VECTORP (XCDR (val))) + chars = XCDR (val); + } + val = Qnil; + } + + languages = ((CFArrayRef) + CFDictionaryGetValue (attributes, MAC_FONT_LANGUAGES_ATTRIBUTE)); + if (languages) + { + CFRetain (languages); + CFDictionaryRemoveValue (attributes, MAC_FONT_LANGUAGES_ATTRIBUTE); + } + + if (INTEGERP (AREF (spec, FONT_SPACING_INDEX))) + spacing = XINT (AREF (spec, FONT_SPACING_INDEX)); + + traits = ((CFMutableDictionaryRef) + CFDictionaryGetValue (attributes, MAC_FONT_TRAITS_ATTRIBUTE)); + + n = FONT_SLANT_NUMERIC (spec); + if (n < 0 || n == FONT_SLANT_SYNTHETIC_ITALIC) + { + synth_sym_traits |= MAC_FONT_TRAIT_ITALIC; + if (traits) + CFDictionaryRemoveValue (traits, MAC_FONT_SLANT_TRAIT); + } + + n = FONT_WEIGHT_NUMERIC (spec); + if (n < 0 || n == FONT_WEIGHT_SYNTHETIC_BOLD) + { + synth_sym_traits |= MAC_FONT_TRAIT_BOLD; + if (traits) + CFDictionaryRemoveValue (traits, MAC_FONT_WEIGHT_TRAIT); + } + + if (languages + && (spacing < 0 || spacing == FONT_SPACING_SYNTHETIC_MONO)) + { + CFStringRef language = CFArrayGetValueAtIndex (languages, 0); + + if (CFStringHasPrefix (language, CFSTR ("ja")) + || CFStringHasPrefix (language, CFSTR ("ko")) + || CFStringHasPrefix (language, CFSTR ("zh"))) + synth_sym_traits |= MAC_FONT_TRAIT_MONO_SPACE; + } + + /* Create array of families. */ + if (family_name) + families = CFArrayCreate (NULL, (const void **) &family_name, + 1, &kCFTypeArrayCallBacks); + else + { + CFStringRef pref_family; + CFIndex families_count, pref_family_index = -1; + + families = mac_font_create_available_families (); + if (families == NULL) + goto err; + + families_count = CFArrayGetCount (families); + + /* Move preferred family to the front if exists. */ + pref_family = + mac_font_create_preferred_family_for_attributes (attributes); + if (pref_family) + { + pref_family_index = + CFArrayGetFirstIndexOfValue (families, + CFRangeMake (0, families_count), + pref_family); + CFRelease (pref_family); + } + if (pref_family_index > 0) + { + CFMutableArrayRef mutable_families = + CFArrayCreateMutable (NULL, families_count, &kCFTypeArrayCallBacks); + + if (mutable_families) + { + CFArrayAppendValue (mutable_families, + CFArrayGetValueAtIndex (families, + pref_family_index)); + CFArrayAppendArray (mutable_families, families, + CFRangeMake (0, pref_family_index)); + if (pref_family_index + 1 < families_count) + CFArrayAppendArray (mutable_families, families, + CFRangeMake (pref_family_index + 1, + families_count + - (pref_family_index + 1))); + CFRelease (families); + families = mutable_families; + } + } + } + + val = Qnil; + extra = AREF (spec, FONT_EXTRA_INDEX); + families_count = CFArrayGetCount (families); + for (i = 0; i < families_count; i++) + { + CFStringRef family_name = CFArrayGetValueAtIndex (families, i); + FontDescriptorRef pat_desc; + CFArrayRef descs; + CFIndex descs_count; + CFMutableArrayRef filtered_descs, traits_array; + Lisp_Object entity; + int j; + + CFDictionarySetValue (attributes, MAC_FONT_FAMILY_NAME_ATTRIBUTE, + family_name); + pat_desc = mac_font_descriptor_create_with_attributes (attributes); + if (! pat_desc) + goto err; + + /* CTFontDescriptorCreateMatchingFontDescriptors on Mac OS X + 10.7 returns NULL if pat_desc represents the LastResort font. + So we use CTFontDescriptorCreateMatchingFontDescriptor (no + trailing "s") for such a font. */ + if (CFStringCompare (family_name, CFSTR ("LastResort"), 0) + != kCFCompareEqualTo) + descs = mac_font_descriptor_create_matching_font_descriptors (pat_desc, + NULL); + else + { + FontDescriptorRef lr_desc = + mac_font_descriptor_create_matching_font_descriptor (pat_desc, + NULL); + if (lr_desc) + { + descs = CFArrayCreate (NULL, (const void **) &lr_desc, 1, + &kCFTypeArrayCallBacks); + CFRelease (lr_desc); + } + else + descs = NULL; + } + CFRelease (pat_desc); + if (! descs) + goto err; + + descs_count = CFArrayGetCount (descs); + if (descs_count == 0 + || !macfont_supports_charset_and_languages_p (CFArrayGetValueAtIndex (descs, 0), + charset, chars, + languages)) + { + CFRelease (descs); + continue; + } + + filtered_descs = + CFArrayCreateMutable (NULL, descs_count, &kCFTypeArrayCallBacks); + traits_array = CFArrayCreateMutable (NULL, descs_count, NULL); + for (j = 0; j < descs_count; j++) + { + FontDescriptorRef desc = CFArrayGetValueAtIndex (descs, j); + CFDictionaryRef dict; + CFNumberRef num; + FontSymbolicTraits sym_traits; + + dict = mac_font_descriptor_copy_attribute (desc, + MAC_FONT_TRAITS_ATTRIBUTE); + if (dict == NULL) + continue; + + num = CFDictionaryGetValue (dict, MAC_FONT_SYMBOLIC_TRAIT); + CFRelease (dict); + if (num == NULL + || !cfnumber_get_font_symbolic_traits_value (num, &sym_traits)) + continue; + + if (spacing >= 0 + && !(synth_sym_traits & MAC_FONT_TRAIT_MONO_SPACE) + && (((sym_traits & MAC_FONT_TRAIT_MONO_SPACE) != 0) + != (spacing >= FONT_SPACING_MONO))) + continue; + + /* Don't use a color bitmap font unless its family is + explicitly specified. */ + if ((sym_traits & MAC_FONT_TRAIT_COLOR_GLYPHS) && NILP (family)) + continue; + + if (j > 0 + && !macfont_supports_charset_and_languages_p (desc, charset, + chars, languages)) + continue; + + CFArrayAppendValue (filtered_descs, desc); + CFArrayAppendValue (traits_array, + (const void *) (uintptr_t) sym_traits); + } + + CFRelease (descs); + descs = filtered_descs; + descs_count = CFArrayGetCount (descs); + + for (j = 0; j < descs_count; j++) + { + FontDescriptorRef desc = CFArrayGetValueAtIndex (descs, j); + FontSymbolicTraits sym_traits = + ((FontSymbolicTraits) (uintptr_t) + CFArrayGetValueAtIndex (traits_array, j)); + FontSymbolicTraits mask_min, mask_max, imask, bmask, mmask; + + mask_min = ((synth_sym_traits ^ sym_traits) + & (MAC_FONT_TRAIT_ITALIC | MAC_FONT_TRAIT_BOLD)); + if (FONT_SLANT_NUMERIC (spec) < 0) + mask_min &= ~MAC_FONT_TRAIT_ITALIC; + if (FONT_WEIGHT_NUMERIC (spec) < 0) + mask_min &= ~MAC_FONT_TRAIT_BOLD; + + mask_max = (synth_sym_traits & ~sym_traits); + /* Synthetic bold does not work for bitmap-only fonts on Mac + OS X 10.6. */ + if ((mask_min ^ mask_max) & MAC_FONT_TRAIT_BOLD) + { + CFNumberRef format = + mac_font_descriptor_copy_attribute (desc, + MAC_FONT_FORMAT_ATTRIBUTE); + + if (format) + { + uint32_t format_val; + + if (CFNumberGetValue (format, kCFNumberSInt32Type, + &format_val) + && format_val == MAC_FONT_FORMAT_BITMAP) + mask_max &= ~MAC_FONT_TRAIT_BOLD; + } + } + if (spacing >= 0) + mask_min |= (mask_max & MAC_FONT_TRAIT_MONO_SPACE); + + for (mmask = (mask_min & MAC_FONT_TRAIT_MONO_SPACE); + mmask <= (mask_max & MAC_FONT_TRAIT_MONO_SPACE); + mmask += MAC_FONT_TRAIT_MONO_SPACE) + for (bmask = (mask_min & MAC_FONT_TRAIT_BOLD); + bmask <= (mask_max & MAC_FONT_TRAIT_BOLD); + bmask += MAC_FONT_TRAIT_BOLD) + for (imask = (mask_min & MAC_FONT_TRAIT_ITALIC); + imask <= (mask_max & MAC_FONT_TRAIT_ITALIC); + imask += MAC_FONT_TRAIT_ITALIC) + { + FontSymbolicTraits synth = (imask | bmask | mmask); + + if (synth == 0 + || j == macfont_closest_traits_index (traits_array, + (sym_traits | synth))) + { + entity = macfont_descriptor_entity (desc, extra, synth); + if (! NILP (entity)) + val = Fcons (entity, val); + } + } + } + + CFRelease (traits_array); + CFRelease (descs); + } + + CFRelease (families); + val = Fnreverse (val); + goto finish; + err: + val = Qnil; + + finish: + FONT_ADD_LOG ("macfont-list", spec, val); + if (charset) CFRelease (charset); + if (languages) CFRelease (languages); + if (attributes) CFRelease (attributes); + if (family_name) CFRelease (family_name); + + unblock_input (); + + return val; +} + +static Lisp_Object +macfont_match (struct frame * frame, Lisp_Object spec) +{ + Lisp_Object entity = Qnil; + CFMutableDictionaryRef attributes; + FontDescriptorRef pat_desc = NULL, desc = NULL; + + block_input (); + + attributes = macfont_create_attributes_with_spec (spec); + if (attributes) + { + pat_desc = mac_font_descriptor_create_with_attributes (attributes); + CFRelease (attributes); + } + if (pat_desc) + { + desc = mac_font_descriptor_create_matching_font_descriptor (pat_desc, + NULL); + CFRelease (pat_desc); + } + if (desc) + { + entity = macfont_descriptor_entity (desc, AREF (spec, FONT_EXTRA_INDEX), + 0); + CFRelease (desc); + } + unblock_input (); + + FONT_ADD_LOG ("macfont-match", spec, entity); + return entity; +} + +static Lisp_Object +macfont_list_family (struct frame *frame) +{ + Lisp_Object list = Qnil; + CFArrayRef families; + + block_input (); + + families = mac_font_create_available_families (); + if (families) + { + CFIndex i, count = CFArrayGetCount (families); + + for (i = 0; i < count; i++) + list = Fcons (macfont_intern_prop_cfstring (CFArrayGetValueAtIndex (families, i)), list); + CFRelease (families); + } + + unblock_input (); + + return list; +} + +static void +macfont_free_entity (Lisp_Object entity) +{ + Lisp_Object val = assq_no_quit (QCfont_entity, + AREF (entity, FONT_EXTRA_INDEX)); + CFStringRef name = XSAVE_POINTER (XCDR (val), 0); + + block_input (); + CFRelease (name); + unblock_input (); +} + +static Lisp_Object +macfont_open (struct frame * f, Lisp_Object entity, int pixel_size) +{ + Lisp_Object val, font_object; + CFStringRef font_name; + struct macfont_info *macfont_info = NULL; + struct font *font; + int size; + FontRef macfont; + FontSymbolicTraits sym_traits; + char name[256]; + int len, i, total_width; + CGGlyph glyph; + CGFloat ascent, descent, leading; + + val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX)); + if (! CONSP (val) + || XTYPE (XCDR (val)) != Lisp_Misc + || XMISCTYPE (XCDR (val)) != Lisp_Misc_Save_Value) + return Qnil; + font_name = XSAVE_POINTER (XCDR (val), 0); + sym_traits = XSAVE_INTEGER (XCDR (val), 1); + + size = XINT (AREF (entity, FONT_SIZE_INDEX)); + if (size == 0) + size = pixel_size; + + block_input (); + macfont = mac_font_create_with_name (font_name, size); + if (macfont) + { + int fontsize = (int) [((NSFont *) macfont) pointSize]; + if (fontsize != size) size = fontsize; + } + unblock_input (); + if (! macfont) + return Qnil; + + font_object = font_make_object (VECSIZE (struct macfont_info), entity, size); + ASET (font_object, FONT_TYPE_INDEX, macfont_driver.type); + len = font_unparse_xlfd (entity, size, name, 256); + if (len > 0) + ASET (font_object, FONT_NAME_INDEX, make_string (name, len)); + len = font_unparse_fcname (entity, size, name, 256); + if (len > 0) + ASET (font_object, FONT_FULLNAME_INDEX, make_string (name, len)); + else + ASET (font_object, FONT_FULLNAME_INDEX, + AREF (font_object, FONT_NAME_INDEX)); + font = XFONT_OBJECT (font_object); + font->pixel_size = size; + font->driver = &macfont_driver; + font->encoding_charset = font->repertory_charset = -1; + + block_input (); + + macfont_info = (struct macfont_info *) font; + macfont_info->macfont = macfont; + macfont_info->cgfont = mac_font_copy_graphics_font (macfont); + + val = assq_no_quit (QCdestination, AREF (entity, FONT_EXTRA_INDEX)); + if (CONSP (val) && EQ (XCDR (val), make_number (1))) + macfont_info->screen_font = mac_screen_font_create_with_name (font_name, + size); + else + macfont_info->screen_font = NULL; + macfont_info->cache = macfont_lookup_cache (font_name); + macfont_retain_cache (macfont_info->cache); + macfont_info->metrics = NULL; + macfont_info->metrics_nrows = 0; + macfont_info->synthetic_italic_p = 0; + macfont_info->synthetic_bold_p = 0; + macfont_info->spacing = MACFONT_SPACING_PROPORTIONAL; + macfont_info->antialias = MACFONT_ANTIALIAS_DEFAULT; + if (!(sym_traits & MAC_FONT_TRAIT_ITALIC) + && FONT_SLANT_NUMERIC (entity) == FONT_SLANT_SYNTHETIC_ITALIC) + macfont_info->synthetic_italic_p = 1; + if (!(sym_traits & MAC_FONT_TRAIT_BOLD) + && FONT_WEIGHT_NUMERIC (entity) == FONT_WEIGHT_SYNTHETIC_BOLD) + macfont_info->synthetic_bold_p = 1; + if (sym_traits & MAC_FONT_TRAIT_MONO_SPACE) + macfont_info->spacing = MACFONT_SPACING_MONO; + else if (INTEGERP (AREF (entity, FONT_SPACING_INDEX)) + && (XINT (AREF (entity, FONT_SPACING_INDEX)) + == FONT_SPACING_SYNTHETIC_MONO)) + macfont_info->spacing = MACFONT_SPACING_SYNTHETIC_MONO; + if (macfont_info->synthetic_italic_p || macfont_info->synthetic_bold_p) + macfont_info->antialias = MACFONT_ANTIALIAS_ON; + else + { + val = assq_no_quit (QCantialias, AREF (entity, FONT_EXTRA_INDEX)); + if (CONSP (val)) + macfont_info->antialias = + NILP (XCDR (val)) ? MACFONT_ANTIALIAS_OFF : MACFONT_ANTIALIAS_ON; + } + macfont_info->color_bitmap_p = 0; + if (sym_traits & MAC_FONT_TRAIT_COLOR_GLYPHS) + macfont_info->color_bitmap_p = 1; + + glyph = macfont_get_glyph_for_character (font, ' '); + if (glyph != kCGFontIndexInvalid) + font->space_width = macfont_glyph_extents (font, glyph, NULL, NULL, 0); + else + /* dirty workaround */ + font->space_width = pixel_size; + + total_width = font->space_width; + for (i = 1; i < 95; i++) + { + glyph = macfont_get_glyph_for_character (font, ' ' + i); + if (glyph == kCGFontIndexInvalid) + break; + total_width += macfont_glyph_extents (font, glyph, NULL, NULL, 0); + } + if (i == 95) + font->average_width = total_width / 95; + else + font->average_width = font->space_width; /* XXX */ + + if (!(macfont_info->screen_font + && mac_screen_font_get_metrics (macfont_info->screen_font, + &ascent, &descent, &leading))) + { + CFStringRef family_name; + + ascent = mac_font_get_ascent (macfont); + descent = mac_font_get_descent (macfont); + leading = mac_font_get_leading (macfont); + /* AppKit and WebKit do some adjustment to the heights of + Courier, Helvetica, and Times. */ + family_name = mac_font_copy_family_name (macfont); + if (family_name) + { + if ((CFStringCompare (family_name, CFSTR ("Courier"), 0) + == kCFCompareEqualTo) + || (CFStringCompare (family_name, CFSTR ("Helvetica"), 0) + == kCFCompareEqualTo) + || (CFStringCompare (family_name, CFSTR ("Times"), 0) + == kCFCompareEqualTo)) + ascent += (ascent + descent) * .15f; + else if (CFStringHasPrefix (family_name, CFSTR ("Hiragino"))) + { + leading *= .25f; + ascent += leading; + } + CFRelease (family_name); + } + } + font->ascent = ascent + 0.5f; + val = assq_no_quit (QCminspace, AREF (entity, FONT_EXTRA_INDEX)); + if (CONSP (val) && !NILP (XCDR (val))) + font->descent = descent + 0.5f; + else + font->descent = descent + leading + 0.5f; + font->height = font->ascent + font->descent; + + font->underline_position = - mac_font_get_underline_position (macfont) + 0.5f; + font->underline_thickness = mac_font_get_underline_thickness (macfont) + 0.5f; + + unblock_input (); + + /* Unfortunately Xft doesn't provide a way to get minimum char + width. So, we use space_width instead. */ + font->min_width = font->max_width = font->space_width; /* XXX */ + + font->baseline_offset = 0; + font->relative_compose = 0; + font->default_ascent = 0; + font->vertical_centering = 0; + + return font_object; +} + +static void +macfont_close (struct frame * f, struct font *font) +{ + struct macfont_info *macfont_info = (struct macfont_info *) font; + int i; + + block_input (); + CFRelease (macfont_info->macfont); + CGFontRelease (macfont_info->cgfont); + if (macfont_info->screen_font) + CFRelease (macfont_info->screen_font); + macfont_release_cache (macfont_info->cache); + for (i = 0; i < macfont_info->metrics_nrows; i++) + if (macfont_info->metrics[i]) + xfree (macfont_info->metrics[i]); + if (macfont_info->metrics) + xfree (macfont_info->metrics); + unblock_input (); +} + +static int +macfont_has_char (Lisp_Object font, int c) +{ + int result; + CFCharacterSetRef charset; + + block_input (); + if (FONT_ENTITY_P (font)) + { + Lisp_Object val; + CFStringRef name; + + val = assq_no_quit (QCfont_entity, AREF (font, FONT_EXTRA_INDEX)); + val = XCDR (val); + name = XSAVE_POINTER (val, 0); + charset = macfont_get_cf_charset_for_name (name); + } + else + charset = macfont_get_cf_charset (XFONT_OBJECT (font)); + + result = CFCharacterSetIsLongCharacterMember (charset, c); + unblock_input (); + + return result; +} + +static unsigned +macfont_encode_char (struct font *font, int c) +{ + struct macfont_info *macfont_info = (struct macfont_info *) font; + CGGlyph glyph; + + block_input (); + glyph = macfont_get_glyph_for_character (font, c); + unblock_input (); + + return glyph != kCGFontIndexInvalid ? glyph : FONT_INVALID_CODE; +} + +static int +macfont_text_extents (struct font *font, unsigned int *code, int nglyphs, + struct font_metrics *metrics) +{ + int width, i; + + block_input (); + width = macfont_glyph_extents (font, code[0], metrics, NULL, 0); + for (i = 1; i < nglyphs; i++) + { + struct font_metrics m; + int w = macfont_glyph_extents (font, code[i], metrics ? &m : NULL, + NULL, 0); + + if (metrics) + { + if (width + m.lbearing < metrics->lbearing) + metrics->lbearing = width + m.lbearing; + if (width + m.rbearing > metrics->rbearing) + metrics->rbearing = width + m.rbearing; + if (m.ascent > metrics->ascent) + metrics->ascent = m.ascent; + if (m.descent > metrics->descent) + metrics->descent = m.descent; + } + width += w; + } + unblock_input (); + + if (metrics) + metrics->width = width; + + return width; +} + +static int +macfont_draw (struct glyph_string *s, int from, int to, int x, int y, + bool with_background) +{ + struct frame * f = s->f; + struct macfont_info *macfont_info = (struct macfont_info *) s->font; + FontRef macfont = macfont_info->macfont; + CGContextRef context; + BOOL isComposite = s->first_glyph->type == COMPOSITE_GLYPH; + int end = isComposite ? s->cmp_to : s->nchars; + int len = end - s->cmp_from; + int i; + + block_input (); + + context = [[NSGraphicsContext currentContext] graphicsPort]; + CGContextSaveGState (context); + +#if 0 + if (s->num_clips > 0) + { + CGRect clips[2]; + + for (i = 0; i < s->num_clips; i++) + clips[i] = mac_rect_make (f, s->clip[i].left, s->clip[i].top, + s->clip[i].right - s->clip[i].left, + s->clip[i].bottom - s->clip[i].top); + CGContextClipToRects (context, clips, s->num_clips); + } +#endif + + if (with_background) + { + CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, s); + CGContextFillRect (context, + NSMakeRect (x, y, + s->width, FONT_HEIGHT (s->font))); + } + + if (macfont_info->cgfont) + { + CGGlyph *glyphs = alloca (sizeof (CGGlyph) * len); + CGPoint *positions = alloca (sizeof (CGPoint) * len); + CGFloat total_width = 0; + CGFloat font_size = mac_font_get_size (macfont); + CGAffineTransform atfm; + CGFloat advance_delta = 0; + int y_draw = -y-FONT_BASE (s->font); + int no_antialias_p = + (macfont_info->antialias == MACFONT_ANTIALIAS_OFF + || (macfont_info->antialias == MACFONT_ANTIALIAS_DEFAULT + && font_size <= macfont_antialias_threshold)); + + for (i = 0; i < len; i++) + { + int width; + + glyphs[i] = *(s->char2b + s->cmp_from + i); + width = (s->padding_p ? 1 + : macfont_glyph_extents (s->font, glyphs[i], + NULL, &advance_delta, + no_antialias_p)); + positions[i].x = total_width + advance_delta; + positions[i].y = 0; + total_width += width; + } + + CGContextScaleCTM (context, 1, -1); + CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, s); + if (macfont_info->synthetic_italic_p) + atfm = synthetic_italic_atfm; + else + atfm = CGAffineTransformIdentity; + if (macfont_info->synthetic_bold_p) + { + CGContextSetTextDrawingMode (context, kCGTextFillStroke); + CGContextSetLineWidth (context, synthetic_bold_factor * font_size); + CG_SET_STROKE_COLOR_WITH_GC_FOREGROUND (context, s); + } + if (no_antialias_p) + CGContextSetShouldAntialias (context, false); + + CGContextSetTextMatrix (context, atfm); + CGContextSetTextPosition (context, x, y_draw); + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 + if (macfont_info->color_bitmap_p +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 + && CTFontDrawGlyphs != NULL +#endif + ) + { + if (len > 0) + { + CTFontDrawGlyphs (macfont, glyphs, positions, len, context); + } + } + else +#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 */ + { + CGContextSetFont (context, macfont_info->cgfont); + CGContextSetFontSize (context, font_size); + CGContextShowGlyphsAtPositions (context, glyphs, positions, len); + } + } + + CGContextRestoreGState (context); + + unblock_input (); + + return len; +} + +Lisp_Object +macfont_shape (Lisp_Object lgstring) +{ + struct font *font; + struct macfont_info *macfont_info; + FontRef macfont; + ptrdiff_t glyph_len, len, i, j; + CFIndex nonbmp_len; + UniChar *unichars; + CFIndex *nonbmp_indices; + CFStringRef string; + CFIndex used = 0; + struct mac_glyph_layout *glyph_layouts; + + CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font); + macfont_info = (struct macfont_info *) font; + macfont = macfont_info->macfont; + + glyph_len = LGSTRING_GLYPH_LEN (lgstring); + nonbmp_len = 0; + for (i = 0; i < glyph_len; i++) + { + Lisp_Object lglyph = LGSTRING_GLYPH (lgstring, i); + + if (NILP (lglyph)) + break; + if (LGLYPH_CHAR (lglyph) >= 0x10000) + nonbmp_len++; + } + + len = i; + lint_assume (len <= TYPE_MAXIMUM (EMACS_INT) - 2); + + if (INT_MAX / 2 < len) + memory_full (SIZE_MAX); + + unichars = alloca (sizeof (UniChar) * (len + nonbmp_len)); + nonbmp_indices = alloca (sizeof (CFIndex) * (nonbmp_len + 1)); + for (i = j = 0; i < len; i++) + { + UTF32Char c = LGLYPH_CHAR (LGSTRING_GLYPH (lgstring, i)); + + if (macfont_store_utf32char_to_unichars (c, unichars + i + j) > 1) + { + nonbmp_indices[j] = i + j; + j++; + } + } + nonbmp_indices[j] = len + j; /* sentinel */ + + block_input (); + + string = CFStringCreateWithCharactersNoCopy (NULL, unichars, len + nonbmp_len, + kCFAllocatorNull); + if (string) + { + glyph_layouts = alloca (sizeof (struct mac_glyph_layout) * glyph_len); + if (macfont_info->screen_font) + used = mac_screen_font_shape (macfont_info->screen_font, string, + glyph_layouts, glyph_len); + else + used = mac_font_shape (macfont, string, glyph_layouts, glyph_len); + CFRelease (string); + } + + unblock_input (); + + if (used == 0) + return Qnil; + + block_input (); + + for (i = 0; i < used; i++) + { + Lisp_Object lglyph = LGSTRING_GLYPH (lgstring, i); + struct mac_glyph_layout *gl = glyph_layouts + i; + EMACS_INT from, to; + struct font_metrics metrics; + int xoff, yoff, wadjust; + + if (NILP (lglyph)) + { + lglyph = Fmake_vector (make_number (LGLYPH_SIZE), Qnil); + LGSTRING_SET_GLYPH (lgstring, i, lglyph); + } + + from = gl->comp_range.location; + /* Convert UTF-16 index to UTF-32. */ + j = 0; + while (nonbmp_indices[j] < from) + j++; + from -= j; + LGLYPH_SET_FROM (lglyph, from); + + to = gl->comp_range.location + gl->comp_range.length; + /* Convert UTF-16 index to UTF-32. */ + while (nonbmp_indices[j] < to) + j++; + to -= j; + LGLYPH_SET_TO (lglyph, to - 1); + + /* LGLYPH_CHAR is used in `describe-char' for checking whether + the composition is trivial. */ + { + UTF32Char c; + + if (unichars[gl->string_index] >= 0xD800 + && unichars[gl->string_index] < 0xDC00) + c = (((unichars[gl->string_index] - 0xD800) << 10) + + (unichars[gl->string_index + 1] - 0xDC00) + 0x10000); + else + c = unichars[gl->string_index]; + if (macfont_get_glyph_for_character (font, c) != gl->glyph_id) + c = 0; + LGLYPH_SET_CHAR (lglyph, c); + } + + { + unsigned long cc = gl->glyph_id; + LGLYPH_SET_CODE (lglyph, cc); + } + + macfont_glyph_extents (font, gl->glyph_id, &metrics, NULL, 0); + LGLYPH_SET_WIDTH (lglyph, metrics.width); + LGLYPH_SET_LBEARING (lglyph, metrics.lbearing); + LGLYPH_SET_RBEARING (lglyph, metrics.rbearing); + LGLYPH_SET_ASCENT (lglyph, metrics.ascent); + LGLYPH_SET_DESCENT (lglyph, metrics.descent); + + xoff = lround (gl->advance_delta); + yoff = lround (- gl->baseline_delta); + wadjust = lround (gl->advance); + if (xoff != 0 || yoff != 0 || wadjust != metrics.width) + { + Lisp_Object vec; + + vec = Fmake_vector (make_number (3), Qnil); + ASET (vec, 0, make_number (xoff)); + ASET (vec, 1, make_number (yoff)); + ASET (vec, 2, make_number (wadjust)); + LGLYPH_SET_ADJUSTMENT (lglyph, vec); + } + } + + unblock_input (); + + return make_number (used); +} + +/* Structures for the UVS subtable (format 14) in the cmap table. */ +typedef UInt8 UINT24[3]; + +#pragma pack(push, 1) +struct variation_selector_record +{ + UINT24 var_selector; + UInt32 default_uvs_offset, non_default_uvs_offset; +}; +struct uvs_table +{ + UInt16 format; + UInt32 length, num_var_selector_records; + struct variation_selector_record variation_selector_records[1]; +}; +#define SIZEOF_UVS_TABLE_HEADER \ + (sizeof (struct uvs_table) - sizeof (struct variation_selector_record)) + +struct unicode_value_range +{ + UINT24 start_unicode_value; + UInt8 additional_count; +}; +struct default_uvs_table { + UInt32 num_unicode_value_ranges; + struct unicode_value_range unicode_value_ranges[1]; +}; +#define SIZEOF_DEFAULT_UVS_TABLE_HEADER \ + (sizeof (struct default_uvs_table) - sizeof (struct unicode_value_range)) + +struct uvs_mapping +{ + UINT24 unicode_value; + UInt16 glyph_id; +}; +struct non_default_uvs_table +{ + UInt32 num_uvs_mappings; + struct uvs_mapping uvs_mappings[1]; +}; +#define SIZEOF_NON_DEFAULT_UVS_TABLE_HEADER \ + (sizeof (struct non_default_uvs_table) - sizeof (struct uvs_mapping)) +#pragma pack(pop) + +/* Read big endian values. The argument LVAL must be an lvalue. */ +/* I suppose OSReadBigInt* takes care of unaligned data. At least, we + can find "... = OSReadBigInt32(cdb, 2);" followed by "... = + OSReadBigInt16(cdb, 7);" in a sample code by Apple. */ +#define BUINT8_VALUE(lval) (*((UInt8 *) &(lval))) +#define BUINT16_VALUE(lval) OSReadBigInt16 (&(lval), 0) +/* Succeeding one byte should also be accessible. */ +#define BUINT24_VALUE(lval) (OSReadBigInt32 (&(lval), 0) >> 8) +#define BUINT32_VALUE(lval) OSReadBigInt32 (&(lval), 0) + +/* Return UVS subtable for the specified FONT. If the subtable is not + found or ill-formated, then return NULL. */ + +static CFDataRef +mac_font_copy_uvs_table (FontRef font) +{ + CFDataRef cmap_table, uvs_table = NULL; + + cmap_table = mac_font_copy_non_synthetic_table (font, cmapFontTableTag); + if (cmap_table) + { + sfntCMapHeader *cmap = (sfntCMapHeader *) CFDataGetBytePtr (cmap_table); + struct uvs_table *uvs; + struct variation_selector_record *records; + UInt32 cmap_len, ntables, i, uvs_offset, uvs_len, nrecords; + +#if __LP64__ + if (CFDataGetLength (cmap_table) > UINT32_MAX) + goto finish; +#endif + + cmap_len = CFDataGetLength (cmap_table); + if (sizeof_sfntCMapHeader > cmap_len) + goto finish; + + ntables = BUINT16_VALUE (cmap->numTables); + if (ntables > ((cmap_len - sizeof_sfntCMapHeader) + / sizeof_sfntCMapEncoding)) + goto finish; + + for (i = 0; i < ntables; i++) + if ((BUINT16_VALUE (cmap->encoding[i].platformID) + == kFontUnicodePlatform) + && (BUINT16_VALUE (cmap->encoding[i].scriptID) + == 5)) /* kFontUnicodeV4_0VariationSequenceSemantics */ + { + uvs_offset = BUINT32_VALUE (cmap->encoding[i].offset); + break; + } + if (i == ntables + || uvs_offset > cmap_len + || SIZEOF_UVS_TABLE_HEADER > cmap_len - uvs_offset) + goto finish; + + uvs = (struct uvs_table *) ((UInt8 *) cmap + uvs_offset); + uvs_len = BUINT32_VALUE (uvs->length); + if (uvs_len > cmap_len - uvs_offset + || SIZEOF_UVS_TABLE_HEADER > uvs_len) + goto finish; + + if (BUINT16_VALUE (uvs->format) != 14) + goto finish; + + nrecords = BUINT32_VALUE (uvs->num_var_selector_records); + if (nrecords > ((uvs_len - SIZEOF_UVS_TABLE_HEADER) + / sizeof (struct variation_selector_record))) + goto finish; + + records = uvs->variation_selector_records; + for (i = 0; i < nrecords; i++) + { + UInt32 default_uvs_offset, non_default_uvs_offset; + + default_uvs_offset = BUINT32_VALUE (records[i].default_uvs_offset); + if (default_uvs_offset) + { + struct default_uvs_table *default_uvs; + UInt32 nranges; + + if (default_uvs_offset > uvs_len + || (SIZEOF_DEFAULT_UVS_TABLE_HEADER + > uvs_len - default_uvs_offset)) + goto finish; + + default_uvs = ((struct default_uvs_table *) + ((UInt8 *) uvs + default_uvs_offset)); + nranges = BUINT32_VALUE (default_uvs->num_unicode_value_ranges); + if (nranges > ((uvs_len - default_uvs_offset + - SIZEOF_DEFAULT_UVS_TABLE_HEADER) + / sizeof (struct unicode_value_range))) + goto finish; + /* Now 2 * nranges can't overflow, so we can safely use + `(lo + hi) / 2' instead of `lo + (hi - lo) / 2' in + mac_font_get_glyphs_for_variants. */ + } + + non_default_uvs_offset = + BUINT32_VALUE (records[i].non_default_uvs_offset); + if (non_default_uvs_offset) + { + struct non_default_uvs_table *non_default_uvs; + UInt32 nmappings; + + if (non_default_uvs_offset > uvs_len + || (SIZEOF_NON_DEFAULT_UVS_TABLE_HEADER + > uvs_len - non_default_uvs_offset)) + goto finish; + + non_default_uvs = ((struct non_default_uvs_table *) + ((UInt8 *) uvs + non_default_uvs_offset)); + nmappings = BUINT32_VALUE (non_default_uvs->num_uvs_mappings); + if (nmappings > ((uvs_len - non_default_uvs_offset + - SIZEOF_NON_DEFAULT_UVS_TABLE_HEADER) + / sizeof (struct uvs_mapping))) + goto finish; + /* Now 2 * nmappings can't overflow, so we can safely + use `(lo + hi) / 2' instead of `lo + (hi - lo) / 2' + in mac_font_get_glyphs_for_variants. */ + } + } + + uvs_table = CFDataCreate (NULL, (UInt8 *) uvs, uvs_len); + + finish: + CFRelease (cmap_table); + } + + return uvs_table; +} + +/* Find an entry in the given UVS subtable UVS_TABLE for a variation + sequence consisting of the given base character C and each + variation selector SELECTORS[i] for 0 <= i < COUNT, and store the + result (explained below) into the corresponding GLYPHS[i]. If the + entry is found in the Default UVS Table, then the result is 0. If + the entry is found in the Non-Default UVS Table, then the result is + the associated glyph ID. Otherwise, kCGFontIndexInvalid. The + elements in SELECTORS must be sorted in strictly increasing + order. */ + +static void +mac_font_get_glyphs_for_variants (CFDataRef uvs_table, UTF32Char c, + const UTF32Char selectors[], CGGlyph glyphs[], + CFIndex count) +{ + struct uvs_table *uvs = (struct uvs_table *) CFDataGetBytePtr (uvs_table); + struct variation_selector_record *records = uvs->variation_selector_records; + CFIndex i; + UInt32 ir, nrecords; +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + dispatch_queue_t queue = + dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_group_t group = dispatch_group_create (); +#endif + + nrecords = BUINT32_VALUE (uvs->num_var_selector_records); + i = 0; + ir = 0; + while (i < count && ir < nrecords) + { + UInt32 default_uvs_offset, non_default_uvs_offset; + + if (selectors[i] < BUINT24_VALUE (records[ir].var_selector)) + { + glyphs[i++] = kCGFontIndexInvalid; + continue; + } + else if (selectors[i] > BUINT24_VALUE (records[ir].var_selector)) + { + ir++; + continue; + } + + /* selectors[i] == BUINT24_VALUE (records[ir].var_selector) */ + default_uvs_offset = BUINT32_VALUE (records[ir].default_uvs_offset); + non_default_uvs_offset = + BUINT32_VALUE (records[ir].non_default_uvs_offset); +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + dispatch_group_async (group, queue, ^{ +#endif + glyphs[i] = kCGFontIndexInvalid; + + if (default_uvs_offset) + { + struct default_uvs_table *default_uvs = + (struct default_uvs_table *) ((UInt8 *) uvs + + default_uvs_offset); + struct unicode_value_range *ranges = + default_uvs->unicode_value_ranges; + UInt32 lo, hi; + + lo = 0; + hi = BUINT32_VALUE (default_uvs->num_unicode_value_ranges); + while (lo < hi) + { + UInt32 mid = (lo + hi) / 2; + + if (c < BUINT24_VALUE (ranges[mid].start_unicode_value)) + hi = mid; + else + lo = mid + 1; + } + if (hi > 0 + && (c <= (BUINT24_VALUE (ranges[hi - 1].start_unicode_value) + + BUINT8_VALUE (ranges[hi - 1].additional_count)))) + glyphs[i] = 0; + } + + if (glyphs[i] == kCGFontIndexInvalid && non_default_uvs_offset) + { + struct non_default_uvs_table *non_default_uvs = + (struct non_default_uvs_table *) ((UInt8 *) uvs + + non_default_uvs_offset); + struct uvs_mapping *mappings = non_default_uvs->uvs_mappings; + UInt32 lo, hi; + + lo = 0; + hi = BUINT32_VALUE (non_default_uvs->num_uvs_mappings); + while (lo < hi) + { + UInt32 mid = (lo + hi) / 2; + + if (c < BUINT24_VALUE (mappings[mid].unicode_value)) + hi = mid; + else + lo = mid + 1; + } + if (hi > 0 && + BUINT24_VALUE (mappings[hi - 1].unicode_value) == c) + glyphs[i] = BUINT16_VALUE (mappings[hi - 1].glyph_id); + } +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + }); +#endif + i++; + ir++; + } + while (i < count) + glyphs[i++] = kCGFontIndexInvalid; +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + dispatch_group_wait (group, DISPATCH_TIME_FOREVER); + dispatch_release (group); +#endif +} + +static int +macfont_variation_glyphs (struct font *font, int c, unsigned variations[256]) +{ + CFDataRef uvs_table; + CharacterCollection uvs_collection; + int i, n = 0; + + block_input (); + uvs_table = macfont_get_uvs_table (font, &uvs_collection); + + if (uvs_table) + { + UTF32Char selectors[256]; + CGGlyph glyphs[256]; + + for (i = 0; i < 16; i++) + selectors[i] = 0xFE00 + i; + for (; i < 256; i++) + selectors[i] = 0xE0100 + (i - 16); + mac_font_get_glyphs_for_variants (uvs_table, c, selectors, glyphs, 256); + for (i = 0; i < 256; i++) + { + CGGlyph glyph = glyphs[i]; + + if (uvs_collection != MAC_CHARACTER_COLLECTION_IDENTITY_MAPPING + && glyph != kCGFontIndexInvalid) + glyph = macfont_get_glyph_for_cid (font, uvs_collection, glyph); + if (glyph == kCGFontIndexInvalid) + variations[i] = 0; + else + { + variations[i] = (glyph ? glyph + : macfont_get_glyph_for_character (font, c)); + n++; + } + } + } + unblock_input (); + + return n; +} + +static const char *const macfont_booleans[] = { + ":antialias", + ":minspace", + NULL, +}; + +static const char *const macfont_non_booleans[] = { + ":lang", + ":script", + ":destination", + NULL, +}; + +static void +macfont_filter_properties (Lisp_Object font, Lisp_Object alist) +{ + font_filter_properties (font, alist, macfont_booleans, macfont_non_booleans); +} + +static Boolean +mac_ctfont_descriptor_supports_languages (CTFontDescriptorRef descriptor, + CFArrayRef languages) +{ + Boolean result = true; + CFArrayRef desc_languages = + CTFontDescriptorCopyAttribute (descriptor, kCTFontLanguagesAttribute); + + if (desc_languages == NULL) + result = false; + else + { + CFIndex desc_languages_count, i, languages_count; + + desc_languages_count = CFArrayGetCount (desc_languages); + languages_count = CFArrayGetCount (languages); + for (i = 0; i < languages_count; i++) + if (!CFArrayContainsValue (desc_languages, + CFRangeMake (0, desc_languages_count), + CFArrayGetValueAtIndex (languages, i))) + { + result = false; + break; + } + CFRelease (desc_languages); + } + + return result; +} + +static CFStringRef +mac_ctfont_create_preferred_family_for_attributes (CFDictionaryRef attributes) +{ + CFStringRef result = NULL; + CFStringRef charset_string = + CFDictionaryGetValue (attributes, MAC_FONT_CHARACTER_SET_STRING_ATTRIBUTE); + CFIndex length; + + if (charset_string + && (length = CFStringGetLength (charset_string)) > 0) + { + CFAttributedStringRef attr_string = NULL; + CTLineRef ctline = NULL; + CFDictionaryRef attrs = + CFDictionaryCreate (NULL, NULL, NULL, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + + if (attrs) + { + attr_string = CFAttributedStringCreate (NULL, charset_string, attrs); + CFRelease (attrs); + } + if (attr_string) + { + ctline = CTLineCreateWithAttributedString (attr_string); + CFRelease (attr_string); + } + if (ctline) + { + CFArrayRef runs = CTLineGetGlyphRuns (ctline); + CFIndex i, nruns = CFArrayGetCount (runs); + CTFontRef font; + + for (i = 0; i < nruns; i++) + { + CTRunRef run = CFArrayGetValueAtIndex (runs, i); + CFDictionaryRef attributes = CTRunGetAttributes (run); + CTFontRef font_in_run; + + if (attributes == NULL) + break; + font_in_run = + CFDictionaryGetValue (attributes, kCTFontAttributeName); + if (font_in_run == NULL) + break; + if (i == 0) + font = font_in_run; + else if (!mac_ctfont_equal_in_postscript_name (font, font_in_run)) + break; + } + if (nruns > 0 && i == nruns) + result = CTFontCopyAttribute (font, kCTFontFamilyNameAttribute); + CFRelease (ctline); + } + } + + return result; +} + +static inline double +mac_ctfont_get_advance_width_for_glyph (CTFontRef font, CGGlyph glyph) +{ + return CTFontGetAdvancesForGlyphs (font, kCTFontDefaultOrientation, + &glyph, NULL, 1); +} + +static inline CGRect +mac_ctfont_get_bounding_rect_for_glyph (CTFontRef font, CGGlyph glyph) +{ + return CTFontGetBoundingRectsForGlyphs (font, kCTFontDefaultOrientation, + &glyph, NULL, 1); +} + +static CFArrayRef +mac_ctfont_create_available_families (void) +{ + CFMutableArrayRef families = NULL; + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + if (CTFontManagerCopyAvailableFontFamilyNames != NULL) +#endif + { + CFArrayRef orig_families = CTFontManagerCopyAvailableFontFamilyNames (); + + if (orig_families) + { + CFIndex i, count = CFArrayGetCount (orig_families); + + families = CFArrayCreateMutable (NULL, count, &kCFTypeArrayCallBacks); + if (families) + for (i = 0; i < count; i++) + { + CFStringRef family = CFArrayGetValueAtIndex (orig_families, i); + + if (!CFStringHasPrefix (family, CFSTR (".")) + && (CTFontManagerCompareFontFamilyNames (family, + CFSTR ("LastResort"), + NULL) + != kCFCompareEqualTo)) + CFArrayAppendValue (families, family); + } + CFRelease (orig_families); + } + } +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + else /* CTFontManagerCopyAvailableFontFamilyNames == NULL */ +#endif +#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 */ +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + { + CTFontCollectionRef collection; + CFArrayRef descs = NULL; + + collection = CTFontCollectionCreateFromAvailableFonts (NULL); + if (collection) + { + descs = CTFontCollectionCreateMatchingFontDescriptors (collection); + CFRelease (collection); + } + if (descs) + { + CFIndex i, count = CFArrayGetCount (descs); + + families = CFArrayCreateMutable (NULL, count, &kCFTypeArrayCallBacks); + if (families) + for (i = 0; i < count; i++) + { + FontDescriptorRef desc = CFArrayGetValueAtIndex (descs, i); + CFStringRef name = + mac_font_descriptor_copy_attribute (desc, + MAC_FONT_FAMILY_NAME_ATTRIBUTE); + + if (name) + { + CFIndex p, limit = CFArrayGetCount (families); + + p = CFArrayBSearchValues (families, CFRangeMake (0, limit), + (const void *) name, + mac_font_family_compare, NULL); + if (p >= limit) + CFArrayAppendValue (families, name); + else if (mac_font_family_compare + (CFArrayGetValueAtIndex (families, p), + name, NULL) != kCFCompareEqualTo) + CFArrayInsertValueAtIndex (families, p, name); + CFRelease (name); + } + } + CFRelease (descs); + } + } +#endif + + return families; +} + +static Boolean +mac_ctfont_equal_in_postscript_name (CTFontRef font1, CTFontRef font2) +{ + Boolean result; + CFStringRef name1, name2; + + if (font1 == font2) + return true; + + result = false; + name1 = CTFontCopyPostScriptName (font1); + if (name1) + { + name2 = CTFontCopyPostScriptName (font2); + if (name2) + { + result = (CFStringCompare (name1, name2, 0) == kCFCompareEqualTo); + CFRelease (name2); + } + CFRelease (name1); + } + + return result; +} + +static CTLineRef +mac_ctfont_create_line_with_string_and_font (CFStringRef string, + CTFontRef macfont) +{ + CFStringRef keys[] = {kCTFontAttributeName, kCTKernAttributeName}; + CFTypeRef values[] = {NULL, NULL}; + CFDictionaryRef attributes = NULL; + CFAttributedStringRef attr_string = NULL; + CTLineRef ctline = NULL; + float float_zero = 0.0f; + + values[0] = macfont; + values[1] = CFNumberCreate (NULL, kCFNumberFloatType, &float_zero); + if (values[1]) + { + attributes = CFDictionaryCreate (NULL, (const void **) keys, + (const void **) values, + sizeof (keys) / sizeof (keys[0]), + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + CFRelease (values[1]); + } + if (attributes) + { + attr_string = CFAttributedStringCreate (NULL, string, attributes); + CFRelease (attributes); + } + if (attr_string) + { + ctline = CTLineCreateWithAttributedString (attr_string); + CFRelease (attr_string); + } + if (ctline) + { + /* Abandon if ctline contains some fonts other than the + specified one. */ + CFArrayRef runs = CTLineGetGlyphRuns (ctline); + CFIndex i, nruns = CFArrayGetCount (runs); + + for (i = 0; i < nruns; i++) + { + CTRunRef run = CFArrayGetValueAtIndex (runs, i); + CFDictionaryRef attributes = CTRunGetAttributes (run); + CTFontRef font_in_run; + + if (attributes == NULL) + break; + font_in_run = + CFDictionaryGetValue (attributes, kCTFontAttributeName); + if (font_in_run == NULL) + break; + if (!mac_ctfont_equal_in_postscript_name (macfont, font_in_run)) + break; + } + if (i < nruns) + { + CFRelease (ctline); + ctline = NULL; + } + } + + return ctline; +} + +CFIndex +mac_ctfont_shape (CTFontRef font, CFStringRef string, + struct mac_glyph_layout *glyph_layouts, CFIndex glyph_len) +{ + CFIndex used, result = 0; + CTLineRef ctline = mac_ctfont_create_line_with_string_and_font (string, font); + + if (ctline == NULL) + return 0; + + used = CTLineGetGlyphCount (ctline); + if (used <= glyph_len) + { + CFArrayRef ctruns = CTLineGetGlyphRuns (ctline); + CFIndex k, ctrun_count = CFArrayGetCount (ctruns); + CGFloat total_advance = 0; + CFIndex total_glyph_count = 0; + + for (k = 0; k < ctrun_count; k++) + { + CTRunRef ctrun = CFArrayGetValueAtIndex (ctruns, k); + CFIndex i, min_location, glyph_count = CTRunGetGlyphCount (ctrun); + struct mac_glyph_layout *glbuf = glyph_layouts + total_glyph_count; + CFRange string_range, comp_range, range; + CFIndex *permutation; + + if (CTRunGetStatus (ctrun) & kCTRunStatusRightToLeft) + permutation = xmalloc (sizeof (CFIndex) * glyph_count); + else + permutation = NULL; + +#define RIGHT_TO_LEFT_P permutation + + /* Now the `comp_range' member of struct mac_glyph_layout is + temporarily used as a work area such that: + glbuf[i].comp_range.location = + min {compRange[i + 1].location, ..., + compRange[glyph_count - 1].location, + maxRange (stringRangeForCTRun)} + glbuf[i].comp_range.length = maxRange (compRange[i]) + where compRange[i] is the range of composed characters + containing i-th glyph. */ + string_range = CTRunGetStringRange (ctrun); + min_location = string_range.location + string_range.length; + for (i = 0; i < glyph_count; i++) + { + struct mac_glyph_layout *gl = glbuf + glyph_count - i - 1; + CFIndex glyph_index; + CFRange rng; + + if (!RIGHT_TO_LEFT_P) + glyph_index = glyph_count - i - 1; + else + glyph_index = i; + CTRunGetStringIndices (ctrun, CFRangeMake (glyph_index, 1), + &gl->string_index); + rng = + CFStringGetRangeOfComposedCharactersAtIndex (string, + gl->string_index); + gl->comp_range.location = min_location; + gl->comp_range.length = rng.location + rng.length; + if (rng.location < min_location) + min_location = rng.location; + } + + /* Fill the `comp_range' member of struct mac_glyph_layout, + and setup a permutation for right-to-left text. */ + comp_range = CFRangeMake (string_range.location, 0); + range = CFRangeMake (0, 0); + while (1) + { + struct mac_glyph_layout *gl = + glbuf + range.location + range.length; + + if (gl->comp_range.length + > comp_range.location + comp_range.length) + comp_range.length = gl->comp_range.length - comp_range.location; + min_location = gl->comp_range.location; + range.length++; + + if (min_location >= comp_range.location + comp_range.length) + { + comp_range.length = min_location - comp_range.location; + for (i = 0; i < range.length; i++) + { + glbuf[range.location + i].comp_range = comp_range; + if (RIGHT_TO_LEFT_P) + permutation[range.location + i] = + range.location + range.length - i - 1; + } + + comp_range = CFRangeMake (min_location, 0); + range.location += range.length; + range.length = 0; + if (range.location == glyph_count) + break; + } + } + + /* Then fill the remaining members. */ + for (range = CFRangeMake (0, 1); range.location < glyph_count; + range.location++) + { + struct mac_glyph_layout *gl; + CGPoint position; + + if (!RIGHT_TO_LEFT_P) + gl = glbuf + range.location; + else + { + CFIndex src, dest; + + src = glyph_count - 1 - range.location; + dest = permutation[src]; + gl = glbuf + dest; + if (src < dest) + { + CFIndex tmp = gl->string_index; + + gl->string_index = glbuf[src].string_index; + glbuf[src].string_index = tmp; + } + } + CTRunGetGlyphs (ctrun, range, &gl->glyph_id); + + CTRunGetPositions (ctrun, range, &position); + gl->advance_delta = position.x - total_advance; + gl->baseline_delta = position.y; + gl->advance = (gl->advance_delta + + CTRunGetTypographicBounds (ctrun, range, + NULL, NULL, NULL)); + total_advance += gl->advance; + } + + if (RIGHT_TO_LEFT_P) + xfree (permutation); + +#undef RIGHT_TO_LEFT_P + + total_glyph_count += glyph_count; + } + + result = used; + } + CFRelease (ctline); + + return result; +} + +/* The function below seems to cause a memory leak for the CFString + created by CFStringCreateWithCharacters as of Mac OS X 10.5.8 and + 10.6.3. For now, we use the NSGlyphInfo version instead. */ +#if USE_CT_GLYPH_INFO +CGGlyph +mac_ctfont_get_glyph_for_cid (CTFontRef font, CTCharacterCollection collection, + CGFontIndex cid) +{ + CGGlyph result = kCGFontIndexInvalid; + UniChar characters[] = {0xfffd}; + CFStringRef string; + CFAttributedStringRef attr_string = NULL; + CTLineRef ctline = NULL; + + string = CFStringCreateWithCharacters (NULL, characters, + sizeof (characters) + / sizeof (characters[0])); + if (string) + { + CTGlyphInfoRef glyph_info = + CTGlyphInfoCreateWithCharacterIdentifier (cid, collection, string); + CFDictionaryRef attributes = NULL; + + if (glyph_info) + { + CFStringRef keys[] = {kCTFontAttributeName, + kCTGlyphInfoAttributeName}; + CFTypeRef values[] = {font, glyph_info}; + + attributes = CFDictionaryCreate (NULL, (const void **) keys, + (const void **) values, + sizeof (keys) / sizeof (keys[0]), + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + CFRelease (glyph_info); + } + if (attributes) + { + attr_string = CFAttributedStringCreate (NULL, string, attributes); + CFRelease (attributes); + } + CFRelease (string); + } + if (attr_string) + { + ctline = CTLineCreateWithAttributedString (attr_string); + CFRelease (attr_string); + } + if (ctline) + { + CFArrayRef runs = CTLineGetGlyphRuns (ctline); + + if (CFArrayGetCount (runs) > 0) + { + CTRunRef run = CFArrayGetValueAtIndex (runs, 0); + CFDictionaryRef attributes = CTRunGetAttributes (run); + + if (attributes) + { + CTFontRef font_in_run = + CFDictionaryGetValue (attributes, kCTFontAttributeName); + + if (font_in_run + && mac_ctfont_equal_in_postscript_name (font_in_run, font)) + { + CTRunGetGlyphs (run, CFRangeMake (0, 1), &result); + if (result >= CTFontGetGlyphCount (font)) + result = kCGFontIndexInvalid; + } + } + } + CFRelease (ctline); + } + + return result; +} +#endif + +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +static inline int +mac_font_family_group (CFStringRef family) +{ + if (CFStringHasPrefix (family, CFSTR ("#"))) + return 2; + else + { + CFRange range; + + range = CFStringFind (family, CFSTR ("Apple"), + kCFCompareCaseInsensitive | kCFCompareAnchored); + if (range.location != kCFNotFound) + return 1; + + return 0; + } +} + +CFComparisonResult +mac_font_family_compare (const void *val1, const void *val2, void *context) +{ + CFStringRef family1 = (CFStringRef) val1, family2 = (CFStringRef) val2; + int group1, group2; + + group1 = mac_font_family_group (family1); + group2 = mac_font_family_group (family2); + if (group1 < group2) + return kCFCompareLessThan; + if (group1 > group2) + return kCFCompareGreaterThan; + return CFStringCompare (family1, family2, kCFCompareCaseInsensitive); +} +#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */ + +void * +macfont_get_nsctfont (struct font *font) +{ + struct macfont_info *macfont_info = (struct macfont_info *) font; + FontRef macfont = macfont_info->macfont; + + return (void *) macfont; +} + +void +mac_register_font_driver (struct frame *f) +{ + register_font_driver (&macfont_driver, f); +} + +#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + + +void +syms_of_macfont (void) +{ +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + static struct font_driver mac_font_driver; + + DEFSYM (Qmac_ct, "mac-ct"); + macfont_driver.type = Qmac_ct; + register_font_driver (&macfont_driver, NULL); + + DEFSYM (QCdestination, ":destination"); + DEFSYM (QCminspace, ":minspace"); +#endif +} diff --git a/src/macuvs.h b/src/macuvs.h new file mode 100644 index 00000000000..20879888f9a --- /dev/null +++ b/src/macuvs.h @@ -0,0 +1,9215 @@ +/* UVS (Unicode Variation Sequence) table definitions. + +This file is part of GNU Emacs. */ + +/* This was generated from the Ideographic Variation Database file at + http://www.unicode.org/ivd/data/2012-03-02/IVD_Sequences.txt + using admin/mac/uvs.el in GNU Emacs, and distributed under + the Terms of Use in http://www.unicode.org/terms_of_use.html. */ +static const unsigned char mac_uvs_table_adobe_japan1_bytes[] = + { + 0x00, 0x0e, 0x00, 0x01, 0x1f, 0x9e, 0x00, 0x00, + 0x00, 0x0f, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xaf, 0x0e, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x9a, + 0x0e, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x1c, 0x31, 0x0e, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x1e, 0xb0, 0x0e, 0x01, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, + 0x09, 0x0e, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x1f, 0x2b, 0x0e, 0x01, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x43, 0x0e, + 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x1f, 0x51, 0x0e, 0x01, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x1f, 0x5f, 0x0e, 0x01, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x68, + 0x0e, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x1f, 0x71, 0x0e, 0x01, 0x0b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x1f, 0x7a, 0x0e, 0x01, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, + 0x83, 0x0e, 0x01, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x1f, 0x8c, 0x0e, 0x01, 0x0e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x95, 0x00, + 0x00, 0x33, 0xfb, 0x00, 0x34, 0x02, 0x35, 0x82, + 0x00, 0x34, 0x05, 0x3c, 0x1b, 0x00, 0x34, 0x06, + 0x43, 0x5a, 0x00, 0x34, 0x27, 0x36, 0x56, 0x00, + 0x34, 0x2c, 0x43, 0x5e, 0x00, 0x34, 0x2e, 0x37, + 0x88, 0x00, 0x34, 0x68, 0x36, 0xdf, 0x00, 0x34, + 0x6a, 0x43, 0x75, 0x00, 0x34, 0x88, 0x3c, 0x52, + 0x00, 0x34, 0x92, 0x43, 0x8e, 0x00, 0x34, 0xb5, + 0x41, 0x99, 0x00, 0x34, 0xbc, 0x43, 0x97, 0x00, + 0x34, 0xc1, 0x47, 0xd0, 0x00, 0x34, 0xc7, 0x43, + 0x9b, 0x00, 0x34, 0xdb, 0x3c, 0x41, 0x00, 0x35, + 0x1f, 0x36, 0x29, 0x00, 0x35, 0x3e, 0x37, 0x1e, + 0x00, 0x35, 0x5d, 0x43, 0xbd, 0x00, 0x35, 0x5e, + 0x43, 0xbe, 0x00, 0x35, 0x63, 0x43, 0xc0, 0x00, + 0x35, 0x6e, 0x43, 0xc4, 0x00, 0x35, 0xa6, 0x43, + 0xd9, 0x00, 0x35, 0xa8, 0x43, 0xdb, 0x00, 0x35, + 0xc5, 0x43, 0xe1, 0x00, 0x35, 0xda, 0x43, 0xea, + 0x00, 0x35, 0xde, 0x4e, 0x63, 0x00, 0x35, 0xf4, + 0x43, 0xf3, 0x00, 0x36, 0x05, 0x43, 0xfa, 0x00, + 0x36, 0x14, 0x4a, 0xbb, 0x00, 0x36, 0x4a, 0x44, + 0x21, 0x00, 0x36, 0x91, 0x44, 0x41, 0x00, 0x36, + 0x96, 0x44, 0x45, 0x00, 0x36, 0x99, 0x44, 0x43, + 0x00, 0x36, 0xcf, 0x44, 0x56, 0x00, 0x37, 0x61, + 0x44, 0x78, 0x00, 0x37, 0x62, 0x44, 0x79, 0x00, + 0x37, 0x6b, 0x44, 0x7d, 0x00, 0x37, 0x6c, 0x44, + 0x7c, 0x00, 0x37, 0x75, 0x44, 0x80, 0x00, 0x37, + 0x8d, 0x36, 0x1a, 0x00, 0x37, 0xc1, 0x44, 0x8e, + 0x00, 0x37, 0xe2, 0x37, 0x2b, 0x00, 0x37, 0xe8, + 0x44, 0xa2, 0x00, 0x37, 0xf4, 0x44, 0xa5, 0x00, + 0x37, 0xfd, 0x44, 0xa8, 0x00, 0x38, 0x00, 0x44, + 0xaa, 0x00, 0x38, 0x2f, 0x44, 0xb4, 0x00, 0x38, + 0x36, 0x44, 0xb5, 0x00, 0x38, 0x40, 0x44, 0xb6, + 0x00, 0x38, 0x5c, 0x44, 0xba, 0x00, 0x38, 0x61, + 0x44, 0xbc, 0x00, 0x38, 0xa1, 0x4e, 0xcb, 0x00, + 0x38, 0xad, 0x4a, 0xbc, 0x00, 0x38, 0xfa, 0x36, + 0x1c, 0x00, 0x39, 0x17, 0x44, 0xd9, 0x00, 0x39, + 0x1a, 0x44, 0xdc, 0x00, 0x39, 0x6f, 0x44, 0xeb, + 0x00, 0x39, 0xa4, 0x4e, 0x9a, 0x00, 0x39, 0xb8, + 0x4e, 0x9b, 0x00, 0x3a, 0x5c, 0x4e, 0x9f, 0x00, + 0x3a, 0x6e, 0x45, 0x31, 0x00, 0x3a, 0x73, 0x45, + 0x34, 0x00, 0x3a, 0x85, 0x4e, 0xae, 0x00, 0x3a, + 0xc4, 0x4e, 0xa7, 0x00, 0x3a, 0xcb, 0x4e, 0xa8, + 0x00, 0x3a, 0xd6, 0x45, 0x43, 0x00, 0x3a, 0xd7, + 0x45, 0x5e, 0x00, 0x3a, 0xea, 0x45, 0x4d, 0x00, + 0x3a, 0xf3, 0x3c, 0x40, 0x00, 0x3b, 0x0e, 0x45, + 0x58, 0x00, 0x3b, 0x1a, 0x45, 0x5c, 0x00, 0x3b, + 0x1c, 0x45, 0x5d, 0x00, 0x3b, 0x22, 0x3c, 0x49, + 0x00, 0x3b, 0x6d, 0x45, 0x8c, 0x00, 0x3b, 0x77, + 0x45, 0x85, 0x00, 0x3b, 0x87, 0x45, 0xa2, 0x00, + 0x3b, 0x88, 0x36, 0x8d, 0x00, 0x3b, 0x8d, 0x45, + 0xa4, 0x00, 0x3b, 0xa4, 0x45, 0xaa, 0x00, 0x3b, + 0xb6, 0x42, 0x0e, 0x00, 0x3b, 0xc3, 0x42, 0x0f, + 0x00, 0x3b, 0xcd, 0x45, 0xb8, 0x00, 0x3b, 0xf0, + 0x45, 0xc9, 0x00, 0x3b, 0xf3, 0x4e, 0xb7, 0x00, + 0x3c, 0x0f, 0x42, 0x17, 0x00, 0x3c, 0x26, 0x45, + 0xdf, 0x00, 0x3c, 0xc3, 0x45, 0xfc, 0x00, 0x3c, + 0xd2, 0x46, 0x01, 0x00, 0x3d, 0x11, 0x46, 0x25, + 0x00, 0x3d, 0x1e, 0x46, 0x30, 0x00, 0x3d, 0x31, + 0x4e, 0xbe, 0x00, 0x3d, 0x4e, 0x1d, 0xe7, 0x00, + 0x3d, 0x64, 0x46, 0x4a, 0x00, 0x3d, 0x9a, 0x46, + 0x58, 0x00, 0x3d, 0xc0, 0x46, 0x6a, 0x00, 0x3d, + 0xcc, 0x4a, 0xbd, 0x00, 0x3d, 0xd4, 0x46, 0x6f, + 0x00, 0x3e, 0x05, 0x46, 0x7b, 0x00, 0x3e, 0x3f, + 0x42, 0x48, 0x00, 0x3e, 0x40, 0x4e, 0xca, 0x00, + 0x3e, 0x60, 0x46, 0x8b, 0x00, 0x3e, 0x66, 0x46, + 0x8d, 0x00, 0x3e, 0x68, 0x46, 0x8e, 0x00, 0x3e, + 0x83, 0x46, 0x95, 0x00, 0x3e, 0x8a, 0x3c, 0x43, + 0x00, 0x3e, 0x94, 0x46, 0x9b, 0x00, 0x3e, 0xda, + 0x3c, 0x48, 0x00, 0x3f, 0x57, 0x46, 0xcb, 0x00, + 0x3f, 0x72, 0x42, 0x58, 0x00, 0x3f, 0x75, 0x46, + 0xd9, 0x00, 0x3f, 0x77, 0x46, 0xdb, 0x00, 0x3f, + 0xae, 0x46, 0xed, 0x00, 0x3f, 0xb1, 0x37, 0x54, + 0x00, 0x3f, 0xc9, 0x46, 0xf8, 0x00, 0x3f, 0xd7, + 0x46, 0xfd, 0x00, 0x3f, 0xdc, 0x4a, 0xbe, 0x00, + 0x40, 0x39, 0x47, 0x0f, 0x00, 0x40, 0x58, 0x47, + 0x16, 0x00, 0x40, 0x93, 0x3c, 0x4c, 0x00, 0x41, + 0x03, 0x3c, 0x4f, 0x00, 0x41, 0x05, 0x47, 0x3b, + 0x00, 0x41, 0x48, 0x47, 0x47, 0x00, 0x41, 0x4f, + 0x47, 0x4a, 0x00, 0x41, 0x63, 0x47, 0x4e, 0x00, + 0x41, 0xb4, 0x47, 0x5d, 0x00, 0x41, 0xbf, 0x47, + 0x60, 0x00, 0x41, 0xe6, 0x47, 0x6b, 0x00, 0x41, + 0xee, 0x47, 0x6f, 0x00, 0x41, 0xf3, 0x47, 0x6c, + 0x00, 0x42, 0x07, 0x47, 0x76, 0x00, 0x42, 0x0e, + 0x47, 0x79, 0x00, 0x42, 0x64, 0x37, 0x60, 0x00, + 0x42, 0x93, 0x3c, 0x50, 0x00, 0x42, 0xc6, 0x47, + 0x9f, 0x00, 0x42, 0xd6, 0x47, 0xaa, 0x00, 0x42, + 0xdd, 0x47, 0xae, 0x00, 0x43, 0x02, 0x47, 0xbc, + 0x00, 0x43, 0x2b, 0x47, 0xc9, 0x00, 0x43, 0x43, + 0x47, 0xcb, 0x00, 0x43, 0xee, 0x47, 0xf7, 0x00, + 0x43, 0xf0, 0x47, 0xfa, 0x00, 0x44, 0x08, 0x48, + 0x00, 0x00, 0x44, 0x0c, 0x3c, 0x42, 0x00, 0x44, + 0x17, 0x48, 0x02, 0x00, 0x44, 0x1c, 0x48, 0x03, + 0x00, 0x44, 0x22, 0x48, 0x05, 0x00, 0x44, 0x53, + 0x37, 0x73, 0x00, 0x44, 0x5b, 0x42, 0xa4, 0x00, + 0x44, 0x76, 0x48, 0x1c, 0x00, 0x44, 0x7a, 0x48, + 0x1d, 0x00, 0x44, 0x91, 0x48, 0x23, 0x00, 0x44, + 0xb3, 0x48, 0x3e, 0x00, 0x44, 0xbe, 0x48, 0x3c, + 0x00, 0x44, 0xd4, 0x48, 0x3d, 0x00, 0x45, 0x08, + 0x48, 0x5c, 0x00, 0x45, 0x0d, 0x48, 0x58, 0x00, + 0x45, 0x25, 0x37, 0x7e, 0x00, 0x45, 0x43, 0x48, + 0x6c, 0x00, 0x45, 0x7a, 0x3c, 0x4b, 0x00, 0x45, + 0x9d, 0x42, 0xd4, 0x00, 0x45, 0xb8, 0x48, 0xa0, + 0x00, 0x45, 0xbe, 0x4a, 0xbf, 0x00, 0x45, 0xe5, + 0x48, 0xba, 0x00, 0x45, 0xea, 0x42, 0xd9, 0x00, + 0x46, 0x0f, 0x48, 0xca, 0x00, 0x46, 0x10, 0x4a, + 0xc0, 0x00, 0x46, 0x41, 0x48, 0xd8, 0x00, 0x46, + 0x65, 0x3c, 0x4e, 0x00, 0x46, 0xa1, 0x48, 0xe9, + 0x00, 0x46, 0xae, 0x3c, 0x51, 0x00, 0x46, 0xaf, + 0x48, 0xed, 0x00, 0x47, 0x0c, 0x49, 0x02, 0x00, + 0x47, 0x1f, 0x4e, 0xfb, 0x00, 0x47, 0x64, 0x49, + 0x18, 0x00, 0x47, 0xe6, 0x37, 0x90, 0x00, 0x47, + 0xfd, 0x49, 0x24, 0x00, 0x48, 0x16, 0x49, 0x2e, + 0x00, 0x48, 0x1e, 0x4f, 0x01, 0x00, 0x48, 0x44, + 0x42, 0xf5, 0x00, 0x48, 0x4e, 0x49, 0x3a, 0x00, + 0x48, 0xb5, 0x49, 0x5b, 0x00, 0x49, 0xb0, 0x43, + 0x1f, 0x00, 0x49, 0xe7, 0x49, 0xd2, 0x00, 0x49, + 0xfa, 0x49, 0xd6, 0x00, 0x4a, 0x04, 0x49, 0xdb, + 0x00, 0x4a, 0x29, 0x49, 0xde, 0x00, 0x4a, 0xbc, + 0x49, 0xf6, 0x00, 0x4b, 0x38, 0x35, 0xdf, 0x00, + 0x4b, 0x3b, 0x4a, 0x0e, 0x00, 0x4b, 0x7e, 0x4a, + 0xc1, 0x00, 0x4b, 0xc2, 0x4a, 0x33, 0x00, 0x4b, + 0xca, 0x4a, 0x35, 0x00, 0x4b, 0xd2, 0x4a, 0x37, + 0x00, 0x4b, 0xe8, 0x3c, 0x46, 0x00, 0x4c, 0x17, + 0x43, 0x34, 0x00, 0x4c, 0x20, 0x4a, 0x48, 0x00, + 0x4c, 0x38, 0x4a, 0xc2, 0x00, 0x4c, 0xc4, 0x4a, + 0x84, 0x00, 0x4c, 0xd1, 0x4a, 0x87, 0x00, 0x4c, + 0xe1, 0x4a, 0xc3, 0x00, 0x4d, 0x07, 0x4a, 0x9b, + 0x00, 0x4d, 0x77, 0x4a, 0xab, 0x00, 0x4e, 0x00, + 0x04, 0xb0, 0x00, 0x4e, 0x01, 0x0b, 0xb8, 0x00, + 0x4e, 0x02, 0x43, 0x52, 0x00, 0x4e, 0x03, 0x08, + 0xe3, 0x00, 0x4e, 0x04, 0x37, 0xd8, 0x00, 0x4e, + 0x05, 0x37, 0xd9, 0x00, 0x4e, 0x07, 0x0e, 0xaa, + 0x00, 0x4e, 0x08, 0x09, 0xce, 0x00, 0x4e, 0x09, + 0x08, 0x7e, 0x00, 0x4e, 0x0a, 0x09, 0xcd, 0x00, + 0x4e, 0x0b, 0x05, 0x3c, 0x00, 0x4e, 0x0c, 0x4a, + 0xc4, 0x00, 0x4e, 0x0d, 0x0d, 0xc6, 0x00, 0x4e, + 0x0e, 0x0f, 0x29, 0x00, 0x4e, 0x0f, 0x43, 0x53, + 0x00, 0x4e, 0x10, 0x0f, 0xfb, 0x00, 0x4e, 0x11, + 0x04, 0xd1, 0x00, 0x4e, 0x12, 0x43, 0x54, 0x00, + 0x4e, 0x14, 0x05, 0xcc, 0x00, 0x4e, 0x15, 0x0f, + 0xfc, 0x00, 0x4e, 0x16, 0x0a, 0x48, 0x00, 0x4e, + 0x17, 0x10, 0xd7, 0x00, 0x4e, 0x18, 0x06, 0x70, + 0x00, 0x4e, 0x19, 0x0e, 0x0a, 0x00, 0x4e, 0x1e, + 0x09, 0xcf, 0x00, 0x4e, 0x1f, 0x37, 0xda, 0x00, + 0x4e, 0x21, 0x0f, 0x86, 0x00, 0x4e, 0x23, 0x4a, + 0xc5, 0x00, 0x4e, 0x24, 0x4a, 0xc6, 0x00, 0x4e, + 0x26, 0x0e, 0x12, 0x00, 0x4e, 0x28, 0x20, 0xb3, + 0x00, 0x4e, 0x29, 0x43, 0x55, 0x00, 0x4e, 0x2a, + 0x0f, 0xfd, 0x00, 0x4e, 0x2b, 0x37, 0xdb, 0x00, + 0x4e, 0x2c, 0x37, 0x4d, 0x00, 0x4e, 0x2d, 0x0b, + 0xa4, 0x00, 0x4e, 0x2e, 0x43, 0x56, 0x00, 0x4e, + 0x2f, 0x37, 0xdc, 0x00, 0x4e, 0x30, 0x37, 0xdd, + 0x00, 0x4e, 0x31, 0x0f, 0xfe, 0x00, 0x4e, 0x32, + 0x06, 0xf2, 0x00, 0x4e, 0x35, 0x52, 0x53, 0x00, + 0x4e, 0x36, 0x0f, 0xff, 0x00, 0x4e, 0x37, 0x36, + 0x9d, 0x00, 0x4e, 0x38, 0x06, 0x19, 0x00, 0x4e, + 0x39, 0x0b, 0x6e, 0x00, 0x4e, 0x3b, 0x09, 0x13, + 0x00, 0x4e, 0x3c, 0x10, 0x00, 0x00, 0x4e, 0x3f, + 0x10, 0x01, 0x00, 0x4e, 0x40, 0x37, 0xde, 0x00, + 0x4e, 0x41, 0x37, 0xdf, 0x00, 0x4e, 0x42, 0x10, + 0x02, 0x00, 0x4e, 0x43, 0x0c, 0xeb, 0x00, 0x4e, + 0x44, 0x37, 0xe0, 0x00, 0x4e, 0x45, 0x06, 0x71, + 0x00, 0x4e, 0x47, 0x43, 0x57, 0x00, 0x4e, 0x48, + 0x37, 0x2e, 0x00, 0x4e, 0x4b, 0x0c, 0xed, 0x00, + 0x4e, 0x4d, 0x0c, 0xbb, 0x00, 0x4e, 0x4e, 0x07, + 0x77, 0x00, 0x4e, 0x4f, 0x0e, 0x61, 0x00, 0x4e, + 0x51, 0x43, 0x59, 0x00, 0x4e, 0x55, 0x19, 0x50, + 0x00, 0x4e, 0x56, 0x10, 0x03, 0x00, 0x4e, 0x57, + 0x09, 0xd0, 0x00, 0x4e, 0x58, 0x10, 0x04, 0x00, + 0x4e, 0x59, 0x05, 0x35, 0x00, 0x4e, 0x5a, 0x37, + 0xe1, 0x00, 0x4e, 0x5c, 0x52, 0x54, 0x00, 0x4e, + 0x5d, 0x06, 0xdd, 0x00, 0x4e, 0x5e, 0x07, 0xa4, + 0x00, 0x4e, 0x5f, 0x0e, 0xf5, 0x00, 0x4e, 0x62, + 0x12, 0x33, 0x00, 0x4e, 0x63, 0x52, 0x55, 0x00, + 0x4e, 0x68, 0x52, 0x56, 0x00, 0x4e, 0x69, 0x43, + 0x5c, 0x00, 0x4e, 0x71, 0x0f, 0x5a, 0x00, 0x4e, + 0x73, 0x0c, 0xd5, 0x00, 0x4e, 0x74, 0x52, 0x57, + 0x00, 0x4e, 0x75, 0x52, 0x58, 0x00, 0x4e, 0x79, + 0x4a, 0xc7, 0x00, 0x4e, 0x7e, 0x05, 0xe1, 0x00, + 0x4e, 0x7f, 0x37, 0xe2, 0x00, 0x4e, 0x80, 0x06, + 0x4f, 0x00, 0x4e, 0x82, 0x10, 0x05, 0x00, 0x4e, + 0x85, 0x10, 0x06, 0x00, 0x4e, 0x86, 0x0f, 0x83, + 0x00, 0x4e, 0x88, 0x0f, 0x27, 0x00, 0x4e, 0x89, + 0x0a, 0xea, 0x00, 0x4e, 0x8a, 0x10, 0x08, 0x00, + 0x4e, 0x8b, 0x08, 0xc4, 0x00, 0x4e, 0x8c, 0x0c, + 0xcb, 0x00, 0x4e, 0x8d, 0x37, 0xe3, 0x00, 0x4e, + 0x8e, 0x10, 0x0b, 0x00, 0x4e, 0x91, 0x04, 0xe0, + 0x00, 0x4e, 0x92, 0x07, 0x93, 0x00, 0x4e, 0x94, + 0x07, 0x92, 0x00, 0x4e, 0x95, 0x04, 0xaa, 0x00, + 0x4e, 0x96, 0x37, 0xe4, 0x00, 0x4e, 0x97, 0x52, + 0x59, 0x00, 0x4e, 0x98, 0x0f, 0xf1, 0x00, 0x4e, + 0x99, 0x0f, 0xf0, 0x00, 0x4e, 0x9b, 0x08, 0x23, + 0x00, 0x4e, 0x9c, 0x04, 0x65, 0x00, 0x4e, 0x9d, + 0x43, 0x5d, 0x00, 0x4e, 0x9e, 0x10, 0x0c, 0x00, + 0x4e, 0x9f, 0x10, 0x0d, 0x00, 0x4e, 0xa0, 0x10, + 0x0e, 0x00, 0x4e, 0xa1, 0x0e, 0x62, 0x00, 0x4e, + 0xa2, 0x10, 0x0f, 0x00, 0x4e, 0xa4, 0x07, 0xa6, + 0x00, 0x4e, 0xa5, 0x04, 0xab, 0x00, 0x4e, 0xa6, + 0x0e, 0xa0, 0x00, 0x4e, 0xa8, 0x06, 0x96, 0x00, + 0x4e, 0xab, 0x06, 0x97, 0x00, 0x4e, 0xac, 0x06, + 0x98, 0x00, 0x4e, 0xad, 0x0b, 0xfe, 0x00, 0x4e, + 0xae, 0x0f, 0x84, 0x00, 0x4e, 0xaf, 0x52, 0x5a, + 0x00, 0x4e, 0xb0, 0x10, 0x10, 0x00, 0x4e, 0xb3, + 0x10, 0x11, 0x00, 0x4e, 0xb6, 0x10, 0x12, 0x00, + 0x4e, 0xb9, 0x37, 0xe5, 0x00, 0x4e, 0xba, 0x0a, + 0x13, 0x00, 0x4e, 0xbb, 0x36, 0x20, 0x00, 0x4e, + 0xbc, 0x43, 0x5f, 0x00, 0x4e, 0xc0, 0x09, 0x44, + 0x00, 0x4e, 0xc1, 0x0a, 0x14, 0x00, 0x4e, 0xc2, + 0x10, 0x17, 0x00, 0x4e, 0xc3, 0x43, 0x60, 0x00, + 0x4e, 0xc4, 0x10, 0x15, 0x00, 0x4e, 0xc6, 0x10, + 0x16, 0x00, 0x4e, 0xc7, 0x06, 0x72, 0x00, 0x4e, + 0xc8, 0x43, 0x61, 0x00, 0x4e, 0xca, 0x08, 0x13, + 0x00, 0x4e, 0xcb, 0x05, 0x70, 0x00, 0x4e, 0xcd, + 0x10, 0x14, 0x00, 0x4e, 0xce, 0x10, 0x13, 0x00, + 0x4e, 0xcf, 0x0d, 0xf9, 0x00, 0x4e, 0xd0, 0x37, + 0xe6, 0x00, 0x4e, 0xd4, 0x08, 0x94, 0x00, 0x4e, + 0xd5, 0x08, 0x93, 0x00, 0x4e, 0xd6, 0x0b, 0x1e, + 0x00, 0x4e, 0xd7, 0x10, 0x18, 0x00, 0x4e, 0xd8, + 0x0d, 0xc7, 0x00, 0x4e, 0xd9, 0x0a, 0x8b, 0x00, + 0x4e, 0xda, 0x43, 0x63, 0x00, 0x4e, 0xdb, 0x52, + 0x5b, 0x00, 0x4e, 0xdd, 0x02, 0x90, 0x00, 0x4e, + 0xde, 0x10, 0x19, 0x00, 0x4e, 0xdf, 0x10, 0x1b, + 0x00, 0x4e, 0xe0, 0x37, 0xe7, 0x00, 0x4e, 0xe1, + 0x20, 0xb4, 0x00, 0x4e, 0xe2, 0x52, 0x5c, 0x00, + 0x4e, 0xe3, 0x0b, 0x45, 0x00, 0x4e, 0xe4, 0x0f, + 0xa9, 0x00, 0x4e, 0xe5, 0x04, 0x8e, 0x00, 0x4e, + 0xe8, 0x52, 0x5d, 0x00, 0x4e, 0xeb, 0x43, 0x62, + 0x00, 0x4e, 0xed, 0x10, 0x1a, 0x00, 0x4e, 0xee, + 0x05, 0x3e, 0x00, 0x4e, 0xef, 0x52, 0x5e, 0x00, + 0x4e, 0xf0, 0x06, 0xbc, 0x00, 0x4e, 0xf1, 0x43, + 0x64, 0x00, 0x4e, 0xf2, 0x0b, 0xa5, 0x00, 0x4e, + 0xf3, 0x4a, 0xc8, 0x00, 0x4e, 0xf5, 0x43, 0x65, + 0x00, 0x4e, 0xf6, 0x07, 0x45, 0x00, 0x4e, 0xf7, + 0x10, 0x1c, 0x00, 0x4e, 0xfb, 0x0c, 0xda, 0x00, + 0x4e, 0xfc, 0x20, 0xb5, 0x00, 0x4e, 0xfd, 0x37, + 0xe8, 0x00, 0x4e, 0xfe, 0x52, 0x5f, 0x00, 0x4e, + 0xff, 0x37, 0xe9, 0x00, 0x4f, 0x00, 0x20, 0xb6, + 0x00, 0x4f, 0x01, 0x06, 0x27, 0x00, 0x4f, 0x02, + 0x52, 0x60, 0x00, 0x4f, 0x03, 0x20, 0xb7, 0x00, + 0x4f, 0x08, 0x52, 0x61, 0x00, 0x4f, 0x09, 0x10, + 0x1d, 0x00, 0x4f, 0x0a, 0x04, 0x8f, 0x00, 0x4f, + 0x0b, 0x37, 0xea, 0x00, 0x4f, 0x0c, 0x4a, 0xc9, + 0x00, 0x4f, 0x0d, 0x07, 0x94, 0x00, 0x4f, 0x0e, + 0x06, 0x28, 0x00, 0x4f, 0x0f, 0x0d, 0xec, 0x00, + 0x4f, 0x10, 0x0d, 0x46, 0x00, 0x4f, 0x11, 0x06, + 0x73, 0x00, 0x4f, 0x12, 0x52, 0x62, 0x00, 0x4f, + 0x15, 0x37, 0xeb, 0x00, 0x4f, 0x16, 0x43, 0x66, + 0x00, 0x4f, 0x17, 0x52, 0x63, 0x00, 0x4f, 0x19, + 0x4a, 0xca, 0x00, 0x4f, 0x1a, 0x05, 0x71, 0x00, + 0x4f, 0x1c, 0x10, 0x40, 0x00, 0x4f, 0x1d, 0x0c, + 0x3b, 0x00, 0x4f, 0x2b, 0x4a, 0xcb, 0x00, 0x4f, + 0x2e, 0x4a, 0xcc, 0x00, 0x4f, 0x2f, 0x0d, 0x22, + 0x00, 0x4f, 0x30, 0x10, 0x1f, 0x00, 0x4f, 0x31, + 0x4a, 0xcd, 0x00, 0x4f, 0x33, 0x52, 0x64, 0x00, + 0x4f, 0x34, 0x0d, 0x50, 0x00, 0x4f, 0x35, 0x52, + 0x65, 0x00, 0x4f, 0x36, 0x0f, 0xaa, 0x00, 0x4f, + 0x37, 0x43, 0x68, 0x00, 0x4f, 0x38, 0x09, 0xf3, + 0x00, 0x4f, 0x39, 0x20, 0xb8, 0x00, 0x4f, 0x3a, + 0x08, 0x95, 0x00, 0x4f, 0x3b, 0x37, 0xed, 0x00, + 0x4f, 0x3c, 0x08, 0xc5, 0x00, 0x4f, 0x3d, 0x05, + 0x40, 0x00, 0x4f, 0x3e, 0x43, 0x69, 0x00, 0x4f, + 0x40, 0x52, 0x66, 0x00, 0x4f, 0x42, 0x52, 0x67, + 0x00, 0x4f, 0x43, 0x0b, 0xed, 0x00, 0x4f, 0x46, + 0x0b, 0x60, 0x00, 0x4f, 0x47, 0x10, 0x23, 0x00, + 0x4f, 0x48, 0x41, 0x8b, 0x00, 0x4f, 0x49, 0x37, + 0xee, 0x00, 0x4f, 0x4b, 0x52, 0x68, 0x00, 0x4f, + 0x4c, 0x52, 0x69, 0x00, 0x4f, 0x4d, 0x04, 0x90, + 0x00, 0x4f, 0x4e, 0x0b, 0xff, 0x00, 0x4f, 0x4f, + 0x09, 0x45, 0x00, 0x4f, 0x50, 0x08, 0x24, 0x00, + 0x4f, 0x51, 0x0f, 0x0e, 0x00, 0x4f, 0x52, 0x52, + 0x6a, 0x00, 0x4f, 0x53, 0x0b, 0x2e, 0x00, 0x4f, + 0x54, 0x37, 0xef, 0x00, 0x4f, 0x55, 0x05, 0x3f, + 0x00, 0x4f, 0x56, 0x20, 0xb9, 0x00, 0x4f, 0x57, + 0x10, 0x22, 0x00, 0x4f, 0x58, 0x43, 0x6a, 0x00, + 0x4f, 0x59, 0x0f, 0x28, 0x00, 0x4f, 0x5a, 0x10, + 0x1e, 0x00, 0x4f, 0x5b, 0x10, 0x20, 0x00, 0x4f, + 0x5c, 0x08, 0x5e, 0x00, 0x4f, 0x5d, 0x10, 0x21, + 0x00, 0x4f, 0x5e, 0x11, 0xd3, 0x00, 0x4f, 0x5f, + 0x41, 0x8c, 0x00, 0x4f, 0x60, 0x37, 0xec, 0x00, + 0x4f, 0x63, 0x52, 0x6b, 0x00, 0x4f, 0x64, 0x43, + 0x67, 0x00, 0x4f, 0x69, 0x10, 0x29, 0x00, 0x4f, + 0x6a, 0x41, 0x8d, 0x00, 0x4f, 0x6c, 0x41, 0x8e, + 0x00, 0x4f, 0x6e, 0x52, 0x6c, 0x00, 0x4f, 0x6f, + 0x10, 0x2c, 0x00, 0x4f, 0x70, 0x10, 0x2a, 0x00, + 0x4f, 0x71, 0x52, 0x6d, 0x00, 0x4f, 0x73, 0x05, + 0x42, 0x00, 0x4f, 0x75, 0x0e, 0x0b, 0x00, 0x4f, + 0x76, 0x10, 0x24, 0x00, 0x4f, 0x77, 0x43, 0x6c, + 0x00, 0x4f, 0x78, 0x43, 0x6d, 0x00, 0x4f, 0x79, + 0x52, 0x6e, 0x00, 0x4f, 0x7a, 0x37, 0xf0, 0x00, + 0x4f, 0x7b, 0x10, 0x28, 0x00, 0x4f, 0x7c, 0x07, + 0xa7, 0x00, 0x4f, 0x7d, 0x37, 0xf1, 0x00, 0x4f, + 0x7e, 0x37, 0xf2, 0x00, 0x4f, 0x7f, 0x08, 0x96, + 0x00, 0x4f, 0x81, 0x52, 0x6f, 0x00, 0x4f, 0x82, + 0x43, 0x6e, 0x00, 0x4f, 0x83, 0x05, 0xe2, 0x00, + 0x4f, 0x84, 0x4a, 0xce, 0x00, 0x4f, 0x85, 0x43, + 0x6f, 0x00, 0x4f, 0x86, 0x10, 0x2d, 0x00, 0x4f, + 0x88, 0x10, 0x25, 0x00, 0x4f, 0x89, 0x52, 0x70, + 0x00, 0x4f, 0x8a, 0x20, 0xbb, 0x00, 0x4f, 0x8b, + 0x0f, 0xab, 0x00, 0x4f, 0x8c, 0x52, 0x71, 0x00, + 0x4f, 0x8d, 0x08, 0xc6, 0x00, 0x4f, 0x8e, 0x52, + 0x72, 0x00, 0x4f, 0x8f, 0x10, 0x26, 0x00, 0x4f, + 0x90, 0x52, 0x73, 0x00, 0x4f, 0x91, 0x10, 0x2b, + 0x00, 0x4f, 0x92, 0x20, 0xba, 0x00, 0x4f, 0x93, + 0x52, 0x74, 0x00, 0x4f, 0x94, 0x20, 0xbd, 0x00, + 0x4f, 0x96, 0x10, 0x2e, 0x00, 0x4f, 0x97, 0x37, + 0xf3, 0x00, 0x4f, 0x98, 0x10, 0x27, 0x00, 0x4f, + 0x99, 0x52, 0x75, 0x00, 0x4f, 0x9a, 0x20, 0xbc, + 0x00, 0x4f, 0x9b, 0x06, 0x99, 0x00, 0x4f, 0x9d, + 0x04, 0x91, 0x00, 0x4f, 0x9e, 0x4a, 0xcf, 0x00, + 0x4f, 0x9f, 0x52, 0x76, 0x00, 0x4f, 0xa0, 0x06, + 0x9a, 0x00, 0x4f, 0xa1, 0x05, 0x41, 0x00, 0x4f, + 0xab, 0x11, 0xd4, 0x00, 0x4f, 0xad, 0x0e, 0xa7, + 0x00, 0x4f, 0xae, 0x0d, 0xe0, 0x00, 0x4f, 0xaf, + 0x07, 0xa8, 0x00, 0x4f, 0xb2, 0x43, 0x71, 0x00, + 0x4f, 0xb5, 0x09, 0xf5, 0x00, 0x4f, 0xb6, 0x0f, + 0x7f, 0x00, 0x4f, 0xb7, 0x4a, 0xd0, 0x00, 0x4f, + 0xb9, 0x52, 0x77, 0x00, 0x4f, 0xbb, 0x52, 0x78, + 0x00, 0x4f, 0xbc, 0x52, 0x79, 0x00, 0x4f, 0xbd, + 0x52, 0x7a, 0x00, 0x4f, 0xbe, 0x37, 0xf4, 0x00, + 0x4f, 0xbf, 0x0e, 0x28, 0x00, 0x4f, 0xc0, 0x52, + 0x7b, 0x00, 0x4f, 0xc1, 0x52, 0x7c, 0x00, 0x4f, + 0xc2, 0x07, 0x0e, 0x00, 0x4f, 0xc3, 0x0b, 0x05, + 0x00, 0x4f, 0xc4, 0x05, 0x64, 0x00, 0x4f, 0xc5, + 0x43, 0x72, 0x00, 0x4f, 0xc6, 0x52, 0x7d, 0x00, + 0x4f, 0xc8, 0x52, 0x7e, 0x00, 0x4f, 0xc9, 0x20, + 0xac, 0x00, 0x4f, 0xca, 0x09, 0x5d, 0x00, 0x4f, + 0xcb, 0x43, 0x73, 0x00, 0x4f, 0xcc, 0x52, 0x7f, + 0x00, 0x4f, 0xcd, 0x20, 0xbe, 0x00, 0x4f, 0xce, + 0x10, 0x32, 0x00, 0x4f, 0xcf, 0x37, 0xf5, 0x00, + 0x4f, 0xd0, 0x10, 0x37, 0x00, 0x4f, 0xd1, 0x10, + 0x35, 0x00, 0x4f, 0xd2, 0x43, 0x74, 0x00, 0x4f, + 0xd3, 0x3c, 0x2f, 0x00, 0x4f, 0xd4, 0x10, 0x30, + 0x00, 0x4f, 0xd7, 0x0b, 0x0f, 0x00, 0x4f, 0xd8, + 0x10, 0x33, 0x00, 0x4f, 0xda, 0x10, 0x36, 0x00, + 0x4f, 0xdb, 0x10, 0x34, 0x00, 0x4f, 0xdc, 0x52, + 0x80, 0x00, 0x4f, 0xdd, 0x0e, 0x2d, 0x00, 0x4f, + 0xdf, 0x10, 0x31, 0x00, 0x4f, 0xe0, 0x1d, 0xec, + 0x00, 0x4f, 0xe1, 0x09, 0xf4, 0x00, 0x4f, 0xe2, + 0x52, 0x81, 0x00, 0x4f, 0xe3, 0x0e, 0xa1, 0x00, + 0x4f, 0xe4, 0x10, 0x38, 0x00, 0x4f, 0xe5, 0x10, + 0x39, 0x00, 0x4f, 0xe6, 0x43, 0x70, 0x00, 0x4f, + 0xee, 0x09, 0x2e, 0x00, 0x4f, 0xef, 0x10, 0x46, + 0x00, 0x4f, 0xf0, 0x52, 0x82, 0x00, 0x4f, 0xf1, + 0x35, 0xa3, 0x00, 0x4f, 0xf2, 0x43, 0x76, 0x00, + 0x4f, 0xf3, 0x0d, 0x06, 0x00, 0x4f, 0xf5, 0x0d, + 0xa8, 0x00, 0x4f, 0xf6, 0x10, 0x41, 0x00, 0x4f, + 0xf8, 0x0e, 0x40, 0x00, 0x4f, 0xfa, 0x05, 0x36, + 0x00, 0x4f, 0xfc, 0x52, 0x83, 0x00, 0x4f, 0xfd, + 0x37, 0xf6, 0x00, 0x4f, 0xfe, 0x10, 0x45, 0x00, + 0x4f, 0xff, 0x20, 0xc1, 0x00, 0x50, 0x00, 0x37, + 0xf7, 0x00, 0x50, 0x01, 0x37, 0xf8, 0x00, 0x50, + 0x02, 0x4f, 0x4b, 0x00, 0x50, 0x04, 0x4a, 0xd1, + 0x00, 0x50, 0x05, 0x10, 0x3f, 0x00, 0x50, 0x06, + 0x10, 0x48, 0x00, 0x50, 0x07, 0x52, 0x84, 0x00, + 0x50, 0x09, 0x0a, 0xd4, 0x00, 0x50, 0x0a, 0x52, + 0x85, 0x00, 0x50, 0x0b, 0x07, 0x78, 0x00, 0x50, + 0x0c, 0x4a, 0xd2, 0x00, 0x50, 0x0d, 0x0d, 0x12, + 0x00, 0x50, 0x0e, 0x41, 0x8f, 0x00, 0x50, 0x0f, + 0x16, 0x00, 0x00, 0x50, 0x10, 0x37, 0xf9, 0x00, + 0x50, 0x11, 0x10, 0x47, 0x00, 0x50, 0x12, 0x0c, + 0x57, 0x00, 0x50, 0x13, 0x43, 0x77, 0x00, 0x50, + 0x14, 0x10, 0x3c, 0x00, 0x50, 0x16, 0x07, 0xaa, + 0x00, 0x50, 0x17, 0x52, 0x86, 0x00, 0x50, 0x18, + 0x41, 0x90, 0x00, 0x50, 0x19, 0x07, 0xa9, 0x00, + 0x50, 0x1a, 0x10, 0x3a, 0x00, 0x50, 0x1b, 0x37, + 0xfa, 0x00, 0x50, 0x1c, 0x43, 0x78, 0x00, 0x50, + 0x1d, 0x52, 0x87, 0x00, 0x50, 0x1e, 0x20, 0xc2, + 0x00, 0x50, 0x1f, 0x09, 0x06, 0x00, 0x50, 0x21, + 0x10, 0x42, 0x00, 0x50, 0x22, 0x20, 0xc0, 0x00, + 0x50, 0x23, 0x0e, 0x3f, 0x00, 0x50, 0x24, 0x0b, + 0x8b, 0x00, 0x50, 0x25, 0x10, 0x3e, 0x00, 0x50, + 0x26, 0x07, 0x47, 0x00, 0x50, 0x27, 0x37, 0xfb, + 0x00, 0x50, 0x28, 0x10, 0x3b, 0x00, 0x50, 0x29, + 0x10, 0x43, 0x00, 0x50, 0x2a, 0x10, 0x3d, 0x00, + 0x50, 0x2b, 0x0f, 0x99, 0x00, 0x50, 0x2c, 0x10, + 0x44, 0x00, 0x50, 0x2d, 0x0f, 0xe7, 0x00, 0x50, + 0x2e, 0x37, 0xfc, 0x00, 0x50, 0x30, 0x52, 0x88, + 0x00, 0x50, 0x32, 0x52, 0x89, 0x00, 0x50, 0x33, + 0x52, 0x8a, 0x00, 0x50, 0x35, 0x52, 0x8b, 0x00, + 0x50, 0x36, 0x06, 0xde, 0x00, 0x50, 0x39, 0x07, + 0x46, 0x00, 0x50, 0x3b, 0x38, 0x00, 0x00, 0x50, + 0x40, 0x20, 0xbf, 0x00, 0x50, 0x41, 0x41, 0x91, + 0x00, 0x50, 0x42, 0x20, 0xc5, 0x00, 0x50, 0x43, + 0x10, 0x49, 0x00, 0x50, 0x45, 0x52, 0x8c, 0x00, + 0x50, 0x46, 0x20, 0xc3, 0x00, 0x50, 0x47, 0x10, + 0x4a, 0x00, 0x50, 0x48, 0x10, 0x4e, 0x00, 0x50, + 0x49, 0x04, 0x92, 0x00, 0x50, 0x4a, 0x52, 0x8d, + 0x00, 0x50, 0x4c, 0x4a, 0xd3, 0x00, 0x50, 0x4e, + 0x43, 0x79, 0x00, 0x50, 0x4f, 0x0e, 0x20, 0x00, + 0x50, 0x50, 0x10, 0x4d, 0x00, 0x50, 0x51, 0x52, + 0x8e, 0x00, 0x50, 0x52, 0x52, 0x8f, 0x00, 0x50, + 0x53, 0x43, 0x7a, 0x00, 0x50, 0x55, 0x10, 0x4c, + 0x00, 0x50, 0x56, 0x10, 0x50, 0x00, 0x50, 0x57, + 0x37, 0xfd, 0x00, 0x50, 0x59, 0x52, 0x90, 0x00, + 0x50, 0x5a, 0x10, 0x4f, 0x00, 0x50, 0x5c, 0x0c, + 0x00, 0x00, 0x50, 0x5f, 0x4a, 0xd4, 0x00, 0x50, + 0x60, 0x52, 0x91, 0x00, 0x50, 0x62, 0x4a, 0xd5, + 0x00, 0x50, 0x63, 0x43, 0x7b, 0x00, 0x50, 0x65, + 0x07, 0x48, 0x00, 0x50, 0x66, 0x37, 0xfe, 0x00, + 0x50, 0x67, 0x52, 0x92, 0x00, 0x50, 0x6a, 0x37, + 0xff, 0x00, 0x50, 0x6c, 0x10, 0x51, 0x00, 0x50, + 0x6d, 0x52, 0x93, 0x00, 0x50, 0x70, 0x20, 0xc4, + 0x00, 0x50, 0x71, 0x52, 0x94, 0x00, 0x50, 0x72, + 0x08, 0xf1, 0x00, 0x50, 0x74, 0x0b, 0x06, 0x00, + 0x50, 0x75, 0x0c, 0x01, 0x00, 0x50, 0x76, 0x06, + 0xee, 0x00, 0x50, 0x77, 0x4a, 0xd6, 0x00, 0x50, + 0x78, 0x10, 0x52, 0x00, 0x50, 0x7d, 0x06, 0x50, + 0x00, 0x50, 0x80, 0x10, 0x53, 0x00, 0x50, 0x81, + 0x52, 0x95, 0x00, 0x50, 0x83, 0x52, 0x96, 0x00, + 0x50, 0x84, 0x52, 0x97, 0x00, 0x50, 0x85, 0x10, + 0x55, 0x00, 0x50, 0x86, 0x52, 0x98, 0x00, 0x50, + 0x88, 0x43, 0x7d, 0x00, 0x50, 0x8a, 0x52, 0x99, + 0x00, 0x50, 0x8d, 0x0e, 0x63, 0x00, 0x50, 0x8e, + 0x4a, 0xd7, 0x00, 0x50, 0x8f, 0x38, 0x01, 0x00, + 0x50, 0x90, 0x52, 0x9a, 0x00, 0x50, 0x91, 0x07, + 0x3c, 0x00, 0x50, 0x92, 0x43, 0x7e, 0x00, 0x50, + 0x93, 0x43, 0x7f, 0x00, 0x50, 0x94, 0x20, 0xc6, + 0x00, 0x50, 0x95, 0x43, 0x80, 0x00, 0x50, 0x96, + 0x38, 0x02, 0x00, 0x50, 0x98, 0x08, 0x7f, 0x00, + 0x50, 0x99, 0x0d, 0x8b, 0x00, 0x50, 0x9a, 0x10, + 0x54, 0x00, 0x50, 0x9b, 0x52, 0x9b, 0x00, 0x50, + 0x9c, 0x38, 0x03, 0x00, 0x50, 0x9e, 0x4a, 0xd8, + 0x00, 0x50, 0x9f, 0x52, 0x9c, 0x00, 0x50, 0xa0, + 0x52, 0x9d, 0x00, 0x50, 0xa1, 0x52, 0x9e, 0x00, + 0x50, 0xa2, 0x4a, 0xd9, 0x00, 0x50, 0xa3, 0x43, + 0x7c, 0x00, 0x50, 0xaa, 0x43, 0x81, 0x00, 0x50, + 0xac, 0x08, 0x35, 0x00, 0x50, 0xad, 0x0f, 0x2d, + 0x00, 0x50, 0xaf, 0x52, 0x9f, 0x00, 0x50, 0xb0, + 0x52, 0xa0, 0x00, 0x50, 0xb1, 0x43, 0x83, 0x00, + 0x50, 0xb2, 0x10, 0x57, 0x00, 0x50, 0xb3, 0x10, + 0x5a, 0x00, 0x50, 0xb4, 0x10, 0x56, 0x00, 0x50, + 0xb5, 0x08, 0x34, 0x00, 0x50, 0xb7, 0x09, 0x87, + 0x00, 0x50, 0xb9, 0x52, 0xa1, 0x00, 0x50, 0xba, + 0x43, 0x84, 0x00, 0x50, 0xbb, 0x43, 0x85, 0x00, + 0x50, 0xbd, 0x52, 0xa2, 0x00, 0x50, 0xbe, 0x07, + 0x0f, 0x00, 0x50, 0xc0, 0x52, 0xa3, 0x00, 0x50, + 0xc2, 0x10, 0x5b, 0x00, 0x50, 0xc3, 0x4a, 0xda, + 0x00, 0x50, 0xc4, 0x43, 0x86, 0x00, 0x50, 0xc5, + 0x06, 0xc7, 0x00, 0x50, 0xc7, 0x43, 0x87, 0x00, + 0x50, 0xc9, 0x10, 0x58, 0x00, 0x50, 0xca, 0x10, + 0x59, 0x00, 0x50, 0xcc, 0x38, 0x04, 0x00, 0x50, + 0xcd, 0x0c, 0x87, 0x00, 0x50, 0xce, 0x43, 0x8a, + 0x00, 0x50, 0xcf, 0x0a, 0xfe, 0x00, 0x50, 0xd0, + 0x41, 0x93, 0x00, 0x50, 0xd1, 0x06, 0x9b, 0x00, + 0x50, 0xd3, 0x52, 0xa4, 0x00, 0x50, 0xd4, 0x43, + 0x8c, 0x00, 0x50, 0xd5, 0x0e, 0x7b, 0x00, 0x50, + 0xd6, 0x10, 0x5c, 0x00, 0x50, 0xd8, 0x20, 0xc8, + 0x00, 0x50, 0xd9, 0x3c, 0x30, 0x00, 0x50, 0xda, + 0x0f, 0x85, 0x00, 0x50, 0xdc, 0x52, 0xa5, 0x00, + 0x50, 0xdd, 0x52, 0xa6, 0x00, 0x50, 0xde, 0x10, + 0x5d, 0x00, 0x50, 0xdf, 0x52, 0xa7, 0x00, 0x50, + 0xe1, 0x43, 0x8d, 0x00, 0x50, 0xe2, 0x52, 0xa8, + 0x00, 0x50, 0xe3, 0x10, 0x60, 0x00, 0x50, 0xe4, + 0x52, 0xa9, 0x00, 0x50, 0xe5, 0x10, 0x5e, 0x00, + 0x50, 0xe6, 0x38, 0x05, 0x00, 0x50, 0xe7, 0x0a, + 0xd0, 0x00, 0x50, 0xe8, 0x4a, 0xdb, 0x00, 0x50, + 0xe9, 0x38, 0x06, 0x00, 0x50, 0xed, 0x10, 0x5f, + 0x00, 0x50, 0xee, 0x10, 0x61, 0x00, 0x50, 0xef, + 0x38, 0x07, 0x00, 0x50, 0xf0, 0x3c, 0x31, 0x00, + 0x50, 0xf1, 0x4a, 0xdc, 0x00, 0x50, 0xf2, 0x41, + 0x92, 0x00, 0x50, 0xf3, 0x43, 0x88, 0x00, 0x50, + 0xf4, 0x20, 0xc7, 0x00, 0x50, 0xf5, 0x10, 0x63, + 0x00, 0x50, 0xf6, 0x52, 0xaa, 0x00, 0x50, 0xf9, + 0x10, 0x62, 0x00, 0x50, 0xfa, 0x52, 0xab, 0x00, + 0x50, 0xfb, 0x0e, 0x18, 0x00, 0x50, 0xfe, 0x4a, + 0xdd, 0x00, 0x51, 0x00, 0x06, 0x51, 0x00, 0x51, + 0x01, 0x10, 0x65, 0x00, 0x51, 0x02, 0x10, 0x66, + 0x00, 0x51, 0x03, 0x41, 0x95, 0x00, 0x51, 0x04, + 0x05, 0x2f, 0x00, 0x51, 0x06, 0x41, 0x94, 0x00, + 0x51, 0x07, 0x4a, 0xde, 0x00, 0x51, 0x08, 0x38, + 0x08, 0x00, 0x51, 0x09, 0x10, 0x64, 0x00, 0x51, + 0x0b, 0x38, 0x09, 0x00, 0x51, 0x0c, 0x4a, 0xdf, + 0x00, 0x51, 0x0d, 0x4a, 0xe0, 0x00, 0x51, 0x0e, + 0x4a, 0xe1, 0x00, 0x51, 0x10, 0x38, 0x0a, 0x00, + 0x51, 0x12, 0x09, 0x20, 0x00, 0x51, 0x14, 0x10, + 0x69, 0x00, 0x51, 0x15, 0x10, 0x68, 0x00, 0x51, + 0x16, 0x10, 0x67, 0x00, 0x51, 0x17, 0x43, 0x90, + 0x00, 0x51, 0x18, 0x10, 0x2f, 0x00, 0x51, 0x19, + 0x52, 0xad, 0x00, 0x51, 0x1a, 0x10, 0x6a, 0x00, + 0x51, 0x1b, 0x38, 0x0b, 0x00, 0x51, 0x1c, 0x52, + 0xae, 0x00, 0x51, 0x1d, 0x52, 0xaf, 0x00, 0x51, + 0x1e, 0x38, 0x0c, 0x00, 0x51, 0x1f, 0x09, 0x88, + 0x00, 0x51, 0x21, 0x10, 0x6b, 0x00, 0x51, 0x23, + 0x52, 0xb0, 0x00, 0x51, 0x27, 0x52, 0xb1, 0x00, + 0x51, 0x28, 0x52, 0xb2, 0x00, 0x51, 0x2a, 0x0f, + 0x0f, 0x00, 0x51, 0x2c, 0x52, 0xb3, 0x00, 0x51, + 0x2d, 0x52, 0xb4, 0x00, 0x51, 0x2f, 0x52, 0xb5, + 0x00, 0x51, 0x31, 0x52, 0xb6, 0x00, 0x51, 0x32, + 0x0e, 0xe5, 0x00, 0x51, 0x33, 0x4a, 0xe2, 0x00, + 0x51, 0x34, 0x52, 0xb7, 0x00, 0x51, 0x35, 0x41, + 0x96, 0x00, 0x51, 0x37, 0x10, 0x6d, 0x00, 0x51, + 0x38, 0x4a, 0xe3, 0x00, 0x51, 0x39, 0x52, 0xb8, + 0x00, 0x51, 0x3a, 0x10, 0x6c, 0x00, 0x51, 0x3b, + 0x10, 0x6f, 0x00, 0x51, 0x3c, 0x10, 0x6e, 0x00, + 0x51, 0x3f, 0x10, 0x70, 0x00, 0x51, 0x40, 0x10, + 0x71, 0x00, 0x51, 0x41, 0x04, 0xb8, 0x00, 0x51, + 0x42, 0x52, 0xb9, 0x00, 0x51, 0x43, 0x07, 0x69, + 0x00, 0x51, 0x44, 0x07, 0x11, 0x00, 0x51, 0x45, + 0x09, 0x46, 0x00, 0x51, 0x46, 0x0b, 0xb9, 0x00, + 0x51, 0x47, 0x06, 0x9c, 0x00, 0x51, 0x48, 0x0a, + 0x8c, 0x00, 0x51, 0x49, 0x07, 0xab, 0x00, 0x51, + 0x4a, 0x20, 0xc9, 0x00, 0x51, 0x4b, 0x08, 0x00, + 0x00, 0x51, 0x4c, 0x10, 0x73, 0x00, 0x51, 0x4d, + 0x0e, 0xd4, 0x00, 0x51, 0x4e, 0x0c, 0x40, 0x00, + 0x51, 0x4f, 0x52, 0xba, 0x00, 0x51, 0x50, 0x08, + 0xc7, 0x00, 0x51, 0x52, 0x10, 0x72, 0x00, 0x51, + 0x53, 0x52, 0xbb, 0x00, 0x51, 0x54, 0x1e, 0x86, + 0x00, 0x51, 0x55, 0x41, 0x97, 0x00, 0x51, 0x57, + 0x41, 0x98, 0x00, 0x51, 0x58, 0x52, 0xbc, 0x00, + 0x51, 0x5a, 0x0c, 0x58, 0x00, 0x51, 0x5c, 0x05, + 0xd3, 0x00, 0x51, 0x5f, 0x38, 0x0d, 0x00, 0x51, + 0x60, 0x43, 0x92, 0x00, 0x51, 0x62, 0x10, 0x75, + 0x00, 0x51, 0x64, 0x20, 0xca, 0x00, 0x51, 0x65, + 0x0c, 0xd6, 0x00, 0x51, 0x66, 0x52, 0xbd, 0x00, + 0x51, 0x67, 0x36, 0x8e, 0x00, 0x51, 0x68, 0x0a, + 0xb6, 0x00, 0x51, 0x69, 0x10, 0x77, 0x00, 0x51, + 0x6a, 0x10, 0x78, 0x00, 0x51, 0x6b, 0x0d, 0x40, + 0x00, 0x51, 0x6c, 0x07, 0xac, 0x00, 0x51, 0x6d, + 0x0f, 0xe1, 0x00, 0x51, 0x6e, 0x10, 0x79, 0x00, + 0x51, 0x71, 0x06, 0x9e, 0x00, 0x51, 0x73, 0x43, + 0x94, 0x00, 0x51, 0x74, 0x4a, 0xe4, 0x00, 0x51, + 0x75, 0x0e, 0x0c, 0x00, 0x51, 0x76, 0x0b, 0x16, + 0x00, 0x51, 0x77, 0x06, 0xe9, 0x00, 0x51, 0x78, + 0x0c, 0x2f, 0x00, 0x51, 0x79, 0x37, 0x79, 0x00, + 0x51, 0x7b, 0x47, 0xd9, 0x00, 0x51, 0x7c, 0x07, + 0x49, 0x00, 0x51, 0x7e, 0x52, 0xbe, 0x00, 0x51, + 0x80, 0x10, 0x7a, 0x00, 0x51, 0x82, 0x10, 0x7b, + 0x00, 0x51, 0x83, 0x43, 0x95, 0x00, 0x51, 0x84, + 0x4a, 0xe5, 0x00, 0x51, 0x85, 0x0c, 0xba, 0x00, + 0x51, 0x86, 0x05, 0x01, 0x00, 0x51, 0x89, 0x10, + 0x7e, 0x00, 0x51, 0x8a, 0x08, 0x6d, 0x00, 0x51, + 0x8b, 0x43, 0x96, 0x00, 0x51, 0x8c, 0x10, 0x7d, + 0x00, 0x51, 0x8d, 0x4e, 0x5d, 0x00, 0x51, 0x8e, + 0x52, 0xbf, 0x00, 0x51, 0x8f, 0x10, 0x7f, 0x00, + 0x51, 0x90, 0x18, 0x5b, 0x00, 0x51, 0x91, 0x10, + 0x80, 0x00, 0x51, 0x92, 0x0e, 0x6f, 0x00, 0x51, + 0x93, 0x10, 0x81, 0x00, 0x51, 0x95, 0x1e, 0x88, + 0x00, 0x51, 0x96, 0x10, 0x83, 0x00, 0x51, 0x97, + 0x09, 0xd1, 0x00, 0x51, 0x98, 0x43, 0x98, 0x00, + 0x51, 0x99, 0x08, 0xf8, 0x00, 0x51, 0x9d, 0x20, + 0xcb, 0x00, 0x51, 0xa0, 0x05, 0xe3, 0x00, 0x51, + 0xa1, 0x38, 0x0e, 0x00, 0x51, 0xa2, 0x10, 0x86, + 0x00, 0x51, 0xa3, 0x43, 0x99, 0x00, 0x51, 0xa4, + 0x10, 0x84, 0x00, 0x51, 0xa5, 0x0e, 0xc9, 0x00, + 0x51, 0xa6, 0x10, 0x85, 0x00, 0x51, 0xa8, 0x0d, + 0xcc, 0x00, 0x51, 0xa9, 0x10, 0x87, 0x00, 0x51, + 0xaa, 0x10, 0x88, 0x00, 0x51, 0xab, 0x10, 0x89, + 0x00, 0x51, 0xac, 0x36, 0x82, 0x00, 0x51, 0xad, + 0x43, 0x9a, 0x00, 0x51, 0xb0, 0x10, 0x8d, 0x00, + 0x51, 0xb1, 0x10, 0x8b, 0x00, 0x51, 0xb2, 0x10, + 0x8c, 0x00, 0x51, 0xb3, 0x10, 0x8a, 0x00, 0x51, + 0xb4, 0x08, 0x53, 0x00, 0x51, 0xb5, 0x10, 0x8e, + 0x00, 0x51, 0xb6, 0x0e, 0xf6, 0x00, 0x51, 0xb7, + 0x0f, 0xac, 0x00, 0x51, 0xb8, 0x4a, 0xe6, 0x00, + 0x51, 0xba, 0x4a, 0xe7, 0x00, 0x51, 0xbc, 0x38, + 0x0f, 0x00, 0x51, 0xbd, 0x10, 0x8f, 0x00, 0x51, + 0xbe, 0x20, 0xcc, 0x00, 0x51, 0xbf, 0x52, 0xc0, + 0x00, 0x51, 0xc2, 0x52, 0xc1, 0x00, 0x51, 0xc3, + 0x3c, 0x32, 0x00, 0x51, 0xc4, 0x0a, 0x4c, 0x00, + 0x51, 0xc5, 0x10, 0x90, 0x00, 0x51, 0xc6, 0x09, + 0x64, 0x00, 0x51, 0xc8, 0x4a, 0xe8, 0x00, 0x51, + 0xc9, 0x10, 0x91, 0x00, 0x51, 0xca, 0x41, 0x9a, + 0x00, 0x51, 0xcb, 0x0b, 0xba, 0x00, 0x51, 0xcc, + 0x0f, 0x87, 0x00, 0x51, 0xcd, 0x0c, 0x5a, 0x00, + 0x51, 0xcf, 0x4a, 0xe9, 0x00, 0x51, 0xd1, 0x4a, + 0xea, 0x00, 0x51, 0xd2, 0x52, 0xc2, 0x00, 0x51, + 0xd3, 0x4a, 0xeb, 0x00, 0x51, 0xd4, 0x4a, 0xec, + 0x00, 0x51, 0xd5, 0x52, 0xc3, 0x00, 0x51, 0xd6, + 0x10, 0xda, 0x00, 0x51, 0xd8, 0x4a, 0xed, 0x00, + 0x51, 0xdb, 0x10, 0x92, 0x00, 0x51, 0xdc, 0x20, + 0x5c, 0x00, 0x51, 0xdd, 0x06, 0xbd, 0x00, 0x51, + 0xde, 0x4f, 0x4c, 0x00, 0x51, 0xdf, 0x4a, 0xee, + 0x00, 0x51, 0xe0, 0x10, 0x93, 0x00, 0x51, 0xe1, + 0x0e, 0x8c, 0x00, 0x51, 0xe2, 0x41, 0x9b, 0x00, + 0x51, 0xe5, 0x52, 0xc4, 0x00, 0x51, 0xe6, 0x09, + 0x72, 0x00, 0x51, 0xe7, 0x0b, 0x5c, 0x00, 0x51, + 0xe9, 0x10, 0x95, 0x00, 0x51, 0xea, 0x0c, 0xbc, + 0x00, 0x51, 0xec, 0x20, 0xcd, 0x00, 0x51, 0xed, + 0x10, 0x96, 0x00, 0x51, 0xee, 0x38, 0x11, 0x00, + 0x51, 0xf0, 0x10, 0x97, 0x00, 0x51, 0xf1, 0x05, + 0x8c, 0x00, 0x51, 0xf2, 0x52, 0xc5, 0x00, 0x51, + 0xf3, 0x43, 0x9d, 0x00, 0x51, 0xf4, 0x38, 0x12, + 0x00, 0x51, 0xf5, 0x10, 0x98, 0x00, 0x51, 0xf6, + 0x06, 0x9f, 0x00, 0x51, 0xf7, 0x52, 0xc6, 0x00, + 0x51, 0xf8, 0x0c, 0xa4, 0x00, 0x51, 0xf9, 0x05, + 0x1c, 0x00, 0x51, 0xfa, 0x09, 0x5a, 0x00, 0x51, + 0xfd, 0x0d, 0x35, 0x00, 0x51, 0xfe, 0x10, 0x99, + 0x00, 0x52, 0x00, 0x0c, 0x5b, 0x00, 0x52, 0x01, + 0x38, 0x13, 0x00, 0x52, 0x02, 0x38, 0x14, 0x00, + 0x52, 0x03, 0x0a, 0x15, 0x00, 0x52, 0x04, 0x10, + 0x9a, 0x00, 0x52, 0x05, 0x4a, 0xef, 0x00, 0x52, + 0x06, 0x0d, 0xfc, 0x00, 0x52, 0x07, 0x0a, 0x7e, + 0x00, 0x52, 0x08, 0x05, 0xde, 0x00, 0x52, 0x0a, + 0x05, 0xe5, 0x00, 0x52, 0x0b, 0x10, 0x9b, 0x00, + 0x52, 0x0e, 0x10, 0x9d, 0x00, 0x52, 0x11, 0x07, + 0x10, 0x00, 0x52, 0x12, 0x43, 0x9e, 0x00, 0x52, + 0x13, 0x38, 0x15, 0x00, 0x52, 0x14, 0x10, 0x9c, + 0x00, 0x52, 0x15, 0x20, 0xce, 0x00, 0x52, 0x16, + 0x43, 0x9f, 0x00, 0x52, 0x17, 0x0f, 0xbb, 0x00, + 0x52, 0x18, 0x52, 0xc7, 0x00, 0x52, 0x1d, 0x09, + 0x73, 0x00, 0x52, 0x22, 0x52, 0xc8, 0x00, 0x52, + 0x24, 0x0d, 0x51, 0x00, 0x52, 0x25, 0x0e, 0x1c, + 0x00, 0x52, 0x26, 0x4a, 0xf0, 0x00, 0x52, 0x27, + 0x10, 0x9e, 0x00, 0x52, 0x28, 0x4a, 0xf1, 0x00, + 0x52, 0x29, 0x0f, 0x62, 0x00, 0x52, 0x2a, 0x10, + 0x9f, 0x00, 0x52, 0x2b, 0x4a, 0xf2, 0x00, 0x52, + 0x2e, 0x10, 0xa0, 0x00, 0x52, 0x30, 0x0c, 0x78, + 0x00, 0x52, 0x31, 0x4a, 0xf3, 0x00, 0x52, 0x32, + 0x4a, 0xf4, 0x00, 0x52, 0x33, 0x10, 0xa1, 0x00, + 0x52, 0x35, 0x4a, 0xf5, 0x00, 0x52, 0x36, 0x0a, + 0x4d, 0x00, 0x52, 0x37, 0x08, 0x6e, 0x00, 0x52, + 0x38, 0x07, 0x4a, 0x00, 0x52, 0x39, 0x10, 0xa2, + 0x00, 0x52, 0x3a, 0x08, 0x97, 0x00, 0x52, 0x3b, + 0x08, 0x01, 0x00, 0x52, 0x3c, 0x4a, 0xf6, 0x00, + 0x52, 0x43, 0x0c, 0x02, 0x00, 0x52, 0x44, 0x10, + 0xa4, 0x00, 0x52, 0x45, 0x52, 0xc9, 0x00, 0x52, + 0x47, 0x0b, 0x07, 0x00, 0x52, 0x49, 0x38, 0x16, + 0x00, 0x52, 0x4a, 0x08, 0x5f, 0x00, 0x52, 0x4b, + 0x10, 0xa5, 0x00, 0x52, 0x4c, 0x10, 0xa6, 0x00, + 0x52, 0x4d, 0x0a, 0xb2, 0x00, 0x52, 0x4f, 0x10, + 0xa3, 0x00, 0x52, 0x54, 0x10, 0xa8, 0x00, 0x52, + 0x55, 0x43, 0xa1, 0x00, 0x52, 0x56, 0x0e, 0x64, + 0x00, 0x52, 0x57, 0x41, 0x9c, 0x00, 0x52, 0x58, + 0x52, 0xca, 0x00, 0x52, 0x5a, 0x4a, 0xf7, 0x00, + 0x52, 0x5b, 0x07, 0xf6, 0x00, 0x52, 0x5c, 0x43, + 0xa2, 0x00, 0x52, 0x5d, 0x1e, 0x5e, 0x00, 0x52, + 0x5e, 0x10, 0xa7, 0x00, 0x52, 0x5f, 0x52, 0xcb, + 0x00, 0x52, 0x60, 0x4a, 0xf8, 0x00, 0x52, 0x61, + 0x38, 0x17, 0x00, 0x52, 0x63, 0x07, 0x4b, 0x00, + 0x52, 0x64, 0x08, 0x4e, 0x00, 0x52, 0x65, 0x0d, + 0x23, 0x00, 0x52, 0x66, 0x38, 0x18, 0x00, 0x52, + 0x69, 0x10, 0xab, 0x00, 0x52, 0x6a, 0x10, 0xa9, + 0x00, 0x52, 0x6c, 0x43, 0xa3, 0x00, 0x52, 0x6e, + 0x4a, 0xf9, 0x00, 0x52, 0x6f, 0x0d, 0xed, 0x00, + 0x52, 0x70, 0x09, 0xd2, 0x00, 0x52, 0x71, 0x10, + 0xb2, 0x00, 0x52, 0x72, 0x35, 0x74, 0x00, 0x52, + 0x73, 0x10, 0xac, 0x00, 0x52, 0x74, 0x10, 0xaa, + 0x00, 0x52, 0x75, 0x0a, 0xd1, 0x00, 0x52, 0x77, + 0x43, 0xa4, 0x00, 0x52, 0x78, 0x4a, 0xfa, 0x00, + 0x52, 0x79, 0x4a, 0xfb, 0x00, 0x52, 0x7d, 0x10, + 0xae, 0x00, 0x52, 0x7f, 0x10, 0xad, 0x00, 0x52, + 0x80, 0x52, 0xcc, 0x00, 0x52, 0x82, 0x43, 0xa6, + 0x00, 0x52, 0x83, 0x05, 0xa2, 0x00, 0x52, 0x84, + 0x43, 0xa5, 0x00, 0x52, 0x85, 0x52, 0xcd, 0x00, + 0x52, 0x87, 0x07, 0x36, 0x00, 0x52, 0x88, 0x10, + 0xb3, 0x00, 0x52, 0x89, 0x0f, 0x75, 0x00, 0x52, + 0x8a, 0x4a, 0xfc, 0x00, 0x52, 0x8c, 0x4a, 0xfd, + 0x00, 0x52, 0x8d, 0x10, 0xaf, 0x00, 0x52, 0x91, + 0x10, 0xb4, 0x00, 0x52, 0x92, 0x10, 0xb1, 0x00, + 0x52, 0x93, 0x38, 0x19, 0x00, 0x52, 0x94, 0x10, + 0xb0, 0x00, 0x52, 0x95, 0x52, 0xce, 0x00, 0x52, + 0x96, 0x52, 0xcf, 0x00, 0x52, 0x97, 0x52, 0xd0, + 0x00, 0x52, 0x98, 0x43, 0xa8, 0x00, 0x52, 0x9a, + 0x52, 0xd1, 0x00, 0x52, 0x9b, 0x0f, 0x97, 0x00, + 0x52, 0x9c, 0x20, 0xcf, 0x00, 0x52, 0x9f, 0x07, + 0xad, 0x00, 0x52, 0xa0, 0x05, 0x43, 0x00, 0x52, + 0xa3, 0x0f, 0xbc, 0x00, 0x52, 0xa4, 0x43, 0xaa, + 0x00, 0x52, 0xa5, 0x52, 0xd2, 0x00, 0x52, 0xa6, + 0x20, 0xd0, 0x00, 0x52, 0xa7, 0x52, 0xd3, 0x00, + 0x52, 0xa9, 0x09, 0x7f, 0x00, 0x52, 0xaa, 0x0c, + 0x52, 0x00, 0x52, 0xab, 0x07, 0xf7, 0x00, 0x52, + 0xac, 0x10, 0xb7, 0x00, 0x52, 0xad, 0x10, 0xb8, + 0x00, 0x52, 0xaf, 0x21, 0x7d, 0x00, 0x52, 0xb0, + 0x52, 0xd4, 0x00, 0x52, 0xb1, 0x0f, 0xad, 0x00, + 0x52, 0xb4, 0x0f, 0xd1, 0x00, 0x52, 0xb5, 0x10, + 0xba, 0x00, 0x52, 0xb6, 0x52, 0xd5, 0x00, 0x52, + 0xb7, 0x52, 0xd6, 0x00, 0x52, 0xb8, 0x52, 0xd7, + 0x00, 0x52, 0xb9, 0x07, 0xae, 0x00, 0x52, 0xba, + 0x43, 0xab, 0x00, 0x52, 0xbb, 0x43, 0xac, 0x00, + 0x52, 0xbc, 0x10, 0xb9, 0x00, 0x52, 0xbd, 0x52, + 0xd8, 0x00, 0x52, 0xbe, 0x05, 0x8d, 0x00, 0x52, + 0xc0, 0x20, 0xd1, 0x00, 0x52, 0xc1, 0x10, 0xbb, + 0x00, 0x52, 0xc3, 0x0e, 0x84, 0x00, 0x52, 0xc4, + 0x52, 0xd9, 0x00, 0x52, 0xc5, 0x0b, 0xd8, 0x00, + 0x52, 0xc6, 0x52, 0xda, 0x00, 0x52, 0xc7, 0x0f, + 0x10, 0x00, 0x52, 0xc8, 0x38, 0x1a, 0x00, 0x52, + 0xc9, 0x34, 0x49, 0x00, 0x52, 0xca, 0x43, 0xad, + 0x00, 0x52, 0xcc, 0x41, 0x9d, 0x00, 0x52, 0xcd, + 0x10, 0xbc, 0x00, 0x52, 0xcf, 0x52, 0xdb, 0x00, + 0x52, 0xd0, 0x36, 0xe8, 0x00, 0x52, 0xd1, 0x43, + 0xae, 0x00, 0x52, 0xd2, 0x1b, 0xee, 0x00, 0x52, + 0xd4, 0x52, 0xdc, 0x00, 0x52, 0xd5, 0x0c, 0x88, + 0x00, 0x52, 0xd6, 0x41, 0x9e, 0x00, 0x52, 0xd7, + 0x10, 0xbd, 0x00, 0x52, 0xd8, 0x05, 0xe6, 0x00, + 0x52, 0xd9, 0x0e, 0xbf, 0x00, 0x52, 0xdb, 0x20, + 0xd2, 0x00, 0x52, 0xdc, 0x52, 0xdd, 0x00, 0x52, + 0xdd, 0x09, 0x89, 0x00, 0x52, 0xde, 0x10, 0xbe, + 0x00, 0x52, 0xdf, 0x0e, 0x37, 0x00, 0x52, 0xe0, + 0x10, 0xc2, 0x00, 0x52, 0xe1, 0x4a, 0xfe, 0x00, + 0x52, 0xe2, 0x0a, 0x4e, 0x00, 0x52, 0xe3, 0x10, + 0xbf, 0x00, 0x52, 0xe4, 0x06, 0xc8, 0x00, 0x52, + 0xe5, 0x52, 0xde, 0x00, 0x52, 0xe6, 0x10, 0xc0, + 0x00, 0x52, 0xe7, 0x05, 0xe7, 0x00, 0x52, 0xe8, + 0x52, 0xdf, 0x00, 0x52, 0xe9, 0x4a, 0xff, 0x00, + 0x52, 0xea, 0x52, 0xe0, 0x00, 0x52, 0xec, 0x52, + 0xe1, 0x00, 0x52, 0xf0, 0x38, 0x1b, 0x00, 0x52, + 0xf1, 0x4b, 0x00, 0x00, 0x52, 0xf2, 0x07, 0x04, + 0x00, 0x52, 0xf3, 0x10, 0xc3, 0x00, 0x52, 0xf4, + 0x52, 0xe2, 0x00, 0x52, 0xf5, 0x10, 0xc4, 0x00, + 0x52, 0xf6, 0x52, 0xe3, 0x00, 0x52, 0xf7, 0x43, + 0xb0, 0x00, 0x52, 0xf8, 0x10, 0xc5, 0x00, 0x52, + 0xf9, 0x10, 0xc6, 0x00, 0x52, 0xfa, 0x35, 0xef, + 0x00, 0x52, 0xfb, 0x41, 0x9f, 0x00, 0x52, 0xfe, + 0x07, 0xaf, 0x00, 0x52, 0xff, 0x0e, 0xea, 0x00, + 0x53, 0x00, 0x20, 0xd3, 0x00, 0x53, 0x01, 0x0e, + 0xf4, 0x00, 0x53, 0x02, 0x0c, 0xcf, 0x00, 0x53, + 0x03, 0x4b, 0x01, 0x00, 0x53, 0x05, 0x0e, 0x41, + 0x00, 0x53, 0x06, 0x10, 0xc7, 0x00, 0x53, 0x07, + 0x4f, 0x4d, 0x00, 0x53, 0x08, 0x10, 0xc8, 0x00, + 0x53, 0x0a, 0x38, 0x1c, 0x00, 0x53, 0x0b, 0x38, + 0x1d, 0x00, 0x53, 0x0c, 0x52, 0xe4, 0x00, 0x53, + 0x0d, 0x10, 0xca, 0x00, 0x53, 0x0f, 0x10, 0xcc, + 0x00, 0x53, 0x10, 0x10, 0xcb, 0x00, 0x53, 0x11, + 0x4b, 0x02, 0x00, 0x53, 0x13, 0x52, 0xe5, 0x00, + 0x53, 0x15, 0x10, 0xcd, 0x00, 0x53, 0x16, 0x05, + 0x3d, 0x00, 0x53, 0x17, 0x0e, 0x7a, 0x00, 0x53, + 0x18, 0x52, 0xe6, 0x00, 0x53, 0x19, 0x08, 0x6c, + 0x00, 0x53, 0x1a, 0x10, 0xce, 0x00, 0x53, 0x1b, + 0x52, 0xe7, 0x00, 0x53, 0x1c, 0x41, 0xa0, 0x00, + 0x53, 0x1d, 0x0a, 0xdb, 0x00, 0x53, 0x1e, 0x52, + 0xe8, 0x00, 0x53, 0x1f, 0x4b, 0x03, 0x00, 0x53, + 0x20, 0x09, 0x8a, 0x00, 0x53, 0x21, 0x06, 0xa1, + 0x00, 0x53, 0x23, 0x10, 0xcf, 0x00, 0x53, 0x24, + 0x20, 0xd5, 0x00, 0x53, 0x25, 0x52, 0xe9, 0x00, + 0x53, 0x27, 0x52, 0xea, 0x00, 0x53, 0x28, 0x52, + 0xeb, 0x00, 0x53, 0x29, 0x52, 0xec, 0x00, 0x53, + 0x2a, 0x0d, 0x6f, 0x00, 0x53, 0x2b, 0x52, 0xed, + 0x00, 0x53, 0x2c, 0x52, 0xee, 0x00, 0x53, 0x2d, + 0x4b, 0x04, 0x00, 0x53, 0x2f, 0x10, 0xd0, 0x00, + 0x53, 0x30, 0x52, 0xef, 0x00, 0x53, 0x31, 0x10, + 0xd1, 0x00, 0x53, 0x32, 0x4b, 0x05, 0x00, 0x53, + 0x33, 0x10, 0xd2, 0x00, 0x53, 0x35, 0x43, 0xb1, + 0x00, 0x53, 0x38, 0x10, 0xd3, 0x00, 0x53, 0x39, + 0x0d, 0x96, 0x00, 0x53, 0x3a, 0x06, 0xe0, 0x00, + 0x53, 0x3b, 0x04, 0xa9, 0x00, 0x53, 0x3c, 0x52, + 0xf0, 0x00, 0x53, 0x3d, 0x4b, 0x06, 0x00, 0x53, + 0x3e, 0x38, 0x1e, 0x00, 0x53, 0x3f, 0x0c, 0x97, + 0x00, 0x53, 0x40, 0x10, 0xd4, 0x00, 0x53, 0x41, + 0x09, 0x47, 0x00, 0x53, 0x42, 0x43, 0xb2, 0x00, + 0x53, 0x43, 0x0a, 0x8d, 0x00, 0x53, 0x45, 0x10, + 0xd6, 0x00, 0x53, 0x46, 0x10, 0xd5, 0x00, 0x53, + 0x47, 0x09, 0x8b, 0x00, 0x53, 0x48, 0x07, 0x95, + 0x00, 0x53, 0x49, 0x10, 0xd8, 0x00, 0x53, 0x4a, + 0x0d, 0x52, 0x00, 0x53, 0x4b, 0x38, 0x20, 0x00, + 0x53, 0x4c, 0x38, 0x1f, 0x00, 0x53, 0x4d, 0x10, + 0xd9, 0x00, 0x53, 0x51, 0x34, 0x42, 0x00, 0x53, + 0x52, 0x0b, 0x14, 0x00, 0x53, 0x53, 0x0b, 0x4e, + 0x00, 0x53, 0x54, 0x06, 0xa0, 0x00, 0x53, 0x57, + 0x0c, 0xc6, 0x00, 0x53, 0x58, 0x0b, 0x6f, 0x00, + 0x53, 0x59, 0x52, 0xf1, 0x00, 0x53, 0x5a, 0x0d, + 0x24, 0x00, 0x53, 0x5b, 0x52, 0xf2, 0x00, 0x53, + 0x5c, 0x0e, 0x7c, 0x00, 0x53, 0x5e, 0x10, 0xdb, + 0x00, 0x53, 0x60, 0x0a, 0x8e, 0x00, 0x53, 0x61, + 0x38, 0x21, 0x00, 0x53, 0x63, 0x41, 0xa1, 0x00, + 0x53, 0x65, 0x4b, 0x07, 0x00, 0x53, 0x66, 0x07, + 0x0b, 0x00, 0x53, 0x67, 0x43, 0xb5, 0x00, 0x53, + 0x69, 0x10, 0xdc, 0x00, 0x53, 0x6c, 0x38, 0x22, + 0x00, 0x53, 0x6d, 0x4b, 0x08, 0x00, 0x53, 0x6e, + 0x10, 0xdd, 0x00, 0x53, 0x6f, 0x04, 0xce, 0x00, + 0x53, 0x70, 0x04, 0xb9, 0x00, 0x53, 0x71, 0x06, + 0x29, 0x00, 0x53, 0x72, 0x20, 0xd6, 0x00, 0x53, + 0x73, 0x0b, 0x08, 0x00, 0x53, 0x74, 0x06, 0x6b, + 0x00, 0x53, 0x75, 0x0f, 0x5b, 0x00, 0x53, 0x77, + 0x10, 0xe0, 0x00, 0x53, 0x78, 0x05, 0x37, 0x00, + 0x53, 0x79, 0x4b, 0x09, 0x00, 0x53, 0x7a, 0x43, + 0xb6, 0x00, 0x53, 0x7b, 0x10, 0xdf, 0x00, 0x53, + 0x7d, 0x34, 0x35, 0x00, 0x53, 0x7e, 0x4b, 0x0a, + 0x00, 0x53, 0x7f, 0x35, 0x97, 0x00, 0x53, 0x82, + 0x10, 0xe1, 0x00, 0x53, 0x83, 0x52, 0xf4, 0x00, + 0x53, 0x84, 0x0e, 0xfd, 0x00, 0x53, 0x87, 0x52, + 0xf5, 0x00, 0x53, 0x88, 0x52, 0xf6, 0x00, 0x53, + 0x89, 0x37, 0xd0, 0x00, 0x53, 0x8e, 0x52, 0xf7, + 0x00, 0x53, 0x93, 0x20, 0xd7, 0x00, 0x53, 0x94, + 0x4b, 0x0b, 0x00, 0x53, 0x96, 0x10, 0xe2, 0x00, + 0x53, 0x98, 0x0f, 0x9a, 0x00, 0x53, 0x99, 0x4b, + 0x0c, 0x00, 0x53, 0x9a, 0x07, 0xb0, 0x00, 0x53, + 0x9d, 0x41, 0xa2, 0x00, 0x53, 0x9f, 0x07, 0x6a, + 0x00, 0x53, 0xa0, 0x10, 0xe3, 0x00, 0x53, 0xa1, + 0x52, 0xf8, 0x00, 0x53, 0xa4, 0x43, 0xb7, 0x00, + 0x53, 0xa5, 0x10, 0xe5, 0x00, 0x53, 0xa6, 0x10, + 0xe4, 0x00, 0x53, 0xa8, 0x0a, 0x25, 0x00, 0x53, + 0xa9, 0x04, 0xdb, 0x00, 0x53, 0xaa, 0x4b, 0x0d, + 0x00, 0x53, 0xab, 0x38, 0x23, 0x00, 0x53, 0xad, + 0x05, 0x00, 0x00, 0x53, 0xae, 0x10, 0xe6, 0x00, + 0x53, 0xaf, 0x4b, 0x0e, 0x00, 0x53, 0xb0, 0x10, + 0xe7, 0x00, 0x53, 0xb2, 0x20, 0xd8, 0x00, 0x53, + 0xb3, 0x07, 0x6b, 0x00, 0x53, 0xb4, 0x43, 0xb8, + 0x00, 0x53, 0xb5, 0x52, 0xf9, 0x00, 0x53, 0xb6, + 0x10, 0xe8, 0x00, 0x53, 0xb7, 0x43, 0xba, 0x00, + 0x53, 0xb8, 0x52, 0xfa, 0x00, 0x53, 0xba, 0x4b, + 0x0f, 0x00, 0x53, 0xbb, 0x06, 0x88, 0x00, 0x53, + 0xbd, 0x52, 0xfb, 0x00, 0x53, 0xc0, 0x43, 0xbb, + 0x00, 0x53, 0xc1, 0x4b, 0x10, 0x00, 0x53, 0xc2, + 0x08, 0x80, 0x00, 0x53, 0xc3, 0x10, 0xe9, 0x00, + 0x53, 0xc4, 0x4b, 0x11, 0x00, 0x53, 0xc5, 0x4b, + 0x12, 0x00, 0x53, 0xc8, 0x0e, 0xa2, 0x00, 0x53, + 0xc9, 0x08, 0x25, 0x00, 0x53, 0xca, 0x06, 0x74, + 0x00, 0x53, 0xcb, 0x0f, 0x11, 0x00, 0x53, 0xcc, + 0x0a, 0xd2, 0x00, 0x53, 0xcd, 0x0d, 0x53, 0x00, + 0x53, 0xce, 0x09, 0x29, 0x00, 0x53, 0xcf, 0x52, + 0xfc, 0x00, 0x53, 0xd2, 0x52, 0xfd, 0x00, 0x53, + 0xd3, 0x52, 0xfe, 0x00, 0x53, 0xd4, 0x09, 0x51, + 0x00, 0x53, 0xd5, 0x43, 0xbf, 0x00, 0x53, 0xd6, + 0x09, 0x14, 0x00, 0x53, 0xd7, 0x09, 0x21, 0x00, + 0x53, 0xd9, 0x09, 0x80, 0x00, 0x53, 0xda, 0x38, + 0x24, 0x00, 0x53, 0xdb, 0x0d, 0x54, 0x00, 0x53, + 0xdd, 0x20, 0xd9, 0x00, 0x53, 0xde, 0x52, 0xff, + 0x00, 0x53, 0xdf, 0x10, 0xec, 0x00, 0x53, 0xe0, + 0x4b, 0x13, 0x00, 0x53, 0xe1, 0x04, 0xe5, 0x00, + 0x53, 0xe2, 0x0a, 0xd3, 0x00, 0x53, 0xe3, 0x07, + 0xb1, 0x00, 0x53, 0xe4, 0x07, 0x79, 0x00, 0x53, + 0xe5, 0x06, 0xdf, 0x00, 0x53, 0xe6, 0x38, 0x25, + 0x00, 0x53, 0xe7, 0x53, 0x01, 0x00, 0x53, 0xe8, + 0x10, 0xf0, 0x00, 0x53, 0xe9, 0x0b, 0x5f, 0x00, + 0x53, 0xea, 0x0b, 0x5e, 0x00, 0x53, 0xeb, 0x06, + 0xa3, 0x00, 0x53, 0xec, 0x09, 0x8c, 0x00, 0x53, + 0xed, 0x10, 0xf1, 0x00, 0x53, 0xee, 0x10, 0xef, + 0x00, 0x53, 0xef, 0x05, 0x44, 0x00, 0x53, 0xf0, + 0x0b, 0x46, 0x00, 0x53, 0xf1, 0x08, 0xe4, 0x00, + 0x53, 0xf2, 0x08, 0x99, 0x00, 0x53, 0xf3, 0x04, + 0xc8, 0x00, 0x53, 0xf4, 0x43, 0xc1, 0x00, 0x53, + 0xf5, 0x38, 0x26, 0x00, 0x53, 0xf6, 0x05, 0xce, + 0x00, 0x53, 0xf7, 0x07, 0xf8, 0x00, 0x53, 0xf8, + 0x08, 0x98, 0x00, 0x53, 0xfa, 0x10, 0xf2, 0x00, + 0x54, 0x01, 0x10, 0xf3, 0x00, 0x54, 0x02, 0x53, + 0x02, 0x00, 0x54, 0x03, 0x06, 0x63, 0x00, 0x54, + 0x04, 0x05, 0xa4, 0x00, 0x54, 0x08, 0x07, 0xf9, + 0x00, 0x54, 0x09, 0x06, 0x62, 0x00, 0x54, 0x0a, + 0x0b, 0xfb, 0x00, 0x54, 0x0b, 0x04, 0xc7, 0x00, + 0x54, 0x0c, 0x0c, 0x89, 0x00, 0x54, 0x0d, 0x0e, + 0xca, 0x00, 0x54, 0x0e, 0x07, 0xb3, 0x00, 0x54, + 0x0f, 0x0f, 0x63, 0x00, 0x54, 0x10, 0x0c, 0x41, + 0x00, 0x54, 0x11, 0x07, 0xb2, 0x00, 0x54, 0x12, + 0x41, 0xa3, 0x00, 0x54, 0x13, 0x4b, 0x14, 0x00, + 0x54, 0x1a, 0x53, 0x03, 0x00, 0x54, 0x1b, 0x07, + 0x05, 0x00, 0x54, 0x1d, 0x10, 0xfc, 0x00, 0x54, + 0x1e, 0x36, 0x8c, 0x00, 0x54, 0x1f, 0x06, 0xdb, + 0x00, 0x54, 0x20, 0x0e, 0x78, 0x00, 0x54, 0x21, + 0x53, 0x04, 0x00, 0x54, 0x24, 0x43, 0xc2, 0x00, + 0x54, 0x26, 0x0d, 0x71, 0x00, 0x54, 0x27, 0x38, + 0x27, 0x00, 0x54, 0x28, 0x43, 0xc3, 0x00, 0x54, + 0x29, 0x10, 0xfb, 0x00, 0x54, 0x2a, 0x4b, 0x15, + 0x00, 0x54, 0x2b, 0x06, 0x1a, 0x00, 0x54, 0x2c, + 0x10, 0xf6, 0x00, 0x54, 0x2d, 0x10, 0xf7, 0x00, + 0x54, 0x2e, 0x10, 0xf9, 0x00, 0x54, 0x2f, 0x53, + 0x05, 0x00, 0x54, 0x31, 0x4b, 0x16, 0x00, 0x54, + 0x33, 0x35, 0xc0, 0x00, 0x54, 0x34, 0x4b, 0x17, + 0x00, 0x54, 0x35, 0x4b, 0x18, 0x00, 0x54, 0x36, + 0x10, 0xfa, 0x00, 0x54, 0x38, 0x06, 0x75, 0x00, + 0x54, 0x39, 0x0a, 0x27, 0x00, 0x54, 0x3b, 0x0d, + 0xfd, 0x00, 0x54, 0x3c, 0x10, 0xf8, 0x00, 0x54, + 0x3d, 0x10, 0xf4, 0x00, 0x54, 0x3e, 0x07, 0x97, + 0x00, 0x54, 0x3f, 0x35, 0xcf, 0x00, 0x54, 0x40, + 0x10, 0xf5, 0x00, 0x54, 0x42, 0x0f, 0xca, 0x00, + 0x54, 0x43, 0x43, 0xc5, 0x00, 0x54, 0x44, 0x53, + 0x06, 0x00, 0x54, 0x46, 0x0e, 0x42, 0x00, 0x54, + 0x47, 0x53, 0x07, 0x00, 0x54, 0x48, 0x0c, 0x04, + 0x00, 0x54, 0x49, 0x07, 0x96, 0x00, 0x54, 0x4a, + 0x08, 0x02, 0x00, 0x54, 0x4c, 0x4b, 0x19, 0x00, + 0x54, 0x4d, 0x38, 0x28, 0x00, 0x54, 0x4e, 0x10, + 0xfd, 0x00, 0x54, 0x4f, 0x53, 0x08, 0x00, 0x54, + 0x51, 0x0c, 0xb5, 0x00, 0x54, 0x55, 0x37, 0x23, + 0x00, 0x54, 0x5e, 0x53, 0x09, 0x00, 0x54, 0x5f, + 0x11, 0x01, 0x00, 0x54, 0x62, 0x43, 0xc6, 0x00, + 0x54, 0x64, 0x53, 0x0a, 0x00, 0x54, 0x66, 0x38, + 0x29, 0x00, 0x54, 0x67, 0x53, 0x0b, 0x00, 0x54, + 0x68, 0x35, 0xf7, 0x00, 0x54, 0x69, 0x53, 0x0c, + 0x00, 0x54, 0x6a, 0x09, 0x22, 0x00, 0x54, 0x6b, + 0x38, 0x2a, 0x00, 0x54, 0x6c, 0x43, 0xc7, 0x00, + 0x54, 0x6d, 0x53, 0x0d, 0x00, 0x54, 0x6e, 0x53, + 0x0e, 0x00, 0x54, 0x70, 0x11, 0x04, 0x00, 0x54, + 0x71, 0x11, 0x02, 0x00, 0x54, 0x73, 0x0e, 0xaf, + 0x00, 0x54, 0x74, 0x38, 0x2b, 0x00, 0x54, 0x75, + 0x10, 0xff, 0x00, 0x54, 0x76, 0x11, 0x08, 0x00, + 0x54, 0x77, 0x11, 0x03, 0x00, 0x54, 0x7b, 0x11, + 0x06, 0x00, 0x54, 0x7c, 0x07, 0x7a, 0x00, 0x54, + 0x7d, 0x0e, 0xcb, 0x00, 0x54, 0x7f, 0x41, 0xa4, + 0x00, 0x54, 0x80, 0x11, 0x07, 0x00, 0x54, 0x81, + 0x53, 0x0f, 0x00, 0x54, 0x83, 0x53, 0x10, 0x00, + 0x54, 0x84, 0x11, 0x09, 0x00, 0x54, 0x85, 0x53, + 0x11, 0x00, 0x54, 0x86, 0x11, 0x0b, 0x00, 0x54, + 0x88, 0x41, 0xa5, 0x00, 0x54, 0x89, 0x53, 0x12, + 0x00, 0x54, 0x8a, 0x20, 0xdc, 0x00, 0x54, 0x8b, + 0x08, 0x60, 0x00, 0x54, 0x8c, 0x0f, 0xe8, 0x00, + 0x54, 0x8d, 0x38, 0x2c, 0x00, 0x54, 0x8e, 0x11, + 0x00, 0x00, 0x54, 0x8f, 0x10, 0xfe, 0x00, 0x54, + 0x90, 0x11, 0x0a, 0x00, 0x54, 0x91, 0x53, 0x13, + 0x00, 0x54, 0x92, 0x11, 0x05, 0x00, 0x54, 0x95, + 0x43, 0xc8, 0x00, 0x54, 0x96, 0x38, 0x2d, 0x00, + 0x54, 0x9c, 0x20, 0xdb, 0x00, 0x54, 0x9f, 0x53, + 0x14, 0x00, 0x54, 0xa0, 0x43, 0xc9, 0x00, 0x54, + 0xa1, 0x38, 0x2e, 0x00, 0x54, 0xa2, 0x11, 0x0d, + 0x00, 0x54, 0xa4, 0x11, 0x16, 0x00, 0x54, 0xa5, + 0x11, 0x0f, 0x00, 0x54, 0xa6, 0x43, 0xca, 0x00, + 0x54, 0xa7, 0x4b, 0x1a, 0x00, 0x54, 0xa8, 0x11, + 0x13, 0x00, 0x54, 0xa9, 0x20, 0xdd, 0x00, 0x54, + 0xaa, 0x4b, 0x1b, 0x00, 0x54, 0xab, 0x11, 0x14, + 0x00, 0x54, 0xac, 0x11, 0x10, 0x00, 0x54, 0xad, + 0x38, 0x2f, 0x00, 0x54, 0xae, 0x43, 0xcb, 0x00, + 0x54, 0xaf, 0x11, 0x31, 0x00, 0x54, 0xb1, 0x4b, + 0x1c, 0x00, 0x54, 0xb2, 0x08, 0x59, 0x00, 0x54, + 0xb3, 0x05, 0x8f, 0x00, 0x54, 0xb7, 0x43, 0xcc, + 0x00, 0x54, 0xb8, 0x11, 0x0e, 0x00, 0x54, 0xb9, + 0x38, 0x30, 0x00, 0x54, 0xba, 0x43, 0xcd, 0x00, + 0x54, 0xbb, 0x4b, 0x1d, 0x00, 0x54, 0xbc, 0x11, + 0x18, 0x00, 0x54, 0xbd, 0x04, 0xba, 0x00, 0x54, + 0xbe, 0x11, 0x17, 0x00, 0x54, 0xbf, 0x38, 0x31, + 0x00, 0x54, 0xc0, 0x04, 0x69, 0x00, 0x54, 0xc1, + 0x0d, 0xbc, 0x00, 0x54, 0xc2, 0x11, 0x15, 0x00, + 0x54, 0xc3, 0x43, 0xce, 0x00, 0x54, 0xc4, 0x11, + 0x11, 0x00, 0x54, 0xc6, 0x38, 0x32, 0x00, 0x54, + 0xc7, 0x11, 0x0c, 0x00, 0x54, 0xc8, 0x11, 0x12, + 0x00, 0x54, 0xc9, 0x08, 0x38, 0x00, 0x54, 0xca, + 0x53, 0x15, 0x00, 0x54, 0xcd, 0x38, 0x33, 0x00, + 0x54, 0xce, 0x4b, 0x1e, 0x00, 0x54, 0xd8, 0x11, + 0x19, 0x00, 0x54, 0xe0, 0x53, 0x16, 0x00, 0x54, + 0xe1, 0x04, 0xbb, 0x00, 0x54, 0xe2, 0x11, 0x22, + 0x00, 0x54, 0xe5, 0x11, 0x1a, 0x00, 0x54, 0xe6, + 0x11, 0x1b, 0x00, 0x54, 0xe8, 0x09, 0x8d, 0x00, + 0x54, 0xe9, 0x0e, 0x97, 0x00, 0x54, 0xea, 0x4b, + 0x1f, 0x00, 0x54, 0xec, 0x43, 0xd0, 0x00, 0x54, + 0xed, 0x11, 0x20, 0x00, 0x54, 0xee, 0x11, 0x1f, + 0x00, 0x54, 0xef, 0x43, 0xd1, 0x00, 0x54, 0xf1, + 0x43, 0xd2, 0x00, 0x54, 0xf2, 0x0c, 0x29, 0x00, + 0x54, 0xf3, 0x43, 0xd3, 0x00, 0x54, 0xf6, 0x53, + 0x17, 0x00, 0x54, 0xfa, 0x11, 0x21, 0x00, 0x54, + 0xfc, 0x4b, 0x20, 0x00, 0x54, 0xfd, 0x11, 0x1e, + 0x00, 0x54, 0xfe, 0x53, 0x18, 0x00, 0x54, 0xff, + 0x20, 0xde, 0x00, 0x55, 0x00, 0x43, 0xd4, 0x00, + 0x55, 0x01, 0x43, 0xd5, 0x00, 0x55, 0x04, 0x04, + 0xd6, 0x00, 0x55, 0x05, 0x4b, 0x21, 0x00, 0x55, + 0x06, 0x08, 0x26, 0x00, 0x55, 0x07, 0x09, 0xf6, + 0x00, 0x55, 0x08, 0x4b, 0x22, 0x00, 0x55, 0x09, + 0x43, 0xd6, 0x00, 0x55, 0x0c, 0x53, 0x19, 0x00, + 0x55, 0x0d, 0x53, 0x1a, 0x00, 0x55, 0x0e, 0x38, + 0x34, 0x00, 0x55, 0x0f, 0x11, 0x1c, 0x00, 0x55, + 0x10, 0x0c, 0x5c, 0x00, 0x55, 0x14, 0x11, 0x1d, + 0x00, 0x55, 0x15, 0x4b, 0x23, 0x00, 0x55, 0x16, + 0x04, 0x66, 0x00, 0x55, 0x27, 0x4b, 0x24, 0x00, + 0x55, 0x2a, 0x4b, 0x25, 0x00, 0x55, 0x2b, 0x38, + 0x35, 0x00, 0x55, 0x2e, 0x11, 0x27, 0x00, 0x55, + 0x2f, 0x0f, 0x0d, 0x00, 0x55, 0x31, 0x09, 0x8f, + 0x00, 0x55, 0x32, 0x53, 0x1b, 0x00, 0x55, 0x33, + 0x11, 0x2d, 0x00, 0x55, 0x35, 0x38, 0x36, 0x00, + 0x55, 0x36, 0x4b, 0x26, 0x00, 0x55, 0x38, 0x11, + 0x2c, 0x00, 0x55, 0x39, 0x11, 0x23, 0x00, 0x55, + 0x3b, 0x53, 0x1c, 0x00, 0x55, 0x3c, 0x43, 0xd7, + 0x00, 0x55, 0x3d, 0x53, 0x1d, 0x00, 0x55, 0x3e, + 0x0b, 0x23, 0x00, 0x55, 0x40, 0x11, 0x24, 0x00, + 0x55, 0x41, 0x43, 0xd8, 0x00, 0x55, 0x44, 0x0b, + 0x4f, 0x00, 0x55, 0x45, 0x11, 0x29, 0x00, 0x55, + 0x46, 0x09, 0x8e, 0x00, 0x55, 0x47, 0x43, 0xda, + 0x00, 0x55, 0x49, 0x53, 0x1e, 0x00, 0x55, 0x4a, + 0x38, 0x37, 0x00, 0x55, 0x4c, 0x11, 0x26, 0x00, + 0x55, 0x4d, 0x53, 0x1f, 0x00, 0x55, 0x4f, 0x0e, + 0xf0, 0x00, 0x55, 0x50, 0x41, 0xa6, 0x00, 0x55, + 0x51, 0x4b, 0x27, 0x00, 0x55, 0x53, 0x07, 0x12, + 0x00, 0x55, 0x56, 0x11, 0x2a, 0x00, 0x55, 0x57, + 0x11, 0x2b, 0x00, 0x55, 0x58, 0x53, 0x20, 0x00, + 0x55, 0x5a, 0x53, 0x21, 0x00, 0x55, 0x5b, 0x53, + 0x22, 0x00, 0x55, 0x5c, 0x11, 0x28, 0x00, 0x55, + 0x5d, 0x11, 0x2e, 0x00, 0x55, 0x5e, 0x1d, 0xd1, + 0x00, 0x55, 0x60, 0x38, 0x38, 0x00, 0x55, 0x61, + 0x4f, 0x54, 0x00, 0x55, 0x63, 0x11, 0x25, 0x00, + 0x55, 0x64, 0x43, 0xdc, 0x00, 0x55, 0x66, 0x4b, + 0x28, 0x00, 0x55, 0x7b, 0x11, 0x34, 0x00, 0x55, + 0x7c, 0x11, 0x39, 0x00, 0x55, 0x7d, 0x43, 0xde, + 0x00, 0x55, 0x7e, 0x11, 0x35, 0x00, 0x55, 0x7f, + 0x53, 0x23, 0x00, 0x55, 0x80, 0x11, 0x30, 0x00, + 0x55, 0x81, 0x41, 0xa7, 0x00, 0x55, 0x82, 0x43, + 0xdf, 0x00, 0x55, 0x83, 0x11, 0x3a, 0x00, 0x55, + 0x84, 0x0a, 0xb3, 0x00, 0x55, 0x86, 0x20, 0xdf, + 0x00, 0x55, 0x87, 0x11, 0x3c, 0x00, 0x55, 0x88, + 0x38, 0x3a, 0x00, 0x55, 0x89, 0x07, 0xb4, 0x00, + 0x55, 0x8a, 0x11, 0x32, 0x00, 0x55, 0x8b, 0x0b, + 0xbb, 0x00, 0x55, 0x8e, 0x38, 0x3b, 0x00, 0x55, + 0x8f, 0x4b, 0x29, 0x00, 0x55, 0x91, 0x43, 0xe0, + 0x00, 0x55, 0x92, 0x4b, 0x2a, 0x00, 0x55, 0x93, + 0x53, 0x24, 0x00, 0x55, 0x94, 0x4b, 0x2b, 0x00, + 0x55, 0x97, 0x53, 0x25, 0x00, 0x55, 0x98, 0x11, + 0x36, 0x00, 0x55, 0x99, 0x11, 0x2f, 0x00, 0x55, + 0x9a, 0x05, 0xe9, 0x00, 0x55, 0x9c, 0x06, 0x2a, + 0x00, 0x55, 0x9d, 0x05, 0xc3, 0x00, 0x55, 0x9e, + 0x11, 0x37, 0x00, 0x55, 0x9f, 0x11, 0x33, 0x00, + 0x55, 0xa3, 0x53, 0x26, 0x00, 0x55, 0xa4, 0x4b, + 0x2c, 0x00, 0x55, 0xa7, 0x07, 0x4c, 0x00, 0x55, + 0xa8, 0x11, 0x3d, 0x00, 0x55, 0xa9, 0x11, 0x3b, + 0x00, 0x55, 0xaa, 0x0a, 0xd5, 0x00, 0x55, 0xab, + 0x06, 0x64, 0x00, 0x55, 0xac, 0x06, 0xa4, 0x00, + 0x55, 0xad, 0x41, 0xa8, 0x00, 0x55, 0xae, 0x11, + 0x38, 0x00, 0x55, 0xb0, 0x06, 0xec, 0x00, 0x55, + 0xb2, 0x4b, 0x2d, 0x00, 0x55, 0xb6, 0x04, 0xe6, + 0x00, 0x55, 0xbf, 0x43, 0xe5, 0x00, 0x55, 0xc1, + 0x53, 0x27, 0x00, 0x55, 0xc3, 0x4b, 0x2e, 0x00, + 0x55, 0xc4, 0x11, 0x41, 0x00, 0x55, 0xc5, 0x11, + 0x3f, 0x00, 0x55, 0xc6, 0x4b, 0x2f, 0x00, 0x55, + 0xc7, 0x11, 0x78, 0x00, 0x55, 0xc9, 0x43, 0xe6, + 0x00, 0x55, 0xcb, 0x53, 0x28, 0x00, 0x55, 0xcc, + 0x43, 0xe7, 0x00, 0x55, 0xce, 0x41, 0xa9, 0x00, + 0x55, 0xd1, 0x43, 0xe8, 0x00, 0x55, 0xd2, 0x43, + 0xe2, 0x00, 0x55, 0xd3, 0x4b, 0x30, 0x00, 0x55, + 0xd4, 0x11, 0x44, 0x00, 0x55, 0xd7, 0x53, 0x29, + 0x00, 0x55, 0xd8, 0x53, 0x2a, 0x00, 0x55, 0xda, + 0x11, 0x3e, 0x00, 0x55, 0xdb, 0x4b, 0x31, 0x00, + 0x55, 0xdc, 0x11, 0x42, 0x00, 0x55, 0xdd, 0x43, + 0xe9, 0x00, 0x55, 0xde, 0x53, 0x2b, 0x00, 0x55, + 0xdf, 0x11, 0x40, 0x00, 0x55, 0xe2, 0x43, 0xeb, + 0x00, 0x55, 0xe3, 0x08, 0x9a, 0x00, 0x55, 0xe4, + 0x11, 0x43, 0x00, 0x55, 0xe9, 0x43, 0xed, 0x00, + 0x55, 0xec, 0x4b, 0x32, 0x00, 0x55, 0xee, 0x4b, + 0x33, 0x00, 0x55, 0xf1, 0x4b, 0x34, 0x00, 0x55, + 0xf6, 0x4b, 0x35, 0x00, 0x55, 0xf7, 0x11, 0x46, + 0x00, 0x55, 0xf8, 0x4b, 0x36, 0x00, 0x55, 0xf9, + 0x11, 0x4b, 0x00, 0x55, 0xfd, 0x11, 0x49, 0x00, + 0x55, 0xfe, 0x11, 0x48, 0x00, 0x55, 0xff, 0x53, + 0x2c, 0x00, 0x56, 0x05, 0x4b, 0x37, 0x00, 0x56, + 0x06, 0x34, 0x36, 0x00, 0x56, 0x07, 0x43, 0xf0, + 0x00, 0x56, 0x08, 0x38, 0x3c, 0x00, 0x56, 0x09, + 0x05, 0x45, 0x00, 0x56, 0x0a, 0x53, 0x2e, 0x00, + 0x56, 0x0d, 0x4b, 0x38, 0x00, 0x56, 0x0e, 0x38, + 0x3d, 0x00, 0x56, 0x0f, 0x38, 0x3e, 0x00, 0x56, + 0x10, 0x43, 0xf1, 0x00, 0x56, 0x11, 0x4b, 0x39, + 0x00, 0x56, 0x12, 0x4b, 0x3a, 0x00, 0x56, 0x14, + 0x11, 0x45, 0x00, 0x56, 0x16, 0x11, 0x47, 0x00, + 0x56, 0x17, 0x09, 0x90, 0x00, 0x56, 0x18, 0x04, + 0xd5, 0x00, 0x56, 0x19, 0x53, 0x2f, 0x00, 0x56, + 0x1b, 0x11, 0x4a, 0x00, 0x56, 0x20, 0x3c, 0x1d, + 0x00, 0x56, 0x28, 0x43, 0xee, 0x00, 0x56, 0x29, + 0x05, 0x5e, 0x00, 0x56, 0x2c, 0x4b, 0x3b, 0x00, + 0x56, 0x2f, 0x11, 0x55, 0x00, 0x56, 0x30, 0x43, + 0xf2, 0x00, 0x56, 0x31, 0x09, 0xe4, 0x00, 0x56, + 0x32, 0x11, 0x51, 0x00, 0x56, 0x33, 0x53, 0x30, + 0x00, 0x56, 0x34, 0x11, 0x4f, 0x00, 0x56, 0x35, + 0x4b, 0x3c, 0x00, 0x56, 0x36, 0x11, 0x50, 0x00, + 0x56, 0x37, 0x38, 0x3f, 0x00, 0x56, 0x38, 0x11, + 0x52, 0x00, 0x56, 0x39, 0x4b, 0x3d, 0x00, 0x56, + 0x3b, 0x41, 0xaa, 0x00, 0x56, 0x3c, 0x53, 0x31, + 0x00, 0x56, 0x3d, 0x43, 0xf4, 0x00, 0x56, 0x3f, + 0x38, 0x40, 0x00, 0x56, 0x40, 0x43, 0xf5, 0x00, + 0x56, 0x41, 0x53, 0x32, 0x00, 0x56, 0x42, 0x04, + 0xdf, 0x00, 0x56, 0x43, 0x53, 0x33, 0x00, 0x56, + 0x44, 0x53, 0x34, 0x00, 0x56, 0x46, 0x53, 0x35, + 0x00, 0x56, 0x47, 0x43, 0xf6, 0x00, 0x56, 0x49, + 0x38, 0x41, 0x00, 0x56, 0x4b, 0x38, 0x42, 0x00, + 0x56, 0x4c, 0x0a, 0xbb, 0x00, 0x56, 0x4d, 0x4b, + 0x3e, 0x00, 0x56, 0x4e, 0x11, 0x4c, 0x00, 0x56, + 0x4f, 0x38, 0x43, 0x00, 0x56, 0x50, 0x11, 0x4d, + 0x00, 0x56, 0x53, 0x1f, 0x1b, 0x00, 0x56, 0x54, + 0x4b, 0x3f, 0x00, 0x56, 0x5b, 0x05, 0xd8, 0x00, + 0x56, 0x5e, 0x43, 0xf7, 0x00, 0x56, 0x60, 0x43, + 0xf8, 0x00, 0x56, 0x61, 0x53, 0x36, 0x00, 0x56, + 0x62, 0x53, 0x37, 0x00, 0x56, 0x63, 0x53, 0x38, + 0x00, 0x56, 0x64, 0x11, 0x54, 0x00, 0x56, 0x66, + 0x38, 0x44, 0x00, 0x56, 0x68, 0x06, 0x2b, 0x00, + 0x56, 0x69, 0x38, 0x45, 0x00, 0x56, 0x6a, 0x11, + 0x57, 0x00, 0x56, 0x6b, 0x11, 0x53, 0x00, 0x56, + 0x6c, 0x11, 0x56, 0x00, 0x56, 0x6d, 0x43, 0xf9, + 0x00, 0x56, 0x6f, 0x38, 0x46, 0x00, 0x56, 0x71, + 0x38, 0x47, 0x00, 0x56, 0x72, 0x38, 0x48, 0x00, + 0x56, 0x74, 0x0d, 0xfe, 0x00, 0x56, 0x75, 0x53, + 0x39, 0x00, 0x56, 0x76, 0x3c, 0x33, 0x00, 0x56, + 0x78, 0x0c, 0xad, 0x00, 0x56, 0x7a, 0x0d, 0x4c, + 0x00, 0x56, 0x80, 0x11, 0x59, 0x00, 0x56, 0x84, + 0x53, 0x3a, 0x00, 0x56, 0x85, 0x4b, 0x40, 0x00, + 0x56, 0x86, 0x11, 0x58, 0x00, 0x56, 0x87, 0x05, + 0xa3, 0x00, 0x56, 0x88, 0x43, 0xfb, 0x00, 0x56, + 0x8a, 0x11, 0x5a, 0x00, 0x56, 0x8b, 0x53, 0x3b, + 0x00, 0x56, 0x8c, 0x43, 0xfc, 0x00, 0x56, 0x8f, + 0x11, 0x5d, 0x00, 0x56, 0x94, 0x11, 0x5c, 0x00, + 0x56, 0x95, 0x38, 0x49, 0x00, 0x56, 0x99, 0x1d, + 0xe6, 0x00, 0x56, 0x9a, 0x38, 0x4a, 0x00, 0x56, + 0x9d, 0x43, 0xfd, 0x00, 0x56, 0x9e, 0x41, 0xab, + 0x00, 0x56, 0x9f, 0x4b, 0x41, 0x00, 0x56, 0xa0, + 0x11, 0x5b, 0x00, 0x56, 0xa2, 0x0c, 0xef, 0x00, + 0x56, 0xa5, 0x11, 0x5e, 0x00, 0x56, 0xa6, 0x4b, + 0x42, 0x00, 0x56, 0xa7, 0x53, 0x3c, 0x00, 0x56, + 0xa8, 0x43, 0xfe, 0x00, 0x56, 0xa9, 0x41, 0xac, + 0x00, 0x56, 0xab, 0x53, 0x3d, 0x00, 0x56, 0xac, + 0x38, 0x4b, 0x00, 0x56, 0xad, 0x38, 0x4c, 0x00, + 0x56, 0xae, 0x11, 0x5f, 0x00, 0x56, 0xb1, 0x38, + 0x4d, 0x00, 0x56, 0xb2, 0x43, 0xff, 0x00, 0x56, + 0xb3, 0x41, 0xad, 0x00, 0x56, 0xb4, 0x11, 0x61, + 0x00, 0x56, 0xb6, 0x11, 0x60, 0x00, 0x56, 0xb7, + 0x4b, 0x43, 0x00, 0x56, 0xbc, 0x11, 0x63, 0x00, + 0x56, 0xbe, 0x53, 0x3e, 0x00, 0x56, 0xc0, 0x11, + 0x66, 0x00, 0x56, 0xc1, 0x11, 0x64, 0x00, 0x56, + 0xc2, 0x11, 0x62, 0x00, 0x56, 0xc3, 0x11, 0x65, + 0x00, 0x56, 0xc5, 0x44, 0x00, 0x00, 0x56, 0xc8, + 0x11, 0x67, 0x00, 0x56, 0xc9, 0x38, 0x4e, 0x00, + 0x56, 0xca, 0x1e, 0x5a, 0x00, 0x56, 0xcb, 0x53, + 0x3f, 0x00, 0x56, 0xcc, 0x4b, 0x44, 0x00, 0x56, + 0xcd, 0x44, 0x01, 0x00, 0x56, 0xce, 0x11, 0x68, + 0x00, 0x56, 0xcf, 0x4b, 0x45, 0x00, 0x56, 0xd0, + 0x53, 0x40, 0x00, 0x56, 0xd1, 0x11, 0x69, 0x00, + 0x56, 0xd3, 0x11, 0x6a, 0x00, 0x56, 0xd7, 0x11, + 0x6b, 0x00, 0x56, 0xd8, 0x10, 0x7c, 0x00, 0x56, + 0xd9, 0x4b, 0x46, 0x00, 0x56, 0xda, 0x09, 0x28, + 0x00, 0x56, 0xdb, 0x08, 0x9b, 0x00, 0x56, 0xdc, + 0x53, 0x41, 0x00, 0x56, 0xdd, 0x38, 0x4f, 0x00, + 0x56, 0xde, 0x05, 0x73, 0x00, 0x56, 0xdf, 0x44, + 0x02, 0x00, 0x56, 0xe0, 0x04, 0xbc, 0x00, 0x56, + 0xe1, 0x4b, 0x47, 0x00, 0x56, 0xe3, 0x0b, 0x82, + 0x00, 0x56, 0xe4, 0x38, 0x50, 0x00, 0x56, 0xe5, + 0x53, 0x42, 0x00, 0x56, 0xe6, 0x53, 0x43, 0x00, + 0x56, 0xe7, 0x53, 0x44, 0x00, 0x56, 0xe8, 0x44, + 0x03, 0x00, 0x56, 0xeb, 0x4b, 0x48, 0x00, 0x56, + 0xed, 0x4b, 0x49, 0x00, 0x56, 0xee, 0x11, 0x6c, + 0x00, 0x56, 0xf0, 0x08, 0x14, 0x00, 0x56, 0xf1, + 0x4b, 0x4a, 0x00, 0x56, 0xf2, 0x04, 0x93, 0x00, + 0x56, 0xf3, 0x0a, 0x24, 0x00, 0x56, 0xf6, 0x44, + 0x04, 0x00, 0x56, 0xf7, 0x44, 0x05, 0x00, 0x56, + 0xf9, 0x11, 0x6d, 0x00, 0x56, 0xfa, 0x07, 0x7b, + 0x00, 0x56, 0xfd, 0x08, 0x03, 0x00, 0x56, 0xff, + 0x11, 0x6f, 0x00, 0x57, 0x00, 0x11, 0x6e, 0x00, + 0x57, 0x01, 0x53, 0x45, 0x00, 0x57, 0x02, 0x53, + 0x46, 0x00, 0x57, 0x03, 0x0e, 0x30, 0x00, 0x57, + 0x04, 0x11, 0x70, 0x00, 0x57, 0x07, 0x4b, 0x4b, + 0x00, 0x57, 0x08, 0x11, 0x72, 0x00, 0x57, 0x09, + 0x11, 0x71, 0x00, 0x57, 0x0a, 0x38, 0x51, 0x00, + 0x57, 0x0b, 0x11, 0x73, 0x00, 0x57, 0x0c, 0x4b, + 0x4c, 0x00, 0x57, 0x0d, 0x11, 0x74, 0x00, 0x57, + 0x0f, 0x07, 0x4d, 0x00, 0x57, 0x11, 0x53, 0x47, + 0x00, 0x57, 0x12, 0x05, 0x02, 0x00, 0x57, 0x13, + 0x11, 0x75, 0x00, 0x57, 0x15, 0x38, 0x52, 0x00, + 0x57, 0x16, 0x11, 0x77, 0x00, 0x57, 0x18, 0x11, + 0x76, 0x00, 0x57, 0x1a, 0x4b, 0x4d, 0x00, 0x57, + 0x1b, 0x4b, 0x4e, 0x00, 0x57, 0x1c, 0x11, 0x79, + 0x00, 0x57, 0x1d, 0x4b, 0x4f, 0x00, 0x57, 0x1f, + 0x0c, 0x54, 0x00, 0x57, 0x20, 0x53, 0x48, 0x00, + 0x57, 0x21, 0x36, 0x80, 0x00, 0x57, 0x22, 0x53, + 0x49, 0x00, 0x57, 0x23, 0x38, 0x53, 0x00, 0x57, + 0x24, 0x53, 0x4a, 0x00, 0x57, 0x25, 0x53, 0x4b, + 0x00, 0x57, 0x26, 0x11, 0x7a, 0x00, 0x57, 0x27, + 0x04, 0x79, 0x00, 0x57, 0x28, 0x08, 0x4f, 0x00, + 0x57, 0x29, 0x44, 0x08, 0x00, 0x57, 0x2a, 0x53, + 0x4c, 0x00, 0x57, 0x2c, 0x4b, 0x50, 0x00, 0x57, + 0x2d, 0x07, 0x13, 0x00, 0x57, 0x2e, 0x4b, 0x51, + 0x00, 0x57, 0x2f, 0x38, 0x54, 0x00, 0x57, 0x30, + 0x0b, 0x8d, 0x00, 0x57, 0x33, 0x38, 0x55, 0x00, + 0x57, 0x34, 0x38, 0x56, 0x00, 0x57, 0x37, 0x11, + 0x7b, 0x00, 0x57, 0x38, 0x11, 0x7c, 0x00, 0x57, + 0x3b, 0x11, 0x7e, 0x00, 0x57, 0x3d, 0x4b, 0x52, + 0x00, 0x57, 0x3e, 0x4b, 0x53, 0x00, 0x57, 0x3f, + 0x53, 0x4d, 0x00, 0x57, 0x40, 0x11, 0x7f, 0x00, + 0x57, 0x42, 0x08, 0x54, 0x00, 0x57, 0x45, 0x44, + 0x0a, 0x00, 0x57, 0x46, 0x44, 0x0b, 0x00, 0x57, + 0x47, 0x06, 0xc9, 0x00, 0x57, 0x4a, 0x0e, 0x65, + 0x00, 0x57, 0x4c, 0x38, 0x57, 0x00, 0x57, 0x4d, + 0x44, 0x0c, 0x00, 0x57, 0x4e, 0x11, 0x7d, 0x00, + 0x57, 0x4f, 0x11, 0x80, 0x00, 0x57, 0x50, 0x08, + 0x31, 0x00, 0x57, 0x51, 0x07, 0xb5, 0x00, 0x57, + 0x52, 0x53, 0x4e, 0x00, 0x57, 0x59, 0x20, 0xe0, + 0x00, 0x57, 0x5f, 0x4b, 0x54, 0x00, 0x57, 0x61, + 0x11, 0x84, 0x00, 0x57, 0x62, 0x53, 0x4f, 0x00, + 0x57, 0x64, 0x08, 0x15, 0x00, 0x57, 0x65, 0x20, + 0xe1, 0x00, 0x57, 0x66, 0x0b, 0x71, 0x00, 0x57, + 0x67, 0x53, 0x50, 0x00, 0x57, 0x68, 0x44, 0x0e, + 0x00, 0x57, 0x69, 0x11, 0x81, 0x00, 0x57, 0x6a, + 0x0b, 0xf6, 0x00, 0x57, 0x6b, 0x4b, 0x55, 0x00, + 0x57, 0x6d, 0x4b, 0x56, 0x00, 0x57, 0x6e, 0x53, + 0x51, 0x00, 0x57, 0x6f, 0x44, 0x0f, 0x00, 0x57, + 0x70, 0x38, 0x58, 0x00, 0x57, 0x71, 0x53, 0x52, + 0x00, 0x57, 0x73, 0x44, 0x10, 0x00, 0x57, 0x74, + 0x44, 0x11, 0x00, 0x57, 0x75, 0x44, 0x12, 0x00, + 0x57, 0x77, 0x41, 0xae, 0x00, 0x57, 0x79, 0x53, + 0x53, 0x00, 0x57, 0x7a, 0x4b, 0x57, 0x00, 0x57, + 0x7b, 0x44, 0x13, 0x00, 0x57, 0x7c, 0x41, 0xaf, + 0x00, 0x57, 0x7e, 0x53, 0x54, 0x00, 0x57, 0x7f, + 0x11, 0x85, 0x00, 0x57, 0x81, 0x53, 0x55, 0x00, + 0x57, 0x82, 0x0a, 0x28, 0x00, 0x57, 0x83, 0x4b, + 0x58, 0x00, 0x57, 0x88, 0x11, 0x83, 0x00, 0x57, + 0x89, 0x11, 0x86, 0x00, 0x57, 0x8b, 0x07, 0x15, + 0x00, 0x57, 0x8c, 0x38, 0x59, 0x00, 0x57, 0x93, + 0x11, 0x87, 0x00, 0x57, 0x94, 0x53, 0x56, 0x00, + 0x57, 0x95, 0x53, 0x5a, 0x00, 0x57, 0x97, 0x4b, + 0x59, 0x00, 0x57, 0x99, 0x53, 0x57, 0x00, 0x57, + 0x9a, 0x44, 0x16, 0x00, 0x57, 0x9c, 0x38, 0x5a, + 0x00, 0x57, 0x9d, 0x44, 0x17, 0x00, 0x57, 0x9e, + 0x44, 0x18, 0x00, 0x57, 0x9f, 0x53, 0x58, 0x00, + 0x57, 0xa0, 0x11, 0x88, 0x00, 0x57, 0xa1, 0x53, + 0x59, 0x00, 0x57, 0xa2, 0x07, 0xb6, 0x00, 0x57, + 0xa3, 0x05, 0x9e, 0x00, 0x57, 0xa4, 0x11, 0x8a, + 0x00, 0x57, 0xa7, 0x53, 0x5b, 0x00, 0x57, 0xa8, + 0x44, 0x19, 0x00, 0x57, 0xa9, 0x53, 0x5c, 0x00, + 0x57, 0xaa, 0x11, 0x8b, 0x00, 0x57, 0xac, 0x20, + 0xe2, 0x00, 0x57, 0xae, 0x4b, 0x5a, 0x00, 0x57, + 0xb0, 0x11, 0x8c, 0x00, 0x57, 0xb3, 0x11, 0x89, + 0x00, 0x57, 0xb8, 0x38, 0x5b, 0x00, 0x57, 0xbd, + 0x53, 0x5d, 0x00, 0x57, 0xc0, 0x11, 0x82, 0x00, + 0x57, 0xc3, 0x11, 0x8d, 0x00, 0x57, 0xc6, 0x11, + 0x8e, 0x00, 0x57, 0xc7, 0x20, 0xe4, 0x00, 0x57, + 0xc8, 0x20, 0xe3, 0x00, 0x57, 0xcb, 0x0e, 0x92, + 0x00, 0x57, 0xcc, 0x44, 0x1c, 0x00, 0x57, 0xce, + 0x36, 0x11, 0x00, 0x57, 0xcf, 0x41, 0xb1, 0x00, + 0x57, 0xd2, 0x11, 0x90, 0x00, 0x57, 0xd3, 0x11, + 0x91, 0x00, 0x57, 0xd4, 0x11, 0x8f, 0x00, 0x57, + 0xd5, 0x4b, 0x5b, 0x00, 0x57, 0xd6, 0x11, 0x93, + 0x00, 0x57, 0xd7, 0x44, 0x1a, 0x00, 0x57, 0xdc, + 0x0c, 0xee, 0x00, 0x57, 0xdd, 0x53, 0x5e, 0x00, + 0x57, 0xde, 0x44, 0x1f, 0x00, 0x57, 0xdf, 0x04, + 0xac, 0x00, 0x57, 0xe0, 0x0d, 0xc8, 0x00, 0x57, + 0xe1, 0x53, 0x63, 0x00, 0x57, 0xe3, 0x11, 0x94, + 0x00, 0x57, 0xe4, 0x41, 0xb2, 0x00, 0x57, 0xe6, + 0x38, 0x5c, 0x00, 0x57, 0xe7, 0x4b, 0x5c, 0x00, + 0x57, 0xe9, 0x53, 0x5f, 0x00, 0x57, 0xed, 0x38, + 0x5d, 0x00, 0x57, 0xf0, 0x44, 0x20, 0x00, 0x57, + 0xf4, 0x09, 0xe5, 0x00, 0x57, 0xf5, 0x38, 0x5e, + 0x00, 0x57, 0xf6, 0x38, 0x5f, 0x00, 0x57, 0xf7, + 0x08, 0xe5, 0x00, 0x57, 0xf8, 0x44, 0x22, 0x00, + 0x57, 0xf9, 0x0d, 0x13, 0x00, 0x57, 0xfa, 0x06, + 0x2c, 0x00, 0x57, 0xfb, 0x44, 0x23, 0x00, 0x57, + 0xfc, 0x08, 0x5b, 0x00, 0x57, 0xfd, 0x44, 0x24, + 0x00, 0x57, 0xfe, 0x53, 0x60, 0x00, 0x57, 0xff, + 0x38, 0x60, 0x00, 0x58, 0x00, 0x0e, 0x87, 0x00, + 0x58, 0x02, 0x0c, 0x8a, 0x00, 0x58, 0x03, 0x53, + 0x61, 0x00, 0x58, 0x04, 0x44, 0x25, 0x00, 0x58, + 0x05, 0x07, 0x4e, 0x00, 0x58, 0x06, 0x0b, 0x2f, + 0x00, 0x58, 0x08, 0x53, 0x62, 0x00, 0x58, 0x09, + 0x38, 0x61, 0x00, 0x58, 0x0a, 0x11, 0x92, 0x00, + 0x58, 0x0b, 0x11, 0x95, 0x00, 0x58, 0x0c, 0x53, + 0x64, 0x00, 0x58, 0x0d, 0x4b, 0x5d, 0x00, 0x58, + 0x15, 0x0b, 0x24, 0x00, 0x58, 0x19, 0x11, 0x96, + 0x00, 0x58, 0x1b, 0x53, 0x65, 0x00, 0x58, 0x1d, + 0x11, 0x97, 0x00, 0x58, 0x1e, 0x44, 0x26, 0x00, + 0x58, 0x1f, 0x53, 0x66, 0x00, 0x58, 0x20, 0x38, + 0x62, 0x00, 0x58, 0x21, 0x11, 0x99, 0x00, 0x58, + 0x24, 0x0c, 0x05, 0x00, 0x58, 0x26, 0x4b, 0x5e, + 0x00, 0x58, 0x27, 0x44, 0x27, 0x00, 0x58, 0x2a, + 0x05, 0xea, 0x00, 0x58, 0x2d, 0x53, 0x67, 0x00, + 0x58, 0x2f, 0x1d, 0x32, 0x00, 0x58, 0x30, 0x05, + 0x03, 0x00, 0x58, 0x31, 0x0e, 0x43, 0x00, 0x58, + 0x32, 0x38, 0x63, 0x00, 0x58, 0x34, 0x09, 0xd4, + 0x00, 0x58, 0x35, 0x0c, 0x42, 0x00, 0x58, 0x39, + 0x44, 0x28, 0x00, 0x58, 0x3a, 0x08, 0x56, 0x00, + 0x58, 0x3d, 0x11, 0x9f, 0x00, 0x58, 0x3f, 0x53, + 0x68, 0x00, 0x58, 0x40, 0x0e, 0x0d, 0x00, 0x58, + 0x41, 0x0f, 0xa5, 0x00, 0x58, 0x49, 0x44, 0x2a, + 0x00, 0x58, 0x4a, 0x05, 0x74, 0x00, 0x58, 0x4b, + 0x11, 0x9b, 0x00, 0x58, 0x4c, 0x44, 0x2b, 0x00, + 0x58, 0x4d, 0x4b, 0x5f, 0x00, 0x58, 0x4f, 0x4b, + 0x60, 0x00, 0x58, 0x50, 0x53, 0x69, 0x00, 0x58, + 0x51, 0x0a, 0xbc, 0x00, 0x58, 0x52, 0x11, 0x9e, + 0x00, 0x58, 0x54, 0x0c, 0x5d, 0x00, 0x58, 0x55, + 0x53, 0x6a, 0x00, 0x58, 0x57, 0x0c, 0x43, 0x00, + 0x58, 0x58, 0x0c, 0x5e, 0x00, 0x58, 0x59, 0x0d, + 0x4d, 0x00, 0x58, 0x5a, 0x0b, 0xe9, 0x00, 0x58, + 0x5e, 0x08, 0x39, 0x00, 0x58, 0x5f, 0x4b, 0x61, + 0x00, 0x58, 0x61, 0x1e, 0x47, 0x00, 0x58, 0x62, + 0x11, 0x9a, 0x00, 0x58, 0x64, 0x41, 0xb3, 0x00, + 0x58, 0x67, 0x44, 0x2c, 0x00, 0x58, 0x68, 0x53, + 0x6b, 0x00, 0x58, 0x69, 0x05, 0x18, 0x00, 0x58, + 0x6b, 0x0c, 0x30, 0x00, 0x58, 0x6d, 0x4b, 0x62, + 0x00, 0x58, 0x70, 0x11, 0x9c, 0x00, 0x58, 0x72, + 0x11, 0x98, 0x00, 0x58, 0x75, 0x0a, 0x16, 0x00, + 0x58, 0x78, 0x53, 0x6c, 0x00, 0x58, 0x79, 0x11, + 0xa0, 0x00, 0x58, 0x7c, 0x38, 0x64, 0x00, 0x58, + 0x7e, 0x09, 0x58, 0x00, 0x58, 0x7f, 0x4b, 0x63, + 0x00, 0x58, 0x80, 0x38, 0x65, 0x00, 0x58, 0x81, + 0x4b, 0x64, 0x00, 0x58, 0x83, 0x06, 0xa5, 0x00, + 0x58, 0x85, 0x11, 0xa1, 0x00, 0x58, 0x87, 0x53, + 0x6d, 0x00, 0x58, 0x88, 0x53, 0x6e, 0x00, 0x58, + 0x89, 0x41, 0xb4, 0x00, 0x58, 0x8a, 0x44, 0x2d, + 0x00, 0x58, 0x8b, 0x44, 0x2e, 0x00, 0x58, 0x8c, + 0x53, 0x6f, 0x00, 0x58, 0x8d, 0x44, 0x2f, 0x00, + 0x58, 0x8f, 0x44, 0x30, 0x00, 0x58, 0x90, 0x44, + 0x31, 0x00, 0x58, 0x93, 0x0e, 0x38, 0x00, 0x58, + 0x94, 0x44, 0x32, 0x00, 0x58, 0x96, 0x53, 0x70, + 0x00, 0x58, 0x97, 0x0a, 0xff, 0x00, 0x58, 0x98, + 0x4b, 0x65, 0x00, 0x58, 0x9c, 0x0b, 0xe2, 0x00, + 0x58, 0x9d, 0x44, 0x33, 0x00, 0x58, 0x9e, 0x20, + 0xe7, 0x00, 0x58, 0x9f, 0x11, 0xa3, 0x00, 0x58, + 0xa0, 0x53, 0x71, 0x00, 0x58, 0xa1, 0x53, 0x72, + 0x00, 0x58, 0xa2, 0x53, 0x73, 0x00, 0x58, 0xa6, + 0x53, 0x74, 0x00, 0x58, 0xa8, 0x34, 0x4b, 0x00, + 0x58, 0xa9, 0x38, 0x66, 0x00, 0x58, 0xaa, 0x44, + 0x34, 0x00, 0x58, 0xab, 0x11, 0xa4, 0x00, 0x58, + 0xae, 0x11, 0xa9, 0x00, 0x58, 0xb1, 0x44, 0x35, + 0x00, 0x58, 0xb2, 0x20, 0xe8, 0x00, 0x58, 0xb3, + 0x0d, 0xff, 0x00, 0x58, 0xb8, 0x11, 0xa8, 0x00, + 0x58, 0xb9, 0x11, 0xa2, 0x00, 0x58, 0xba, 0x11, + 0xa5, 0x00, 0x58, 0xbb, 0x11, 0xa7, 0x00, 0x58, + 0xbc, 0x4b, 0x66, 0x00, 0x58, 0xbe, 0x08, 0x16, + 0x00, 0x58, 0xc1, 0x0e, 0x19, 0x00, 0x58, 0xc2, + 0x53, 0x76, 0x00, 0x58, 0xc3, 0x44, 0x37, 0x00, + 0x58, 0xc4, 0x53, 0x75, 0x00, 0x58, 0xc5, 0x11, + 0xaa, 0x00, 0x58, 0xc7, 0x0b, 0x83, 0x00, 0x58, + 0xc8, 0x53, 0x77, 0x00, 0x58, 0xca, 0x05, 0x75, + 0x00, 0x58, 0xcc, 0x09, 0xd5, 0x00, 0x58, 0xcd, + 0x44, 0x38, 0x00, 0x58, 0xce, 0x38, 0x67, 0x00, + 0x58, 0xd0, 0x38, 0x68, 0x00, 0x58, 0xd1, 0x11, + 0xac, 0x00, 0x58, 0xd2, 0x41, 0xb6, 0x00, 0x58, + 0xd3, 0x11, 0xab, 0x00, 0x58, 0xd4, 0x38, 0x69, + 0x00, 0x58, 0xd5, 0x07, 0xfa, 0x00, 0x58, 0xd6, + 0x53, 0x78, 0x00, 0x58, 0xd7, 0x11, 0xad, 0x00, + 0x58, 0xd8, 0x11, 0xaf, 0x00, 0x58, 0xd9, 0x11, + 0xae, 0x00, 0x58, 0xda, 0x38, 0x6a, 0x00, 0x58, + 0xdc, 0x11, 0xb1, 0x00, 0x58, 0xdd, 0x53, 0x79, + 0x00, 0x58, 0xde, 0x11, 0xa6, 0x00, 0x58, 0xdf, + 0x11, 0xb3, 0x00, 0x58, 0xe0, 0x41, 0xb7, 0x00, + 0x58, 0xe1, 0x53, 0x7a, 0x00, 0x58, 0xe2, 0x44, + 0x39, 0x00, 0x58, 0xe4, 0x11, 0xb2, 0x00, 0x58, + 0xe5, 0x11, 0xb0, 0x00, 0x58, 0xe9, 0x38, 0x6b, + 0x00, 0x58, 0xeb, 0x08, 0x9c, 0x00, 0x58, 0xec, + 0x0a, 0x17, 0x00, 0x58, 0xee, 0x0a, 0xd6, 0x00, + 0x58, 0xef, 0x11, 0xb4, 0x00, 0x58, 0xf0, 0x0a, + 0x60, 0x00, 0x58, 0xf1, 0x04, 0xb1, 0x00, 0x58, + 0xf2, 0x0d, 0x1a, 0x00, 0x58, 0xf3, 0x44, 0x3a, + 0x00, 0x58, 0xf4, 0x44, 0x3b, 0x00, 0x58, 0xf7, + 0x0b, 0xf7, 0x00, 0x58, 0xf9, 0x11, 0xb6, 0x00, + 0x58, 0xfa, 0x11, 0xb5, 0x00, 0x58, 0xfb, 0x11, + 0xb7, 0x00, 0x58, 0xfc, 0x11, 0xb8, 0x00, 0x58, + 0xfd, 0x11, 0xb9, 0x00, 0x59, 0x02, 0x11, 0xba, + 0x00, 0x59, 0x05, 0x44, 0x3c, 0x00, 0x59, 0x06, + 0x44, 0x3d, 0x00, 0x59, 0x09, 0x0e, 0x21, 0x00, + 0x59, 0x0a, 0x11, 0xbb, 0x00, 0x59, 0x0b, 0x20, + 0xe9, 0x00, 0x59, 0x0c, 0x38, 0x6c, 0x00, 0x59, + 0x0d, 0x44, 0x3e, 0x00, 0x59, 0x0f, 0x05, 0x46, + 0x00, 0x59, 0x10, 0x11, 0xbc, 0x00, 0x59, 0x12, + 0x53, 0x7c, 0x00, 0x59, 0x13, 0x53, 0x7d, 0x00, + 0x59, 0x14, 0x44, 0x3f, 0x00, 0x59, 0x15, 0x0f, + 0x26, 0x00, 0x59, 0x16, 0x05, 0x8e, 0x00, 0x59, + 0x18, 0x10, 0xde, 0x00, 0x59, 0x19, 0x09, 0x52, + 0x00, 0x59, 0x1a, 0x0b, 0x1f, 0x00, 0x59, 0x1b, + 0x11, 0xbd, 0x00, 0x59, 0x1c, 0x0e, 0xf7, 0x00, + 0x59, 0x1d, 0x53, 0x7e, 0x00, 0x59, 0x1f, 0x4b, + 0x67, 0x00, 0x59, 0x21, 0x53, 0x7f, 0x00, 0x59, + 0x22, 0x0e, 0xc0, 0x00, 0x59, 0x23, 0x4b, 0x68, + 0x00, 0x59, 0x24, 0x38, 0x6d, 0x00, 0x59, 0x25, + 0x11, 0xbf, 0x00, 0x59, 0x27, 0x0b, 0x47, 0x00, + 0x59, 0x28, 0x53, 0x80, 0x00, 0x59, 0x29, 0x0c, + 0x31, 0x00, 0x59, 0x2a, 0x0b, 0x20, 0x00, 0x59, + 0x2b, 0x0d, 0xc9, 0x00, 0x59, 0x2c, 0x11, 0xc0, + 0x00, 0x59, 0x2d, 0x11, 0xc1, 0x00, 0x59, 0x2e, + 0x05, 0x1d, 0x00, 0x59, 0x2f, 0x38, 0x6e, 0x00, + 0x59, 0x30, 0x53, 0x81, 0x00, 0x59, 0x31, 0x08, + 0xe6, 0x00, 0x59, 0x32, 0x11, 0xc2, 0x00, 0x59, + 0x33, 0x53, 0x82, 0x00, 0x59, 0x35, 0x53, 0x83, + 0x00, 0x59, 0x36, 0x53, 0x84, 0x00, 0x59, 0x37, + 0x04, 0x94, 0x00, 0x59, 0x38, 0x11, 0xc3, 0x00, + 0x59, 0x39, 0x37, 0x25, 0x00, 0x59, 0x3d, 0x44, + 0x42, 0x00, 0x59, 0x3e, 0x11, 0xc4, 0x00, 0x59, + 0x3f, 0x53, 0x85, 0x00, 0x59, 0x43, 0x53, 0x86, + 0x00, 0x59, 0x44, 0x05, 0x04, 0x00, 0x59, 0x46, + 0x44, 0x44, 0x00, 0x59, 0x47, 0x06, 0x2d, 0x00, + 0x59, 0x48, 0x0c, 0xb8, 0x00, 0x59, 0x49, 0x0e, + 0x44, 0x00, 0x59, 0x4e, 0x11, 0xc8, 0x00, 0x59, + 0x4f, 0x0a, 0xd7, 0x00, 0x59, 0x50, 0x11, 0xc7, + 0x00, 0x59, 0x51, 0x07, 0x16, 0x00, 0x59, 0x52, + 0x53, 0x87, 0x00, 0x59, 0x53, 0x20, 0xea, 0x00, + 0x59, 0x54, 0x0e, 0x89, 0x00, 0x59, 0x55, 0x11, + 0xc6, 0x00, 0x59, 0x57, 0x0c, 0x5f, 0x00, 0x59, + 0x58, 0x11, 0xca, 0x00, 0x59, 0x59, 0x4b, 0x69, + 0x00, 0x59, 0x5a, 0x11, 0xc9, 0x00, 0x59, 0x5b, + 0x20, 0xeb, 0x00, 0x59, 0x5d, 0x20, 0xec, 0x00, + 0x59, 0x5e, 0x53, 0x88, 0x00, 0x59, 0x5f, 0x44, + 0x47, 0x00, 0x59, 0x60, 0x11, 0xcc, 0x00, 0x59, + 0x61, 0x38, 0x6f, 0x00, 0x59, 0x62, 0x11, 0xcb, + 0x00, 0x59, 0x63, 0x20, 0xed, 0x00, 0x59, 0x65, + 0x05, 0x1e, 0x00, 0x59, 0x67, 0x11, 0xcd, 0x00, + 0x59, 0x68, 0x09, 0x91, 0x00, 0x59, 0x69, 0x11, + 0xcf, 0x00, 0x59, 0x6a, 0x0b, 0x63, 0x00, 0x59, + 0x6b, 0x53, 0x89, 0x00, 0x59, 0x6c, 0x11, 0xce, + 0x00, 0x59, 0x6d, 0x38, 0x70, 0x00, 0x59, 0x6e, + 0x0e, 0x03, 0x00, 0x59, 0x6f, 0x53, 0x8a, 0x00, + 0x59, 0x72, 0x53, 0x8b, 0x00, 0x59, 0x73, 0x09, + 0x81, 0x00, 0x59, 0x74, 0x0c, 0x55, 0x00, 0x59, + 0x75, 0x44, 0x49, 0x00, 0x59, 0x76, 0x44, 0x4a, + 0x00, 0x59, 0x78, 0x11, 0xd0, 0x00, 0x59, 0x79, + 0x4b, 0x6a, 0x00, 0x59, 0x7b, 0x53, 0x8c, 0x00, + 0x59, 0x7c, 0x44, 0x4b, 0x00, 0x59, 0x7d, 0x07, + 0xb7, 0x00, 0x59, 0x81, 0x11, 0xd1, 0x00, 0x59, + 0x82, 0x0c, 0xd7, 0x00, 0x59, 0x83, 0x0d, 0x72, + 0x00, 0x59, 0x84, 0x0e, 0xdd, 0x00, 0x59, 0x8a, + 0x0c, 0xdb, 0x00, 0x59, 0x8b, 0x41, 0xb9, 0x00, + 0x59, 0x8c, 0x53, 0x8d, 0x00, 0x59, 0x8d, 0x11, + 0xda, 0x00, 0x59, 0x8e, 0x53, 0x8e, 0x00, 0x59, + 0x92, 0x41, 0xba, 0x00, 0x59, 0x93, 0x06, 0x52, + 0x00, 0x59, 0x95, 0x53, 0x8f, 0x00, 0x59, 0x96, + 0x0f, 0x2f, 0x00, 0x59, 0x97, 0x4b, 0x6b, 0x00, + 0x59, 0x99, 0x0e, 0xbb, 0x00, 0x59, 0x9b, 0x12, + 0x39, 0x00, 0x59, 0x9d, 0x11, 0xd2, 0x00, 0x59, + 0x9f, 0x44, 0x4c, 0x00, 0x59, 0xa3, 0x11, 0xd5, + 0x00, 0x59, 0xa4, 0x20, 0xee, 0x00, 0x59, 0xa5, + 0x0b, 0x25, 0x00, 0x59, 0xa7, 0x53, 0x90, 0x00, + 0x59, 0xa8, 0x0e, 0x66, 0x00, 0x59, 0xac, 0x0c, + 0x44, 0x00, 0x59, 0xad, 0x53, 0x91, 0x00, 0x59, + 0xae, 0x44, 0x4d, 0x00, 0x59, 0xaf, 0x4b, 0x6c, + 0x00, 0x59, 0xb0, 0x53, 0x92, 0x00, 0x59, 0xb2, + 0x11, 0xd6, 0x00, 0x59, 0xb3, 0x4b, 0x6d, 0x00, + 0x59, 0xb7, 0x53, 0x93, 0x00, 0x59, 0xb9, 0x0e, + 0x93, 0x00, 0x59, 0xba, 0x20, 0xef, 0x00, 0x59, + 0xbb, 0x08, 0x3a, 0x00, 0x59, 0xbc, 0x44, 0x4e, + 0x00, 0x59, 0xbe, 0x09, 0x92, 0x00, 0x59, 0xc1, + 0x53, 0x94, 0x00, 0x59, 0xc3, 0x41, 0xbb, 0x00, + 0x59, 0xc4, 0x53, 0x95, 0x00, 0x59, 0xc6, 0x11, + 0xd7, 0x00, 0x59, 0xc8, 0x44, 0x4f, 0x00, 0x59, + 0xc9, 0x08, 0x9e, 0x00, 0x59, 0xca, 0x38, 0x71, + 0x00, 0x59, 0xcb, 0x08, 0x9d, 0x00, 0x59, 0xcd, + 0x44, 0x50, 0x00, 0x59, 0xd0, 0x04, 0x7d, 0x00, + 0x59, 0xd1, 0x07, 0x7c, 0x00, 0x59, 0xd2, 0x38, + 0x72, 0x00, 0x59, 0xd3, 0x0a, 0x4f, 0x00, 0x59, + 0xd4, 0x04, 0x95, 0x00, 0x59, 0xd9, 0x11, 0xdb, + 0x00, 0x59, 0xda, 0x11, 0xdc, 0x00, 0x59, 0xdc, + 0x11, 0xd9, 0x00, 0x59, 0xdd, 0x38, 0x73, 0x00, + 0x59, 0xde, 0x44, 0x51, 0x00, 0x59, 0xdf, 0x4b, + 0x6e, 0x00, 0x59, 0xe3, 0x38, 0x74, 0x00, 0x59, + 0xe4, 0x38, 0x75, 0x00, 0x59, 0xe5, 0x04, 0xda, + 0x00, 0x59, 0xe6, 0x05, 0xeb, 0x00, 0x59, 0xe7, + 0x44, 0x52, 0x00, 0x59, 0xe8, 0x11, 0xd8, 0x00, + 0x59, 0xea, 0x0e, 0xd1, 0x00, 0x59, 0xeb, 0x0d, + 0xa3, 0x00, 0x59, 0xec, 0x36, 0xad, 0x00, 0x59, + 0xee, 0x44, 0x53, 0x00, 0x59, 0xef, 0x53, 0x96, + 0x00, 0x59, 0xf1, 0x4b, 0x6f, 0x00, 0x59, 0xf2, + 0x53, 0x97, 0x00, 0x59, 0xf4, 0x53, 0x98, 0x00, + 0x59, 0xf6, 0x04, 0x6c, 0x00, 0x59, 0xf7, 0x53, + 0x99, 0x00, 0x59, 0xf8, 0x4b, 0x70, 0x00, 0x59, + 0xfb, 0x04, 0xbd, 0x00, 0x59, 0xff, 0x08, 0x9f, + 0x00, 0x5a, 0x00, 0x53, 0x9a, 0x00, 0x5a, 0x01, + 0x04, 0x96, 0x00, 0x5a, 0x03, 0x04, 0x67, 0x00, + 0x5a, 0x04, 0x38, 0x76, 0x00, 0x5a, 0x09, 0x11, + 0xe1, 0x00, 0x5a, 0x0c, 0x38, 0x77, 0x00, 0x5a, + 0x0d, 0x44, 0x57, 0x00, 0x5a, 0x0e, 0x53, 0x9b, + 0x00, 0x5a, 0x11, 0x11, 0xdf, 0x00, 0x5a, 0x12, + 0x53, 0x9c, 0x00, 0x5a, 0x13, 0x41, 0xbc, 0x00, + 0x5a, 0x17, 0x44, 0x58, 0x00, 0x5a, 0x18, 0x0e, + 0xc8, 0x00, 0x5a, 0x1a, 0x11, 0xe2, 0x00, 0x5a, + 0x1b, 0x35, 0xc1, 0x00, 0x5a, 0x1c, 0x11, 0xe0, + 0x00, 0x5a, 0x1e, 0x53, 0x9d, 0x00, 0x5a, 0x1f, + 0x11, 0xde, 0x00, 0x5a, 0x20, 0x09, 0xf7, 0x00, + 0x5a, 0x23, 0x38, 0x78, 0x00, 0x5a, 0x24, 0x53, + 0x9e, 0x00, 0x5a, 0x25, 0x11, 0xdd, 0x00, 0x5a, + 0x27, 0x44, 0x59, 0x00, 0x5a, 0x28, 0x53, 0x9f, + 0x00, 0x5a, 0x29, 0x0e, 0x2a, 0x00, 0x5a, 0x2a, + 0x53, 0xa0, 0x00, 0x5a, 0x2d, 0x44, 0x5a, 0x00, + 0x5a, 0x2f, 0x07, 0x98, 0x00, 0x5a, 0x30, 0x53, + 0xa1, 0x00, 0x5a, 0x35, 0x11, 0xe6, 0x00, 0x5a, + 0x36, 0x11, 0xe7, 0x00, 0x5a, 0x3c, 0x09, 0x93, + 0x00, 0x5a, 0x40, 0x11, 0xe3, 0x00, 0x5a, 0x41, + 0x0f, 0xd2, 0x00, 0x5a, 0x44, 0x53, 0xa2, 0x00, + 0x5a, 0x45, 0x53, 0xa3, 0x00, 0x5a, 0x46, 0x0d, + 0x02, 0x00, 0x5a, 0x47, 0x38, 0x79, 0x00, 0x5a, + 0x48, 0x53, 0xa4, 0x00, 0x5a, 0x49, 0x11, 0xe5, + 0x00, 0x5a, 0x4c, 0x53, 0xa5, 0x00, 0x5a, 0x50, + 0x53, 0xa6, 0x00, 0x5a, 0x55, 0x38, 0x7a, 0x00, + 0x5a, 0x5a, 0x08, 0x17, 0x00, 0x5a, 0x5e, 0x53, + 0xa7, 0x00, 0x5a, 0x62, 0x11, 0xe8, 0x00, 0x5a, + 0x63, 0x38, 0x7b, 0x00, 0x5a, 0x65, 0x44, 0x5b, + 0x00, 0x5a, 0x66, 0x0d, 0xca, 0x00, 0x5a, 0x67, + 0x41, 0xbd, 0x00, 0x5a, 0x6a, 0x11, 0xe9, 0x00, + 0x5a, 0x6c, 0x11, 0xe4, 0x00, 0x5a, 0x6d, 0x38, + 0x7c, 0x00, 0x5a, 0x77, 0x41, 0xbe, 0x00, 0x5a, + 0x7a, 0x44, 0x5c, 0x00, 0x5a, 0x7b, 0x53, 0xa8, + 0x00, 0x5a, 0x7e, 0x38, 0x7d, 0x00, 0x5a, 0x7f, + 0x0e, 0xc7, 0x00, 0x5a, 0x84, 0x41, 0xbf, 0x00, + 0x5a, 0x8b, 0x44, 0x5d, 0x00, 0x5a, 0x90, 0x53, + 0xa9, 0x00, 0x5a, 0x92, 0x0d, 0x14, 0x00, 0x5a, + 0x93, 0x53, 0xaa, 0x00, 0x5a, 0x96, 0x53, 0xab, + 0x00, 0x5a, 0x99, 0x53, 0xac, 0x00, 0x5a, 0x9a, + 0x11, 0xea, 0x00, 0x5a, 0x9b, 0x0d, 0xa4, 0x00, + 0x5a, 0x9c, 0x44, 0x5e, 0x00, 0x5a, 0x9e, 0x38, + 0x7e, 0x00, 0x5a, 0x9f, 0x44, 0x5f, 0x00, 0x5a, + 0xa0, 0x44, 0x60, 0x00, 0x5a, 0xa2, 0x44, 0x61, + 0x00, 0x5a, 0xa7, 0x38, 0x7f, 0x00, 0x5a, 0xac, + 0x38, 0x80, 0x00, 0x5a, 0xb1, 0x44, 0x62, 0x00, + 0x5a, 0xb2, 0x4b, 0x71, 0x00, 0x5a, 0xb3, 0x38, + 0x81, 0x00, 0x5a, 0xb5, 0x44, 0x63, 0x00, 0x5a, + 0xb8, 0x4b, 0x72, 0x00, 0x5a, 0xba, 0x44, 0x64, + 0x00, 0x5a, 0xbb, 0x53, 0xad, 0x00, 0x5a, 0xbc, + 0x11, 0xeb, 0x00, 0x5a, 0xbd, 0x11, 0xef, 0x00, + 0x5a, 0xbe, 0x11, 0xec, 0x00, 0x5a, 0xbf, 0x44, + 0x65, 0x00, 0x5a, 0xc1, 0x05, 0x47, 0x00, 0x5a, + 0xc2, 0x11, 0xee, 0x00, 0x5a, 0xc4, 0x41, 0xc0, + 0x00, 0x5a, 0xc6, 0x53, 0xae, 0x00, 0x5a, 0xc8, + 0x53, 0xaf, 0x00, 0x5a, 0xc9, 0x08, 0xe7, 0x00, + 0x5a, 0xcb, 0x11, 0xed, 0x00, 0x5a, 0xcc, 0x07, + 0x4f, 0x00, 0x5a, 0xcf, 0x53, 0xb0, 0x00, 0x5a, + 0xd0, 0x11, 0xfb, 0x00, 0x5a, 0xd6, 0x11, 0xf4, + 0x00, 0x5a, 0xd7, 0x11, 0xf1, 0x00, 0x5a, 0xda, + 0x44, 0x66, 0x00, 0x5a, 0xdc, 0x44, 0x67, 0x00, + 0x5a, 0xe0, 0x38, 0x82, 0x00, 0x5a, 0xe1, 0x0b, + 0xa2, 0x00, 0x5a, 0xe3, 0x11, 0xf0, 0x00, 0x5a, + 0xe5, 0x44, 0x68, 0x00, 0x5a, 0xe6, 0x11, 0xf2, + 0x00, 0x5a, 0xe9, 0x11, 0xf3, 0x00, 0x5a, 0xea, + 0x4b, 0x73, 0x00, 0x5a, 0xee, 0x44, 0x6a, 0x00, + 0x5a, 0xf0, 0x44, 0x69, 0x00, 0x5a, 0xf5, 0x44, + 0x6b, 0x00, 0x5a, 0xf6, 0x4b, 0x74, 0x00, 0x5a, + 0xfa, 0x11, 0xf5, 0x00, 0x5a, 0xfb, 0x11, 0xf6, + 0x00, 0x5a, 0xfd, 0x53, 0xb1, 0x00, 0x5b, 0x00, + 0x38, 0x83, 0x00, 0x5b, 0x01, 0x53, 0xb2, 0x00, + 0x5b, 0x08, 0x44, 0x6c, 0x00, 0x5b, 0x09, 0x06, + 0x2e, 0x00, 0x5b, 0x0b, 0x11, 0xf8, 0x00, 0x5b, + 0x0c, 0x11, 0xf7, 0x00, 0x5b, 0x16, 0x11, 0xf9, + 0x00, 0x5b, 0x17, 0x44, 0x6d, 0x00, 0x5b, 0x19, + 0x38, 0x84, 0x00, 0x5b, 0x1b, 0x4b, 0x75, 0x00, + 0x5b, 0x1d, 0x4b, 0x76, 0x00, 0x5b, 0x21, 0x4b, + 0x77, 0x00, 0x5b, 0x22, 0x09, 0xd6, 0x00, 0x5b, + 0x25, 0x38, 0x85, 0x00, 0x5b, 0x2a, 0x11, 0xfc, + 0x00, 0x5b, 0x2c, 0x0b, 0xf8, 0x00, 0x5b, 0x2d, + 0x38, 0x86, 0x00, 0x5b, 0x30, 0x04, 0xe7, 0x00, + 0x5b, 0x32, 0x11, 0xfa, 0x00, 0x5b, 0x34, 0x44, + 0x6e, 0x00, 0x5b, 0x36, 0x11, 0xfd, 0x00, 0x5b, + 0x38, 0x4b, 0x78, 0x00, 0x5b, 0x3e, 0x11, 0xfe, + 0x00, 0x5b, 0x40, 0x12, 0x01, 0x00, 0x5b, 0x41, + 0x38, 0x87, 0x00, 0x5b, 0x43, 0x11, 0xff, 0x00, + 0x5b, 0x45, 0x12, 0x00, 0x00, 0x5b, 0x4b, 0x53, + 0xb3, 0x00, 0x5b, 0x4c, 0x44, 0x6f, 0x00, 0x5b, + 0x50, 0x08, 0xa0, 0x00, 0x5b, 0x51, 0x12, 0x02, + 0x00, 0x5b, 0x52, 0x44, 0x70, 0x00, 0x5b, 0x54, + 0x07, 0xb8, 0x00, 0x5b, 0x55, 0x12, 0x03, 0x00, + 0x5b, 0x56, 0x20, 0xf0, 0x00, 0x5b, 0x57, 0x08, + 0xc8, 0x00, 0x5b, 0x58, 0x0b, 0x18, 0x00, 0x5b, + 0x5a, 0x12, 0x04, 0x00, 0x5b, 0x5b, 0x12, 0x05, + 0x00, 0x5b, 0x5c, 0x08, 0xa8, 0x00, 0x5b, 0x5d, + 0x07, 0xb9, 0x00, 0x5b, 0x5e, 0x53, 0xb4, 0x00, + 0x5b, 0x5f, 0x0e, 0xde, 0x00, 0x5b, 0x63, 0x06, + 0x42, 0x00, 0x5b, 0x64, 0x07, 0x7d, 0x00, 0x5b, + 0x65, 0x12, 0x06, 0x00, 0x5b, 0x66, 0x05, 0xb6, + 0x00, 0x5b, 0x68, 0x44, 0x71, 0x00, 0x5b, 0x69, + 0x12, 0x07, 0x00, 0x5b, 0x6b, 0x0b, 0x19, 0x00, + 0x5b, 0x6e, 0x53, 0xb5, 0x00, 0x5b, 0x6f, 0x44, + 0x72, 0x00, 0x5b, 0x70, 0x12, 0x08, 0x00, 0x5b, + 0x71, 0x12, 0x30, 0x00, 0x5b, 0x73, 0x12, 0x09, + 0x00, 0x5b, 0x75, 0x12, 0x0a, 0x00, 0x5b, 0x76, + 0x37, 0x28, 0x00, 0x5b, 0x78, 0x12, 0x0b, 0x00, + 0x5b, 0x7a, 0x12, 0x0d, 0x00, 0x5b, 0x7c, 0x38, + 0x88, 0x00, 0x5b, 0x7d, 0x41, 0xc2, 0x00, 0x5b, + 0x7e, 0x38, 0x89, 0x00, 0x5b, 0x7f, 0x38, 0x8a, + 0x00, 0x5b, 0x80, 0x12, 0x0e, 0x00, 0x5b, 0x81, + 0x44, 0x73, 0x00, 0x5b, 0x82, 0x36, 0x10, 0x00, + 0x5b, 0x83, 0x12, 0x0f, 0x00, 0x5b, 0x84, 0x44, + 0x74, 0x00, 0x5b, 0x85, 0x0b, 0x50, 0x00, 0x5b, + 0x86, 0x53, 0xb6, 0x00, 0x5b, 0x87, 0x04, 0xc9, + 0x00, 0x5b, 0x88, 0x09, 0x15, 0x00, 0x5b, 0x89, + 0x04, 0x86, 0x00, 0x5b, 0x8a, 0x38, 0x8b, 0x00, + 0x5b, 0x8b, 0x0a, 0xd9, 0x00, 0x5b, 0x8c, 0x05, + 0xec, 0x00, 0x5b, 0x8d, 0x08, 0xe1, 0x00, 0x5b, + 0x8e, 0x53, 0xb7, 0x00, 0x5b, 0x8f, 0x07, 0xba, + 0x00, 0x5b, 0x90, 0x53, 0xb8, 0x00, 0x5b, 0x91, + 0x53, 0xb9, 0x00, 0x5b, 0x93, 0x41, 0xc3, 0x00, + 0x5b, 0x94, 0x53, 0xba, 0x00, 0x5b, 0x95, 0x0c, + 0x60, 0x00, 0x5b, 0x96, 0x44, 0x76, 0x00, 0x5b, + 0x97, 0x09, 0x2b, 0x00, 0x5b, 0x98, 0x05, 0xed, + 0x00, 0x5b, 0x99, 0x0b, 0xa6, 0x00, 0x5b, 0x9a, + 0x0c, 0x06, 0x00, 0x5b, 0x9b, 0x04, 0x7c, 0x00, + 0x5b, 0x9c, 0x06, 0x53, 0x00, 0x5b, 0x9d, 0x0e, + 0x45, 0x00, 0x5b, 0x9f, 0x08, 0xee, 0x00, 0x5b, + 0xa2, 0x06, 0x6c, 0x00, 0x5b, 0xa3, 0x0a, 0x8f, + 0x00, 0x5b, 0xa4, 0x08, 0xe8, 0x00, 0x5b, 0xa5, + 0x0f, 0x12, 0x00, 0x5b, 0xa6, 0x12, 0x10, 0x00, + 0x5b, 0xa8, 0x53, 0xbb, 0x00, 0x5b, 0xa9, 0x53, + 0xbc, 0x00, 0x5b, 0xac, 0x44, 0x77, 0x00, 0x5b, + 0xad, 0x53, 0xbd, 0x00, 0x5b, 0xae, 0x06, 0x76, + 0x00, 0x5b, 0xaf, 0x53, 0xbe, 0x00, 0x5b, 0xb0, + 0x08, 0x3b, 0x00, 0x5b, 0xb1, 0x53, 0xbf, 0x00, + 0x5b, 0xb2, 0x53, 0xc0, 0x00, 0x5b, 0xb3, 0x05, + 0x90, 0x00, 0x5b, 0xb4, 0x05, 0x05, 0x00, 0x5b, + 0xb5, 0x09, 0x94, 0x00, 0x5b, 0xb6, 0x05, 0x48, + 0x00, 0x5b, 0xb7, 0x4b, 0x79, 0x00, 0x5b, 0xb8, + 0x12, 0x11, 0x00, 0x5b, 0xb9, 0x0f, 0x30, 0x00, + 0x5b, 0xba, 0x53, 0xc1, 0x00, 0x5b, 0xbc, 0x53, + 0xc2, 0x00, 0x5b, 0xbf, 0x09, 0x53, 0x00, 0x5b, + 0xc0, 0x20, 0xf1, 0x00, 0x5b, 0xc1, 0x53, 0xc3, + 0x00, 0x5b, 0xc2, 0x09, 0x10, 0x00, 0x5b, 0xc3, + 0x12, 0x12, 0x00, 0x5b, 0xc4, 0x06, 0x2f, 0x00, + 0x5b, 0xc5, 0x0c, 0xaa, 0x00, 0x5b, 0xc6, 0x0e, + 0xb5, 0x00, 0x5b, 0xc7, 0x12, 0x13, 0x00, 0x5b, + 0xc9, 0x12, 0x14, 0x00, 0x5b, 0xcc, 0x0d, 0xcb, + 0x00, 0x5b, 0xcd, 0x53, 0xc4, 0x00, 0x5b, 0xce, + 0x44, 0x7a, 0x00, 0x5b, 0xcf, 0x53, 0xc5, 0x00, + 0x5b, 0xd0, 0x12, 0x16, 0x00, 0x5b, 0xd2, 0x05, + 0xe4, 0x00, 0x5b, 0xd3, 0x06, 0xef, 0x00, 0x5b, + 0xd4, 0x12, 0x15, 0x00, 0x5b, 0xd6, 0x44, 0x7b, + 0x00, 0x5b, 0xd7, 0x4b, 0x7a, 0x00, 0x5b, 0xd8, + 0x20, 0xf3, 0x00, 0x5b, 0xd9, 0x53, 0xc6, 0x00, + 0x5b, 0xda, 0x53, 0xc7, 0x00, 0x5b, 0xdb, 0x05, + 0xee, 0x00, 0x5b, 0xdd, 0x09, 0xf8, 0x00, 0x5b, + 0xde, 0x12, 0x1a, 0x00, 0x5b, 0xdf, 0x08, 0x6f, + 0x00, 0x5b, 0xe0, 0x4b, 0x7b, 0x00, 0x5b, 0xe1, + 0x05, 0x49, 0x00, 0x5b, 0xe2, 0x12, 0x19, 0x00, + 0x5b, 0xe4, 0x12, 0x17, 0x00, 0x5b, 0xe5, 0x12, + 0x1b, 0x00, 0x5b, 0xe6, 0x12, 0x18, 0x00, 0x5b, + 0xe7, 0x36, 0x93, 0x00, 0x5b, 0xe8, 0x14, 0x8e, + 0x00, 0x5b, 0xe9, 0x09, 0xf9, 0x00, 0x5b, 0xeb, + 0x12, 0x1c, 0x00, 0x5b, 0xec, 0x4f, 0x4e, 0x00, + 0x5b, 0xee, 0x0f, 0x88, 0x00, 0x5b, 0xef, 0x53, + 0xc8, 0x00, 0x5b, 0xf0, 0x12, 0x1d, 0x00, 0x5b, + 0xf1, 0x44, 0x7e, 0x00, 0x5b, 0xf3, 0x12, 0x1f, + 0x00, 0x5b, 0xf4, 0x53, 0xc9, 0x00, 0x5b, 0xf5, + 0x0b, 0xbc, 0x00, 0x5b, 0xf6, 0x12, 0x1e, 0x00, + 0x5b, 0xf8, 0x0a, 0x47, 0x00, 0x5b, 0xfa, 0x08, + 0xc9, 0x00, 0x5b, 0xfd, 0x44, 0x7f, 0x00, 0x5b, + 0xfe, 0x0b, 0x30, 0x00, 0x5b, 0xff, 0x09, 0x23, + 0x00, 0x5c, 0x01, 0x0d, 0xe7, 0x00, 0x5c, 0x02, + 0x0a, 0x90, 0x00, 0x5c, 0x03, 0x44, 0x81, 0x00, + 0x5c, 0x04, 0x08, 0xf9, 0x00, 0x5c, 0x05, 0x12, + 0x20, 0x00, 0x5c, 0x06, 0x36, 0x08, 0x00, 0x5c, + 0x07, 0x12, 0x21, 0x00, 0x5c, 0x08, 0x12, 0x22, + 0x00, 0x5c, 0x09, 0x04, 0x97, 0x00, 0x5c, 0x0a, + 0x0b, 0x1a, 0x00, 0x5c, 0x0b, 0x0a, 0x18, 0x00, + 0x5c, 0x0c, 0x53, 0xca, 0x00, 0x5c, 0x0d, 0x12, + 0x23, 0x00, 0x5c, 0x0e, 0x0c, 0x8b, 0x00, 0x5c, + 0x0f, 0x09, 0x96, 0x00, 0x5c, 0x11, 0x09, 0x97, + 0x00, 0x5c, 0x12, 0x41, 0xc4, 0x00, 0x5c, 0x13, + 0x12, 0x24, 0x00, 0x5c, 0x14, 0x37, 0x2a, 0x00, + 0x5c, 0x16, 0x0a, 0x91, 0x00, 0x5c, 0x17, 0x53, + 0xcb, 0x00, 0x5c, 0x19, 0x36, 0x0b, 0x00, 0x5c, + 0x1a, 0x09, 0x98, 0x00, 0x5c, 0x1e, 0x20, 0xf5, + 0x00, 0x5c, 0x1f, 0x4b, 0x7c, 0x00, 0x5c, 0x20, + 0x12, 0x25, 0x00, 0x5c, 0x22, 0x12, 0x26, 0x00, + 0x5c, 0x23, 0x38, 0x8c, 0x00, 0x5c, 0x24, 0x0e, + 0xec, 0x00, 0x5c, 0x26, 0x53, 0xcc, 0x00, 0x5c, + 0x28, 0x12, 0x27, 0x00, 0x5c, 0x29, 0x44, 0x82, + 0x00, 0x5c, 0x2a, 0x4b, 0x7d, 0x00, 0x5c, 0x2b, + 0x38, 0x8d, 0x00, 0x5c, 0x2c, 0x4b, 0x7e, 0x00, + 0x5c, 0x2d, 0x06, 0xbe, 0x00, 0x5c, 0x2e, 0x53, + 0xcd, 0x00, 0x5c, 0x30, 0x38, 0x8e, 0x00, 0x5c, + 0x31, 0x09, 0x2c, 0x00, 0x5c, 0x32, 0x53, 0xce, + 0x00, 0x5c, 0x35, 0x53, 0xcf, 0x00, 0x5c, 0x36, + 0x4b, 0x7f, 0x00, 0x5c, 0x38, 0x12, 0x28, 0x00, + 0x5c, 0x39, 0x12, 0x29, 0x00, 0x5c, 0x3a, 0x09, + 0x08, 0x00, 0x5c, 0x3b, 0x09, 0xf2, 0x00, 0x5c, + 0x3c, 0x0c, 0xcc, 0x00, 0x5c, 0x3d, 0x0a, 0x1a, + 0x00, 0x5c, 0x3e, 0x0d, 0x8c, 0x00, 0x5c, 0x3f, + 0x0c, 0xd8, 0x00, 0x5c, 0x40, 0x06, 0xc1, 0x00, + 0x5c, 0x41, 0x12, 0x2a, 0x00, 0x5c, 0x45, 0x06, + 0x89, 0x00, 0x5c, 0x46, 0x12, 0x2b, 0x00, 0x5c, + 0x48, 0x06, 0xf6, 0x00, 0x5c, 0x4a, 0x0c, 0xa7, + 0x00, 0x5c, 0x4b, 0x05, 0x30, 0x00, 0x5c, 0x4d, + 0x08, 0xa1, 0x00, 0x5c, 0x4e, 0x12, 0x2c, 0x00, + 0x5c, 0x4f, 0x12, 0x2f, 0x00, 0x5c, 0x50, 0x12, + 0x2e, 0x00, 0x5c, 0x51, 0x06, 0xf5, 0x00, 0x5c, + 0x53, 0x12, 0x2d, 0x00, 0x5c, 0x55, 0x0c, 0x32, + 0x00, 0x5c, 0x59, 0x4b, 0x80, 0x00, 0x5c, 0x5a, + 0x53, 0xd0, 0x00, 0x5c, 0x5b, 0x1e, 0x92, 0x00, + 0x5c, 0x5c, 0x4b, 0x81, 0x00, 0x5c, 0x5e, 0x0b, + 0x10, 0x00, 0x5c, 0x5f, 0x44, 0x84, 0x00, 0x5c, + 0x60, 0x0c, 0x45, 0x00, 0x5c, 0x61, 0x08, 0xf4, + 0x00, 0x5c, 0x62, 0x1e, 0x0d, 0x00, 0x5c, 0x63, + 0x38, 0x8f, 0x00, 0x5c, 0x64, 0x0a, 0xda, 0x00, + 0x5c, 0x65, 0x0f, 0x64, 0x00, 0x5c, 0x67, 0x44, + 0x85, 0x00, 0x5c, 0x68, 0x44, 0x86, 0x00, 0x5c, + 0x69, 0x38, 0x90, 0x00, 0x5c, 0x6c, 0x12, 0x31, + 0x00, 0x5c, 0x6d, 0x4b, 0x82, 0x00, 0x5c, 0x6e, + 0x41, 0xc5, 0x00, 0x5c, 0x6f, 0x0c, 0xae, 0x00, + 0x5c, 0x70, 0x44, 0x87, 0x00, 0x5c, 0x71, 0x08, + 0x81, 0x00, 0x5c, 0x74, 0x53, 0xd1, 0x00, 0x5c, + 0x75, 0x53, 0xd2, 0x00, 0x5c, 0x76, 0x12, 0x34, + 0x00, 0x5c, 0x79, 0x12, 0x35, 0x00, 0x5c, 0x7a, + 0x41, 0xc7, 0x00, 0x5c, 0x7b, 0x53, 0xd3, 0x00, + 0x5c, 0x7c, 0x38, 0x91, 0x00, 0x5c, 0x7d, 0x53, + 0xd4, 0x00, 0x5c, 0x87, 0x53, 0xd5, 0x00, 0x5c, + 0x88, 0x44, 0x8c, 0x00, 0x5c, 0x8a, 0x44, 0x8d, + 0x00, 0x5c, 0x8c, 0x12, 0x36, 0x00, 0x5c, 0x8f, + 0x41, 0xc8, 0x00, 0x5c, 0x90, 0x06, 0x30, 0x00, + 0x5c, 0x91, 0x12, 0x37, 0x00, 0x5c, 0x92, 0x53, + 0xd6, 0x00, 0x5c, 0x94, 0x12, 0x38, 0x00, 0x5c, + 0x9d, 0x53, 0xd7, 0x00, 0x5c, 0x9f, 0x41, 0xc9, + 0x00, 0x5c, 0xa0, 0x44, 0x91, 0x00, 0x5c, 0xa1, + 0x05, 0x2c, 0x00, 0x5c, 0xa2, 0x44, 0x92, 0x00, + 0x5c, 0xa3, 0x41, 0xca, 0x00, 0x5c, 0xa6, 0x20, + 0xf6, 0x00, 0x5c, 0xa7, 0x44, 0x93, 0x00, 0x5c, + 0xa8, 0x0a, 0xbd, 0x00, 0x5c, 0xa9, 0x06, 0x20, + 0x00, 0x5c, 0xaa, 0x41, 0xcb, 0x00, 0x5c, 0xab, + 0x12, 0x3a, 0x00, 0x5c, 0xac, 0x0e, 0xb4, 0x00, + 0x5c, 0xad, 0x44, 0x95, 0x00, 0x5c, 0xb1, 0x0b, + 0x32, 0x00, 0x5c, 0xb2, 0x53, 0xd8, 0x00, 0x5c, + 0xb3, 0x05, 0xb7, 0x00, 0x5c, 0xb4, 0x53, 0xd9, + 0x00, 0x5c, 0xb5, 0x44, 0x96, 0x00, 0x5c, 0xb6, + 0x12, 0x3c, 0x00, 0x5c, 0xb7, 0x12, 0x3e, 0x00, + 0x5c, 0xb8, 0x06, 0x1b, 0x00, 0x5c, 0xba, 0x20, + 0xf7, 0x00, 0x5c, 0xbb, 0x12, 0x3b, 0x00, 0x5c, + 0xbc, 0x12, 0x3d, 0x00, 0x5c, 0xbe, 0x12, 0x40, + 0x00, 0x5c, 0xc5, 0x12, 0x3f, 0x00, 0x5c, 0xc7, + 0x12, 0x41, 0x00, 0x5c, 0xc9, 0x44, 0x98, 0x00, + 0x5c, 0xcb, 0x38, 0x92, 0x00, 0x5c, 0xd0, 0x41, + 0xcc, 0x00, 0x5c, 0xd2, 0x38, 0x93, 0x00, 0x5c, + 0xd7, 0x53, 0xda, 0x00, 0x5c, 0xd9, 0x12, 0x42, + 0x00, 0x5c, 0xdd, 0x4b, 0x83, 0x00, 0x5c, 0xe0, + 0x0c, 0x95, 0x00, 0x5c, 0xe1, 0x06, 0xa6, 0x00, + 0x5c, 0xe6, 0x37, 0x2c, 0x00, 0x5c, 0xe8, 0x05, + 0x65, 0x00, 0x5c, 0xe9, 0x12, 0x43, 0x00, 0x5c, + 0xea, 0x12, 0x48, 0x00, 0x5c, 0xed, 0x12, 0x46, + 0x00, 0x5c, 0xee, 0x53, 0xdb, 0x00, 0x5c, 0xef, + 0x0e, 0x47, 0x00, 0x5c, 0xf0, 0x0e, 0x46, 0x00, + 0x5c, 0xf1, 0x53, 0xdc, 0x00, 0x5c, 0xf2, 0x53, + 0xdd, 0x00, 0x5c, 0xf4, 0x38, 0x94, 0x00, 0x5c, + 0xf5, 0x20, 0xf8, 0x00, 0x5c, 0xf6, 0x0c, 0x61, + 0x00, 0x5c, 0xfa, 0x12, 0x45, 0x00, 0x5c, 0xfb, + 0x09, 0x5e, 0x00, 0x5c, 0xfd, 0x12, 0x44, 0x00, + 0x5d, 0x01, 0x4b, 0x84, 0x00, 0x5d, 0x06, 0x44, + 0x9b, 0x00, 0x5d, 0x07, 0x0a, 0x38, 0x00, 0x5d, + 0x0b, 0x12, 0x49, 0x00, 0x5d, 0x0d, 0x41, 0xce, + 0x00, 0x5d, 0x0e, 0x08, 0x5a, 0x00, 0x5d, 0x10, + 0x44, 0x9c, 0x00, 0x5d, 0x11, 0x12, 0x4f, 0x00, + 0x5d, 0x12, 0x53, 0xde, 0x00, 0x5d, 0x14, 0x12, + 0x50, 0x00, 0x5d, 0x15, 0x12, 0x4a, 0x00, 0x5d, + 0x16, 0x05, 0x91, 0x00, 0x5d, 0x17, 0x12, 0x4b, + 0x00, 0x5d, 0x18, 0x12, 0x54, 0x00, 0x5d, 0x19, + 0x12, 0x53, 0x00, 0x5d, 0x1a, 0x12, 0x52, 0x00, + 0x5d, 0x1b, 0x12, 0x4e, 0x00, 0x5d, 0x1d, 0x44, + 0x9e, 0x00, 0x5d, 0x1f, 0x12, 0x4d, 0x00, 0x5d, + 0x20, 0x44, 0x9f, 0x00, 0x5d, 0x22, 0x12, 0x51, + 0x00, 0x5d, 0x23, 0x53, 0xdf, 0x00, 0x5d, 0x24, + 0x38, 0x95, 0x00, 0x5d, 0x26, 0x38, 0x96, 0x00, + 0x5d, 0x27, 0x20, 0xf9, 0x00, 0x5d, 0x29, 0x0e, + 0x48, 0x00, 0x5d, 0x2b, 0x44, 0x9d, 0x00, 0x5d, + 0x31, 0x44, 0xa0, 0x00, 0x5d, 0x34, 0x4b, 0x85, + 0x00, 0x5d, 0x39, 0x44, 0xa1, 0x00, 0x5d, 0x3d, + 0x4b, 0x86, 0x00, 0x5d, 0x3f, 0x53, 0xe0, 0x00, + 0x5d, 0x42, 0x20, 0xfc, 0x00, 0x5d, 0x43, 0x38, + 0x97, 0x00, 0x5d, 0x46, 0x38, 0x98, 0x00, 0x5d, + 0x47, 0x41, 0xcf, 0x00, 0x5d, 0x48, 0x53, 0xe1, + 0x00, 0x5d, 0x4a, 0x38, 0x99, 0x00, 0x5d, 0x4b, + 0x12, 0x58, 0x00, 0x5d, 0x4c, 0x12, 0x55, 0x00, + 0x5d, 0x4e, 0x12, 0x57, 0x00, 0x5d, 0x50, 0x0f, + 0x5c, 0x00, 0x5d, 0x51, 0x53, 0xe3, 0x00, 0x5d, + 0x52, 0x12, 0x56, 0x00, 0x5d, 0x53, 0x20, 0xfa, + 0x00, 0x5d, 0x55, 0x53, 0xe2, 0x00, 0x5d, 0x59, + 0x4b, 0x87, 0x00, 0x5d, 0x5c, 0x12, 0x4c, 0x00, + 0x5d, 0x5f, 0x53, 0xe4, 0x00, 0x5d, 0x60, 0x53, + 0xe5, 0x00, 0x5d, 0x61, 0x44, 0xa3, 0x00, 0x5d, + 0x62, 0x53, 0xe6, 0x00, 0x5d, 0x64, 0x53, 0xe7, + 0x00, 0x5d, 0x69, 0x0a, 0x39, 0x00, 0x5d, 0x6a, + 0x44, 0xa4, 0x00, 0x5d, 0x6c, 0x12, 0x59, 0x00, + 0x5d, 0x6d, 0x20, 0xfd, 0x00, 0x5d, 0x6f, 0x08, + 0x27, 0x00, 0x5d, 0x70, 0x44, 0xa6, 0x00, 0x5d, + 0x73, 0x12, 0x5a, 0x00, 0x5d, 0x76, 0x12, 0x5b, + 0x00, 0x5d, 0x79, 0x53, 0xe8, 0x00, 0x5d, 0x7a, + 0x53, 0xe9, 0x00, 0x5d, 0x7e, 0x4b, 0x88, 0x00, + 0x5d, 0x7f, 0x53, 0xea, 0x00, 0x5d, 0x81, 0x41, + 0xd0, 0x00, 0x5d, 0x82, 0x12, 0x5e, 0x00, 0x5d, + 0x83, 0x4b, 0x89, 0x00, 0x5d, 0x84, 0x12, 0x5d, + 0x00, 0x5d, 0x87, 0x12, 0x5c, 0x00, 0x5d, 0x88, + 0x44, 0xa9, 0x00, 0x5d, 0x8a, 0x53, 0xeb, 0x00, + 0x5d, 0x8b, 0x0c, 0x62, 0x00, 0x5d, 0x8c, 0x12, + 0x47, 0x00, 0x5d, 0x90, 0x12, 0x64, 0x00, 0x5d, + 0x92, 0x38, 0x9a, 0x00, 0x5d, 0x93, 0x53, 0xec, + 0x00, 0x5d, 0x94, 0x38, 0x9b, 0x00, 0x5d, 0x95, + 0x53, 0xed, 0x00, 0x5d, 0x97, 0x44, 0xab, 0x00, + 0x5d, 0x99, 0x38, 0x9c, 0x00, 0x5d, 0x9b, 0x53, + 0xee, 0x00, 0x5d, 0x9d, 0x12, 0x60, 0x00, 0x5d, + 0x9f, 0x53, 0xef, 0x00, 0x5d, 0xa0, 0x38, 0x9d, + 0x00, 0x5d, 0xa2, 0x12, 0x5f, 0x00, 0x5d, 0xa4, + 0x41, 0xd1, 0x00, 0x5d, 0xa7, 0x41, 0xd2, 0x00, + 0x5d, 0xab, 0x53, 0xf0, 0x00, 0x5d, 0xac, 0x12, + 0x61, 0x00, 0x5d, 0xae, 0x12, 0x62, 0x00, 0x5d, + 0xb0, 0x44, 0xac, 0x00, 0x5d, 0xb2, 0x3b, 0xa5, + 0x00, 0x5d, 0xb4, 0x44, 0xad, 0x00, 0x5d, 0xb7, + 0x12, 0x65, 0x00, 0x5d, 0xb8, 0x20, 0xfe, 0x00, + 0x5d, 0xb9, 0x20, 0xff, 0x00, 0x5d, 0xba, 0x0f, + 0xae, 0x00, 0x5d, 0xbc, 0x12, 0x66, 0x00, 0x5d, + 0xbd, 0x12, 0x63, 0x00, 0x5d, 0xc3, 0x53, 0xf1, + 0x00, 0x5d, 0xc7, 0x4b, 0x8a, 0x00, 0x5d, 0xc9, + 0x12, 0x67, 0x00, 0x5d, 0xcb, 0x41, 0xd3, 0x00, + 0x5d, 0xcc, 0x06, 0x1c, 0x00, 0x5d, 0xcd, 0x12, + 0x68, 0x00, 0x5d, 0xce, 0x53, 0xf2, 0x00, 0x5d, + 0xd0, 0x21, 0x00, 0x00, 0x5d, 0xd1, 0x44, 0xaf, + 0x00, 0x5d, 0xd2, 0x12, 0x6a, 0x00, 0x5d, 0xd3, + 0x12, 0x69, 0x00, 0x5d, 0xd6, 0x12, 0x6b, 0x00, + 0x5d, 0xd7, 0x44, 0xb0, 0x00, 0x5d, 0xd8, 0x38, + 0x9e, 0x00, 0x5d, 0xd9, 0x53, 0xf3, 0x00, 0x5d, + 0xdb, 0x12, 0x6c, 0x00, 0x5d, 0xdd, 0x0a, 0x92, + 0x00, 0x5d, 0xde, 0x09, 0x2d, 0x00, 0x5d, 0xe0, + 0x38, 0x9f, 0x00, 0x5d, 0xe1, 0x09, 0x6e, 0x00, + 0x5d, 0xe2, 0x34, 0x32, 0x00, 0x5d, 0xe3, 0x0a, + 0xe5, 0x00, 0x5d, 0xe4, 0x44, 0xb2, 0x00, 0x5d, + 0xe5, 0x07, 0xbb, 0x00, 0x5d, 0xe6, 0x08, 0x28, + 0x00, 0x5d, 0xe7, 0x07, 0xbc, 0x00, 0x5d, 0xe8, + 0x06, 0x8a, 0x00, 0x5d, 0xe9, 0x44, 0xb3, 0x00, + 0x5d, 0xeb, 0x12, 0x6d, 0x00, 0x5d, 0xee, 0x08, + 0x29, 0x00, 0x5d, 0xf1, 0x07, 0x7e, 0x00, 0x5d, + 0xf2, 0x12, 0x6e, 0x00, 0x5d, 0xf3, 0x0e, 0xb2, + 0x00, 0x5d, 0xf4, 0x0c, 0xf9, 0x00, 0x5d, 0xf5, + 0x12, 0x6f, 0x00, 0x5d, 0xf7, 0x07, 0xbd, 0x00, + 0x5d, 0xf8, 0x38, 0xa0, 0x00, 0x5d, 0xf9, 0x4b, + 0x8b, 0x00, 0x5d, 0xfb, 0x05, 0xe8, 0x00, 0x5d, + 0xfd, 0x1e, 0x36, 0x00, 0x5d, 0xfe, 0x06, 0xca, + 0x00, 0x5d, 0xff, 0x35, 0xe2, 0x00, 0x5e, 0x00, + 0x38, 0xa1, 0x00, 0x5e, 0x02, 0x08, 0xa2, 0x00, + 0x5e, 0x03, 0x0d, 0xcd, 0x00, 0x5e, 0x06, 0x0d, + 0x55, 0x00, 0x5e, 0x07, 0x53, 0xf4, 0x00, 0x5e, + 0x0b, 0x12, 0x70, 0x00, 0x5e, 0x0c, 0x06, 0x31, + 0x00, 0x5e, 0x0d, 0x53, 0xf5, 0x00, 0x5e, 0x11, + 0x12, 0x73, 0x00, 0x5e, 0x12, 0x38, 0xa2, 0x00, + 0x5e, 0x14, 0x38, 0xa3, 0x00, 0x5e, 0x15, 0x38, + 0xa4, 0x00, 0x5e, 0x16, 0x0b, 0xbd, 0x00, 0x5e, + 0x18, 0x38, 0xa5, 0x00, 0x5e, 0x19, 0x12, 0x72, + 0x00, 0x5e, 0x1a, 0x12, 0x71, 0x00, 0x5e, 0x1b, + 0x12, 0x74, 0x00, 0x5e, 0x1d, 0x0c, 0x07, 0x00, + 0x5e, 0x1f, 0x44, 0xb7, 0x00, 0x5e, 0x20, 0x53, + 0xf6, 0x00, 0x5e, 0x25, 0x0a, 0x29, 0x00, 0x5e, + 0x28, 0x4b, 0x8c, 0x00, 0x5e, 0x2b, 0x08, 0xa3, + 0x00, 0x5e, 0x2d, 0x0a, 0x6e, 0x00, 0x5e, 0x2e, + 0x38, 0xa6, 0x00, 0x5e, 0x2f, 0x0b, 0x33, 0x00, + 0x5e, 0x30, 0x06, 0x3c, 0x00, 0x5e, 0x32, 0x4b, + 0x8d, 0x00, 0x5e, 0x33, 0x0b, 0xbe, 0x00, 0x5e, + 0x35, 0x4b, 0x8e, 0x00, 0x5e, 0x36, 0x12, 0x75, + 0x00, 0x5e, 0x37, 0x12, 0x76, 0x00, 0x5e, 0x38, + 0x09, 0xd7, 0x00, 0x5e, 0x3d, 0x0e, 0x67, 0x00, + 0x5e, 0x3e, 0x44, 0xb8, 0x00, 0x5e, 0x40, 0x12, + 0x79, 0x00, 0x5e, 0x43, 0x12, 0x78, 0x00, 0x5e, + 0x44, 0x12, 0x77, 0x00, 0x5e, 0x45, 0x0d, 0xef, + 0x00, 0x5e, 0x47, 0x12, 0x80, 0x00, 0x5e, 0x49, + 0x44, 0xb9, 0x00, 0x5e, 0x4b, 0x53, 0xf7, 0x00, + 0x5e, 0x4c, 0x0e, 0x88, 0x00, 0x5e, 0x4e, 0x12, + 0x7a, 0x00, 0x5e, 0x50, 0x53, 0xf8, 0x00, 0x5e, + 0x51, 0x53, 0xf9, 0x00, 0x5e, 0x54, 0x12, 0x7c, + 0x00, 0x5e, 0x55, 0x0e, 0x99, 0x00, 0x5e, 0x56, + 0x44, 0xbb, 0x00, 0x5e, 0x57, 0x12, 0x7b, 0x00, + 0x5e, 0x58, 0x38, 0xa7, 0x00, 0x5e, 0x5b, 0x4b, + 0x8f, 0x00, 0x5e, 0x5c, 0x53, 0xfa, 0x00, 0x5e, + 0x5e, 0x41, 0xd4, 0x00, 0x5e, 0x5f, 0x12, 0x7d, + 0x00, 0x5e, 0x61, 0x0d, 0x3c, 0x00, 0x5e, 0x62, + 0x12, 0x7e, 0x00, 0x5e, 0x63, 0x0e, 0x0e, 0x00, + 0x5e, 0x64, 0x12, 0x7f, 0x00, 0x5e, 0x68, 0x4b, + 0x90, 0x00, 0x5e, 0x6a, 0x4b, 0x91, 0x00, 0x5e, + 0x6b, 0x38, 0xa8, 0x00, 0x5e, 0x6c, 0x38, 0xa9, + 0x00, 0x5e, 0x6d, 0x44, 0xbd, 0x00, 0x5e, 0x6e, + 0x44, 0xbe, 0x00, 0x5e, 0x70, 0x53, 0xfb, 0x00, + 0x5e, 0x72, 0x05, 0xef, 0x00, 0x5e, 0x73, 0x0e, + 0x0f, 0x00, 0x5e, 0x74, 0x0c, 0xe5, 0x00, 0x5e, + 0x75, 0x12, 0x81, 0x00, 0x5e, 0x76, 0x12, 0x82, + 0x00, 0x5e, 0x77, 0x4b, 0x92, 0x00, 0x5e, 0x78, + 0x07, 0xbe, 0x00, 0x5e, 0x79, 0x05, 0xf0, 0x00, + 0x5e, 0x7a, 0x12, 0x83, 0x00, 0x5e, 0x7b, 0x07, + 0x6c, 0x00, 0x5e, 0x7c, 0x0f, 0x2e, 0x00, 0x5e, + 0x7d, 0x0f, 0x13, 0x00, 0x5e, 0x7e, 0x06, 0x32, + 0x00, 0x5e, 0x7f, 0x12, 0x85, 0x00, 0x5e, 0x80, + 0x4b, 0x93, 0x00, 0x5e, 0x81, 0x0b, 0xbf, 0x00, + 0x5e, 0x83, 0x07, 0xbf, 0x00, 0x5e, 0x84, 0x09, + 0x99, 0x00, 0x5e, 0x87, 0x0d, 0x73, 0x00, 0x5e, + 0x8a, 0x09, 0x9a, 0x00, 0x5e, 0x8b, 0x4b, 0x94, + 0x00, 0x5e, 0x8e, 0x53, 0xfc, 0x00, 0x5e, 0x8f, + 0x09, 0x82, 0x00, 0x5e, 0x95, 0x0c, 0x08, 0x00, + 0x5e, 0x96, 0x0e, 0x49, 0x00, 0x5e, 0x97, 0x0c, + 0x33, 0x00, 0x5e, 0x99, 0x36, 0xb0, 0x00, 0x5e, + 0x9a, 0x07, 0xc0, 0x00, 0x5e, 0x9c, 0x0d, 0xce, + 0x00, 0x5e, 0xa0, 0x12, 0x86, 0x00, 0x5e, 0xa2, + 0x53, 0xfd, 0x00, 0x5e, 0xa4, 0x53, 0xfe, 0x00, + 0x5e, 0xa5, 0x44, 0xc0, 0x00, 0x5e, 0xa6, 0x0c, + 0x53, 0x00, 0x5e, 0xa7, 0x08, 0x32, 0x00, 0x5e, + 0xa8, 0x38, 0xaa, 0x00, 0x5e, 0xaa, 0x38, 0xab, + 0x00, 0x5e, 0xab, 0x07, 0x7f, 0x00, 0x5e, 0xac, + 0x44, 0xc1, 0x00, 0x5e, 0xad, 0x0c, 0x09, 0x00, + 0x5e, 0xb1, 0x53, 0xff, 0x00, 0x5e, 0xb3, 0x4b, + 0x95, 0x00, 0x5e, 0xb5, 0x04, 0x87, 0x00, 0x5e, + 0xb6, 0x09, 0x78, 0x00, 0x5e, 0xb7, 0x07, 0xc1, + 0x00, 0x5e, 0xb8, 0x0f, 0x31, 0x00, 0x5e, 0xb9, + 0x44, 0xc2, 0x00, 0x5e, 0xbd, 0x4b, 0x96, 0x00, + 0x5e, 0xbe, 0x38, 0xac, 0x00, 0x5e, 0xbf, 0x38, + 0xad, 0x00, 0x5e, 0xc1, 0x12, 0x87, 0x00, 0x5e, + 0xc2, 0x12, 0x88, 0x00, 0x5e, 0xc3, 0x0d, 0x07, + 0x00, 0x5e, 0xc6, 0x44, 0xc3, 0x00, 0x5e, 0xc8, + 0x12, 0x89, 0x00, 0x5e, 0xc9, 0x37, 0x0f, 0x00, + 0x5e, 0xca, 0x0f, 0xd3, 0x00, 0x5e, 0xcb, 0x3c, + 0x1e, 0x00, 0x5e, 0xcc, 0x54, 0x00, 0x00, 0x5e, + 0xce, 0x54, 0x01, 0x00, 0x5e, 0xcf, 0x12, 0x8b, + 0x00, 0x5e, 0xd0, 0x12, 0x8a, 0x00, 0x5e, 0xd1, + 0x4b, 0x97, 0x00, 0x5e, 0xd2, 0x38, 0xaf, 0x00, + 0x5e, 0xd3, 0x05, 0xa5, 0x00, 0x5e, 0xd4, 0x4b, + 0x98, 0x00, 0x5e, 0xd5, 0x4b, 0x99, 0x00, 0x5e, + 0xd6, 0x12, 0x8c, 0x00, 0x5e, 0xd9, 0x44, 0xc4, + 0x00, 0x5e, 0xda, 0x12, 0x8f, 0x00, 0x5e, 0xdb, + 0x12, 0x90, 0x00, 0x5e, 0xdc, 0x54, 0x02, 0x00, + 0x5e, 0xdd, 0x12, 0x8e, 0x00, 0x5e, 0xde, 0x54, + 0x03, 0x00, 0x5e, 0xdf, 0x0d, 0xb2, 0x00, 0x5e, + 0xe0, 0x09, 0x9b, 0x00, 0x5e, 0xe1, 0x12, 0x92, + 0x00, 0x5e, 0xe2, 0x12, 0x91, 0x00, 0x5e, 0xe3, + 0x12, 0x8d, 0x00, 0x5e, 0xe5, 0x54, 0x04, 0x00, + 0x5e, 0xe8, 0x12, 0x93, 0x00, 0x5e, 0xe9, 0x12, + 0x94, 0x00, 0x5e, 0xeb, 0x54, 0x05, 0x00, 0x5e, + 0xec, 0x12, 0x95, 0x00, 0x5e, 0xf0, 0x12, 0x98, + 0x00, 0x5e, 0xf1, 0x12, 0x96, 0x00, 0x5e, 0xf3, + 0x12, 0x97, 0x00, 0x5e, 0xf4, 0x12, 0x99, 0x00, + 0x5e, 0xf6, 0x05, 0x06, 0x00, 0x5e, 0xf7, 0x0c, + 0x0a, 0x00, 0x5e, 0xf8, 0x12, 0x9a, 0x00, 0x5e, + 0xf9, 0x41, 0xd5, 0x00, 0x5e, 0xfa, 0x07, 0x50, + 0x00, 0x5e, 0xfb, 0x05, 0x76, 0x00, 0x5e, 0xfc, + 0x0c, 0xec, 0x00, 0x5e, 0xfd, 0x44, 0xc6, 0x00, + 0x5e, 0xfe, 0x12, 0x9b, 0x00, 0x5e, 0xff, 0x0c, + 0xd3, 0x00, 0x5f, 0x00, 0x41, 0xd6, 0x00, 0x5f, + 0x01, 0x0e, 0x2b, 0x00, 0x5f, 0x02, 0x41, 0xd7, + 0x00, 0x5f, 0x03, 0x12, 0x9c, 0x00, 0x5f, 0x04, + 0x0f, 0xd4, 0x00, 0x5f, 0x06, 0x54, 0x06, 0x00, + 0x5f, 0x07, 0x38, 0xb0, 0x00, 0x5f, 0x08, 0x44, + 0xc7, 0x00, 0x5f, 0x09, 0x12, 0x9d, 0x00, 0x5f, + 0x0a, 0x0e, 0x10, 0x00, 0x5f, 0x0b, 0x12, 0xa0, + 0x00, 0x5f, 0x0c, 0x0f, 0xfa, 0x00, 0x5f, 0x0d, + 0x10, 0x0a, 0x00, 0x5f, 0x0e, 0x38, 0xb1, 0x00, + 0x5f, 0x0f, 0x08, 0xdc, 0x00, 0x5f, 0x10, 0x0c, + 0xcd, 0x00, 0x5f, 0x11, 0x12, 0xa1, 0x00, 0x5f, + 0x13, 0x06, 0x77, 0x00, 0x5f, 0x14, 0x0b, 0xc0, + 0x00, 0x5f, 0x15, 0x04, 0xbe, 0x00, 0x5f, 0x16, + 0x12, 0xa2, 0x00, 0x5f, 0x17, 0x0d, 0xf6, 0x00, + 0x5f, 0x18, 0x07, 0xc2, 0x00, 0x5f, 0x19, 0x54, + 0x07, 0x00, 0x5f, 0x1b, 0x0b, 0x8e, 0x00, 0x5f, + 0x1c, 0x38, 0xb2, 0x00, 0x5f, 0x1d, 0x38, 0xb3, + 0x00, 0x5f, 0x1e, 0x44, 0xc9, 0x00, 0x5f, 0x1f, + 0x0c, 0x0b, 0x00, 0x5f, 0x21, 0x21, 0x01, 0x00, + 0x5f, 0x22, 0x38, 0xb4, 0x00, 0x5f, 0x23, 0x41, + 0xd8, 0x00, 0x5f, 0x24, 0x54, 0x08, 0x00, 0x5f, + 0x25, 0x0e, 0xfb, 0x00, 0x5f, 0x26, 0x07, 0x6d, + 0x00, 0x5f, 0x27, 0x07, 0x80, 0x00, 0x5f, 0x28, + 0x38, 0xb5, 0x00, 0x5f, 0x29, 0x12, 0xa3, 0x00, + 0x5f, 0x2b, 0x54, 0x09, 0x00, 0x5f, 0x2c, 0x54, + 0x0a, 0x00, 0x5f, 0x2d, 0x12, 0xa4, 0x00, 0x5f, + 0x2e, 0x54, 0x0b, 0x00, 0x5f, 0x2f, 0x12, 0xaa, + 0x00, 0x5f, 0x30, 0x54, 0x0c, 0x00, 0x5f, 0x31, + 0x09, 0x11, 0x00, 0x5f, 0x34, 0x21, 0x02, 0x00, + 0x5f, 0x35, 0x0b, 0xc1, 0x00, 0x5f, 0x36, 0x38, + 0xb6, 0x00, 0x5f, 0x37, 0x06, 0xa7, 0x00, 0x5f, + 0x38, 0x12, 0xa5, 0x00, 0x5f, 0x3a, 0x35, 0x98, + 0x00, 0x5f, 0x3b, 0x38, 0xb7, 0x00, 0x5f, 0x3c, + 0x0d, 0x9d, 0x00, 0x5f, 0x3d, 0x41, 0xd9, 0x00, + 0x5f, 0x3e, 0x0b, 0x84, 0x00, 0x5f, 0x3f, 0x54, + 0x0d, 0x00, 0x5f, 0x40, 0x38, 0xb8, 0x00, 0x5f, + 0x41, 0x12, 0xa6, 0x00, 0x5f, 0x44, 0x54, 0x0e, + 0x00, 0x5f, 0x45, 0x20, 0xb2, 0x00, 0x5f, 0x47, + 0x44, 0xca, 0x00, 0x5f, 0x48, 0x12, 0xa7, 0x00, + 0x5f, 0x4a, 0x06, 0xa8, 0x00, 0x5f, 0x4c, 0x12, + 0xa8, 0x00, 0x5f, 0x4d, 0x4b, 0x9a, 0x00, 0x5f, + 0x4e, 0x12, 0xa9, 0x00, 0x5f, 0x50, 0x38, 0xb9, + 0x00, 0x5f, 0x51, 0x12, 0xab, 0x00, 0x5f, 0x53, + 0x0c, 0x70, 0x00, 0x5f, 0x54, 0x41, 0xda, 0x00, + 0x5f, 0x56, 0x12, 0xac, 0x00, 0x5f, 0x57, 0x12, + 0xad, 0x00, 0x5f, 0x58, 0x38, 0xba, 0x00, 0x5f, + 0x59, 0x12, 0xae, 0x00, 0x5f, 0x5b, 0x54, 0x0f, + 0x00, 0x5f, 0x5c, 0x12, 0x9f, 0x00, 0x5f, 0x5d, + 0x12, 0x9e, 0x00, 0x5f, 0x60, 0x54, 0x10, 0x00, + 0x5f, 0x61, 0x12, 0xaf, 0x00, 0x5f, 0x62, 0x07, + 0x17, 0x00, 0x5f, 0x63, 0x44, 0xcb, 0x00, 0x5f, + 0x64, 0x38, 0xbb, 0x00, 0x5f, 0x65, 0x36, 0xac, + 0x00, 0x5f, 0x66, 0x0d, 0x99, 0x00, 0x5f, 0x67, + 0x21, 0x03, 0x00, 0x5f, 0x69, 0x08, 0x3c, 0x00, + 0x5f, 0x6a, 0x0d, 0xa9, 0x00, 0x5f, 0x6b, 0x0b, + 0xc2, 0x00, 0x5f, 0x6c, 0x0d, 0xbd, 0x00, 0x5f, + 0x6d, 0x12, 0xb0, 0x00, 0x5f, 0x6f, 0x54, 0x11, + 0x00, 0x5f, 0x70, 0x09, 0x9c, 0x00, 0x5f, 0x71, + 0x04, 0xe8, 0x00, 0x5f, 0x72, 0x44, 0xcc, 0x00, + 0x5f, 0x73, 0x12, 0xb1, 0x00, 0x5f, 0x74, 0x54, + 0x12, 0x00, 0x5f, 0x75, 0x54, 0x13, 0x00, 0x5f, + 0x77, 0x12, 0xb2, 0x00, 0x5f, 0x78, 0x54, 0x14, + 0x00, 0x5f, 0x79, 0x0e, 0xfe, 0x00, 0x5f, 0x7a, + 0x54, 0x15, 0x00, 0x5f, 0x7c, 0x0d, 0x74, 0x00, + 0x5f, 0x7d, 0x41, 0xdb, 0x00, 0x5f, 0x7e, 0x44, + 0xcd, 0x00, 0x5f, 0x7f, 0x12, 0xb5, 0x00, 0x5f, + 0x80, 0x05, 0x1f, 0x00, 0x5f, 0x81, 0x0a, 0x50, + 0x00, 0x5f, 0x82, 0x12, 0xb4, 0x00, 0x5f, 0x83, + 0x12, 0xb3, 0x00, 0x5f, 0x84, 0x07, 0x18, 0x00, + 0x5f, 0x85, 0x0b, 0x34, 0x00, 0x5f, 0x87, 0x12, + 0xb9, 0x00, 0x5f, 0x88, 0x12, 0xb7, 0x00, 0x5f, + 0x89, 0x38, 0xbc, 0x00, 0x5f, 0x8a, 0x12, 0xb6, + 0x00, 0x5f, 0x8b, 0x0f, 0x6f, 0x00, 0x5f, 0x8c, + 0x07, 0x99, 0x00, 0x5f, 0x8d, 0x54, 0x16, 0x00, + 0x5f, 0x8f, 0x44, 0xce, 0x00, 0x5f, 0x90, 0x09, + 0x83, 0x00, 0x5f, 0x91, 0x12, 0xb8, 0x00, 0x5f, + 0x92, 0x0c, 0x46, 0x00, 0x5f, 0x93, 0x09, 0x48, + 0x00, 0x5f, 0x96, 0x54, 0x17, 0x00, 0x5f, 0x97, + 0x0c, 0x98, 0x00, 0x5f, 0x98, 0x12, 0xbc, 0x00, + 0x5f, 0x99, 0x12, 0xbb, 0x00, 0x5f, 0x9c, 0x38, + 0xbd, 0x00, 0x5f, 0x9d, 0x54, 0x18, 0x00, 0x5f, + 0x9e, 0x12, 0xba, 0x00, 0x5f, 0xa0, 0x12, 0xbd, + 0x00, 0x5f, 0xa1, 0x07, 0x9a, 0x00, 0x5f, 0xa2, + 0x44, 0xcf, 0x00, 0x5f, 0xa4, 0x38, 0xbf, 0x00, + 0x5f, 0xa7, 0x38, 0xbe, 0x00, 0x5f, 0xa8, 0x12, + 0xbe, 0x00, 0x5f, 0xa9, 0x0d, 0xee, 0x00, 0x5f, + 0xaa, 0x09, 0x65, 0x00, 0x5f, 0xab, 0x54, 0x19, + 0x00, 0x5f, 0xac, 0x4b, 0x9b, 0x00, 0x5f, 0xad, + 0x12, 0xbf, 0x00, 0x5f, 0xae, 0x0d, 0x8d, 0x00, + 0x5f, 0xaf, 0x38, 0xc0, 0x00, 0x5f, 0xb0, 0x54, + 0x1a, 0x00, 0x5f, 0xb1, 0x54, 0x1b, 0x00, 0x5f, + 0xb3, 0x0c, 0x99, 0x00, 0x5f, 0xb4, 0x0b, 0xc3, + 0x00, 0x5f, 0xb5, 0x34, 0x38, 0x00, 0x5f, 0xb7, + 0x21, 0x04, 0x00, 0x5f, 0xb8, 0x38, 0xc1, 0x00, + 0x5f, 0xb9, 0x0c, 0x2a, 0x00, 0x5f, 0xbc, 0x12, + 0xc0, 0x00, 0x5f, 0xbd, 0x06, 0x45, 0x00, 0x5f, + 0xc3, 0x09, 0xfa, 0x00, 0x5f, 0xc4, 0x38, 0xc2, + 0x00, 0x5f, 0xc5, 0x0d, 0x9e, 0x00, 0x5f, 0xc7, + 0x44, 0xd0, 0x00, 0x5f, 0xc8, 0x54, 0x1c, 0x00, + 0x5f, 0xc9, 0x38, 0xc3, 0x00, 0x5f, 0xcb, 0x44, + 0xd1, 0x00, 0x5f, 0xcc, 0x06, 0x33, 0x00, 0x5f, + 0xcd, 0x0c, 0xdc, 0x00, 0x5f, 0xd0, 0x54, 0x1d, + 0x00, 0x5f, 0xd1, 0x54, 0x1e, 0x00, 0x5f, 0xd2, + 0x44, 0xd2, 0x00, 0x5f, 0xd3, 0x44, 0xd3, 0x00, + 0x5f, 0xd4, 0x44, 0xd4, 0x00, 0x5f, 0xd6, 0x12, + 0xc1, 0x00, 0x5f, 0xd7, 0x08, 0xa4, 0x00, 0x5f, + 0xd8, 0x0e, 0x68, 0x00, 0x5f, 0xd9, 0x0e, 0x69, + 0x00, 0x5f, 0xdc, 0x05, 0x20, 0x00, 0x5f, 0xdd, + 0x12, 0xc6, 0x00, 0x5f, 0xde, 0x21, 0x05, 0x00, + 0x5f, 0xe0, 0x0b, 0xa7, 0x00, 0x5f, 0xe1, 0x38, + 0xc4, 0x00, 0x5f, 0xe2, 0x44, 0xd5, 0x00, 0x5f, + 0xe4, 0x12, 0xc3, 0x00, 0x5f, 0xe8, 0x54, 0x1f, + 0x00, 0x5f, 0xe9, 0x38, 0xc5, 0x00, 0x5f, 0xea, + 0x4b, 0x9c, 0x00, 0x5f, 0xeb, 0x05, 0x77, 0x00, + 0x5f, 0xec, 0x54, 0x20, 0x00, 0x5f, 0xed, 0x38, + 0xc6, 0x00, 0x5f, 0xee, 0x44, 0xd6, 0x00, 0x5f, + 0xef, 0x44, 0xd7, 0x00, 0x5f, 0xf0, 0x12, 0xf6, + 0x00, 0x5f, 0xf1, 0x12, 0xc5, 0x00, 0x5f, 0xf2, + 0x54, 0x21, 0x00, 0x5f, 0xf3, 0x44, 0xd8, 0x00, + 0x5f, 0xf5, 0x0c, 0xe6, 0x00, 0x5f, 0xf6, 0x54, + 0x22, 0x00, 0x5f, 0xf8, 0x12, 0xc4, 0x00, 0x5f, + 0xfa, 0x54, 0x23, 0x00, 0x5f, 0xfb, 0x12, 0xc2, + 0x00, 0x5f, 0xfc, 0x38, 0xc7, 0x00, 0x5f, 0xfd, + 0x08, 0x0c, 0x00, 0x5f, 0xff, 0x12, 0xc8, 0x00, + 0x60, 0x07, 0x4b, 0x9d, 0x00, 0x60, 0x0a, 0x54, + 0x24, 0x00, 0x60, 0x0d, 0x41, 0xdc, 0x00, 0x60, + 0x0e, 0x12, 0xce, 0x00, 0x60, 0x0f, 0x12, 0xd4, + 0x00, 0x60, 0x10, 0x12, 0xcc, 0x00, 0x60, 0x12, + 0x0c, 0x56, 0x00, 0x60, 0x13, 0x54, 0x25, 0x00, + 0x60, 0x14, 0x41, 0xdd, 0x00, 0x60, 0x15, 0x12, + 0xd1, 0x00, 0x60, 0x16, 0x0d, 0xcf, 0x00, 0x60, + 0x17, 0x38, 0xc8, 0x00, 0x60, 0x18, 0x41, 0xde, + 0x00, 0x60, 0x19, 0x12, 0xcb, 0x00, 0x60, 0x1a, + 0x38, 0xc9, 0x00, 0x60, 0x1b, 0x12, 0xd0, 0x00, + 0x60, 0x1c, 0x0f, 0xaf, 0x00, 0x60, 0x1d, 0x08, + 0xa5, 0x00, 0x60, 0x1f, 0x54, 0x26, 0x00, 0x60, + 0x20, 0x0b, 0x35, 0x00, 0x60, 0x21, 0x12, 0xc9, + 0x00, 0x60, 0x22, 0x44, 0xda, 0x00, 0x60, 0x24, + 0x44, 0xdb, 0x00, 0x60, 0x25, 0x06, 0x78, 0x00, + 0x60, 0x26, 0x12, 0xd3, 0x00, 0x60, 0x27, 0x0a, + 0x51, 0x00, 0x60, 0x28, 0x05, 0x07, 0x00, 0x60, + 0x29, 0x12, 0xcd, 0x00, 0x60, 0x2a, 0x05, 0x78, + 0x00, 0x60, 0x2b, 0x12, 0xd2, 0x00, 0x60, 0x2d, + 0x54, 0x27, 0x00, 0x60, 0x2f, 0x06, 0xa9, 0x00, + 0x60, 0x31, 0x12, 0xcf, 0x00, 0x60, 0x33, 0x38, + 0xca, 0x00, 0x60, 0x35, 0x41, 0xdf, 0x00, 0x60, + 0x3a, 0x12, 0xd5, 0x00, 0x60, 0x40, 0x54, 0x28, + 0x00, 0x60, 0x41, 0x12, 0xd7, 0x00, 0x60, 0x42, + 0x12, 0xe1, 0x00, 0x60, 0x43, 0x12, 0xdf, 0x00, + 0x60, 0x46, 0x12, 0xdc, 0x00, 0x60, 0x47, 0x41, + 0xe0, 0x00, 0x60, 0x48, 0x54, 0x29, 0x00, 0x60, + 0x49, 0x4b, 0x9e, 0x00, 0x60, 0x4a, 0x12, 0xdb, + 0x00, 0x60, 0x4b, 0x0f, 0xc0, 0x00, 0x60, 0x4c, + 0x44, 0xdd, 0x00, 0x60, 0x4d, 0x12, 0xdd, 0x00, + 0x60, 0x50, 0x06, 0xaa, 0x00, 0x60, 0x51, 0x54, + 0x2a, 0x00, 0x60, 0x52, 0x07, 0xc3, 0x00, 0x60, + 0x54, 0x4b, 0x9f, 0x00, 0x60, 0x55, 0x09, 0x84, + 0x00, 0x60, 0x56, 0x54, 0x2b, 0x00, 0x60, 0x57, + 0x54, 0x2c, 0x00, 0x60, 0x59, 0x12, 0xe4, 0x00, + 0x60, 0x5a, 0x12, 0xd6, 0x00, 0x60, 0x5d, 0x21, + 0x06, 0x00, 0x60, 0x5f, 0x12, 0xda, 0x00, 0x60, + 0x60, 0x12, 0xca, 0x00, 0x60, 0x61, 0x38, 0xcb, + 0x00, 0x60, 0x62, 0x05, 0x7a, 0x00, 0x60, 0x63, + 0x12, 0xde, 0x00, 0x60, 0x64, 0x12, 0xe0, 0x00, + 0x60, 0x65, 0x0b, 0x8f, 0x00, 0x60, 0x67, 0x4b, + 0xa0, 0x00, 0x60, 0x68, 0x08, 0x18, 0x00, 0x60, + 0x69, 0x05, 0x38, 0x00, 0x60, 0x6a, 0x12, 0xd8, + 0x00, 0x60, 0x6b, 0x12, 0xe3, 0x00, 0x60, 0x6c, + 0x12, 0xe2, 0x00, 0x60, 0x6d, 0x06, 0xab, 0x00, + 0x60, 0x6f, 0x0b, 0x09, 0x00, 0x60, 0x70, 0x05, + 0xc4, 0x00, 0x60, 0x71, 0x54, 0x2d, 0x00, 0x60, + 0x75, 0x07, 0x19, 0x00, 0x60, 0x77, 0x12, 0xd9, + 0x00, 0x60, 0x7e, 0x54, 0x2e, 0x00, 0x60, 0x7f, + 0x38, 0xcc, 0x00, 0x60, 0x81, 0x12, 0xe5, 0x00, + 0x60, 0x82, 0x54, 0x2f, 0x00, 0x60, 0x83, 0x12, + 0xe8, 0x00, 0x60, 0x84, 0x12, 0xea, 0x00, 0x60, + 0x85, 0x21, 0x07, 0x00, 0x60, 0x86, 0x54, 0x30, + 0x00, 0x60, 0x88, 0x54, 0x31, 0x00, 0x60, 0x89, + 0x08, 0xe9, 0x00, 0x60, 0x8a, 0x21, 0x08, 0x00, + 0x60, 0x8b, 0x12, 0xf0, 0x00, 0x60, 0x8c, 0x0c, + 0x0c, 0x00, 0x60, 0x8d, 0x12, 0xe6, 0x00, 0x60, + 0x8e, 0x54, 0x32, 0x00, 0x60, 0x91, 0x54, 0x33, + 0x00, 0x60, 0x92, 0x12, 0xee, 0x00, 0x60, 0x93, + 0x54, 0x34, 0x00, 0x60, 0x94, 0x34, 0x0e, 0x00, + 0x60, 0x95, 0x44, 0xde, 0x00, 0x60, 0x96, 0x12, + 0xec, 0x00, 0x60, 0x97, 0x12, 0xed, 0x00, 0x60, + 0x98, 0x54, 0x35, 0x00, 0x60, 0x9a, 0x12, 0xe9, + 0x00, 0x60, 0x9b, 0x12, 0xeb, 0x00, 0x60, 0x9d, + 0x41, 0xe1, 0x00, 0x60, 0x9e, 0x38, 0xcd, 0x00, + 0x60, 0x9f, 0x07, 0x9b, 0x00, 0x60, 0xa0, 0x0f, + 0x14, 0x00, 0x60, 0xa2, 0x54, 0x37, 0x00, 0x60, + 0xa3, 0x05, 0xf1, 0x00, 0x60, 0xa4, 0x38, 0xce, + 0x00, 0x60, 0xa5, 0x54, 0x38, 0x00, 0x60, 0xa6, + 0x04, 0xfb, 0x00, 0x60, 0xa7, 0x12, 0xef, 0x00, + 0x60, 0xa8, 0x44, 0xdf, 0x00, 0x60, 0xa9, 0x0c, + 0xf0, 0x00, 0x60, 0xaa, 0x04, 0x71, 0x00, 0x60, + 0xb0, 0x38, 0xcf, 0x00, 0x60, 0xb1, 0x44, 0xe1, + 0x00, 0x60, 0xb2, 0x0d, 0x75, 0x00, 0x60, 0xb3, + 0x12, 0xc7, 0x00, 0x60, 0xb4, 0x12, 0xf5, 0x00, + 0x60, 0xb5, 0x12, 0xf9, 0x00, 0x60, 0xb6, 0x0e, + 0xf1, 0x00, 0x60, 0xb7, 0x54, 0x39, 0x00, 0x60, + 0xb8, 0x12, 0xf2, 0x00, 0x60, 0xbb, 0x4b, 0xa1, + 0x00, 0x60, 0xbc, 0x0c, 0x63, 0x00, 0x60, 0xbd, + 0x12, 0xf7, 0x00, 0x60, 0xbe, 0x44, 0xe2, 0x00, + 0x60, 0xc2, 0x54, 0x3a, 0x00, 0x60, 0xc4, 0x4b, + 0xa2, 0x00, 0x60, 0xc5, 0x09, 0xd8, 0x00, 0x60, + 0xc6, 0x12, 0xf8, 0x00, 0x60, 0xc7, 0x0c, 0xaf, + 0x00, 0x60, 0xc8, 0x44, 0xe3, 0x00, 0x60, 0xc9, + 0x54, 0x3b, 0x00, 0x60, 0xca, 0x54, 0x3c, 0x00, + 0x60, 0xcb, 0x38, 0xd0, 0x00, 0x60, 0xce, 0x54, + 0x3d, 0x00, 0x60, 0xcf, 0x54, 0x3e, 0x00, 0x60, + 0xd1, 0x0f, 0xed, 0x00, 0x60, 0xd3, 0x12, 0xf4, + 0x00, 0x60, 0xd4, 0x41, 0xe2, 0x00, 0x60, 0xd5, + 0x21, 0x0a, 0x00, 0x60, 0xd8, 0x12, 0xfa, 0x00, + 0x60, 0xd9, 0x44, 0xe4, 0x00, 0x60, 0xda, 0x08, + 0x0d, 0x00, 0x60, 0xdb, 0x38, 0xd1, 0x00, 0x60, + 0xdc, 0x0a, 0x6f, 0x00, 0x60, 0xdd, 0x41, 0xe3, + 0x00, 0x60, 0xde, 0x21, 0x09, 0x00, 0x60, 0xdf, + 0x04, 0x98, 0x00, 0x60, 0xe0, 0x12, 0xf3, 0x00, + 0x60, 0xe1, 0x12, 0xf1, 0x00, 0x60, 0xe2, 0x54, + 0x3f, 0x00, 0x60, 0xe3, 0x0a, 0xdc, 0x00, 0x60, + 0xe5, 0x54, 0x40, 0x00, 0x60, 0xe7, 0x12, 0xe7, + 0x00, 0x60, 0xe8, 0x08, 0x82, 0x00, 0x60, 0xee, + 0x44, 0xe5, 0x00, 0x60, 0xf0, 0x0b, 0x26, 0x00, + 0x60, 0xf1, 0x13, 0x06, 0x00, 0x60, 0xf2, 0x21, + 0x0c, 0x00, 0x60, 0xf3, 0x0a, 0xdd, 0x00, 0x60, + 0xf4, 0x13, 0x01, 0x00, 0x60, 0xf5, 0x44, 0xe6, + 0x00, 0x60, 0xf6, 0x12, 0xfe, 0x00, 0x60, 0xf7, + 0x12, 0xff, 0x00, 0x60, 0xf8, 0x38, 0xd2, 0x00, + 0x60, 0xf9, 0x09, 0x12, 0x00, 0x60, 0xfa, 0x13, + 0x02, 0x00, 0x60, 0xfb, 0x13, 0x05, 0x00, 0x60, + 0xfc, 0x54, 0x41, 0x00, 0x60, 0xfd, 0x4b, 0xa3, + 0x00, 0x61, 0x00, 0x13, 0x00, 0x00, 0x61, 0x01, + 0x09, 0x2f, 0x00, 0x61, 0x02, 0x54, 0x42, 0x00, + 0x61, 0x03, 0x13, 0x03, 0x00, 0x61, 0x06, 0x12, + 0xfd, 0x00, 0x61, 0x07, 0x54, 0x43, 0x00, 0x61, + 0x08, 0x0f, 0x08, 0x00, 0x61, 0x09, 0x0f, 0x07, + 0x00, 0x61, 0x0a, 0x4b, 0xa4, 0x00, 0x61, 0x0c, + 0x54, 0x44, 0x00, 0x61, 0x0d, 0x13, 0x07, 0x00, + 0x61, 0x0e, 0x13, 0x08, 0x00, 0x61, 0x0f, 0x04, + 0x99, 0x00, 0x61, 0x10, 0x44, 0xe7, 0x00, 0x61, + 0x11, 0x21, 0x0d, 0x00, 0x61, 0x12, 0x38, 0xd3, + 0x00, 0x61, 0x13, 0x38, 0xd4, 0x00, 0x61, 0x14, + 0x38, 0xd5, 0x00, 0x61, 0x15, 0x12, 0xfc, 0x00, + 0x61, 0x16, 0x4b, 0xa5, 0x00, 0x61, 0x17, 0x54, + 0x45, 0x00, 0x61, 0x19, 0x44, 0xe8, 0x00, 0x61, + 0x1a, 0x06, 0xea, 0x00, 0x61, 0x1b, 0x04, 0x6a, + 0x00, 0x61, 0x1c, 0x38, 0xd6, 0x00, 0x61, 0x1e, + 0x44, 0xe9, 0x00, 0x61, 0x1f, 0x05, 0xf2, 0x00, + 0x61, 0x20, 0x21, 0x0b, 0x00, 0x61, 0x21, 0x13, + 0x04, 0x00, 0x61, 0x22, 0x54, 0x46, 0x00, 0x61, + 0x27, 0x13, 0x0c, 0x00, 0x61, 0x28, 0x13, 0x0b, + 0x00, 0x61, 0x2a, 0x4b, 0xa6, 0x00, 0x61, 0x2b, + 0x41, 0xe4, 0x00, 0x61, 0x2c, 0x13, 0x10, 0x00, + 0x61, 0x30, 0x21, 0x0f, 0x00, 0x61, 0x31, 0x54, + 0x47, 0x00, 0x61, 0x34, 0x13, 0x11, 0x00, 0x61, + 0x35, 0x54, 0x48, 0x00, 0x61, 0x36, 0x4b, 0xa7, + 0x00, 0x61, 0x37, 0x21, 0x0e, 0x00, 0x61, 0x39, + 0x54, 0x49, 0x00, 0x61, 0x3a, 0x44, 0xea, 0x00, + 0x61, 0x3c, 0x13, 0x0f, 0x00, 0x61, 0x3d, 0x13, + 0x12, 0x00, 0x61, 0x3e, 0x13, 0x0a, 0x00, 0x61, + 0x3f, 0x13, 0x0e, 0x00, 0x61, 0x41, 0x44, 0xec, + 0x00, 0x61, 0x42, 0x13, 0x13, 0x00, 0x61, 0x44, + 0x13, 0x14, 0x00, 0x61, 0x45, 0x54, 0x4a, 0x00, + 0x61, 0x46, 0x44, 0xed, 0x00, 0x61, 0x47, 0x13, + 0x09, 0x00, 0x61, 0x48, 0x08, 0xca, 0x00, 0x61, + 0x49, 0x54, 0x4b, 0x00, 0x61, 0x4a, 0x13, 0x0d, + 0x00, 0x61, 0x4b, 0x0b, 0x36, 0x00, 0x61, 0x4c, + 0x07, 0xc4, 0x00, 0x61, 0x4d, 0x12, 0xfb, 0x00, + 0x61, 0x4e, 0x09, 0xfb, 0x00, 0x61, 0x53, 0x13, + 0x21, 0x00, 0x61, 0x55, 0x0e, 0x39, 0x00, 0x61, + 0x58, 0x13, 0x17, 0x00, 0x61, 0x59, 0x13, 0x18, + 0x00, 0x61, 0x5a, 0x13, 0x19, 0x00, 0x61, 0x5d, + 0x13, 0x20, 0x00, 0x61, 0x5e, 0x4b, 0xa8, 0x00, + 0x61, 0x5f, 0x13, 0x1f, 0x00, 0x61, 0x60, 0x44, + 0xee, 0x00, 0x61, 0x62, 0x0e, 0xab, 0x00, 0x61, + 0x63, 0x05, 0xf3, 0x00, 0x61, 0x64, 0x4b, 0xa9, + 0x00, 0x61, 0x65, 0x13, 0x1d, 0x00, 0x61, 0x67, + 0x07, 0x1b, 0x00, 0x61, 0x68, 0x05, 0x92, 0x00, + 0x61, 0x6b, 0x13, 0x1a, 0x00, 0x61, 0x6c, 0x54, + 0x4c, 0x00, 0x61, 0x6e, 0x0f, 0x80, 0x00, 0x61, + 0x6f, 0x13, 0x1c, 0x00, 0x61, 0x70, 0x04, 0x9a, + 0x00, 0x61, 0x71, 0x13, 0x1e, 0x00, 0x61, 0x72, + 0x54, 0x4d, 0x00, 0x61, 0x73, 0x13, 0x15, 0x00, + 0x61, 0x74, 0x13, 0x1b, 0x00, 0x61, 0x75, 0x13, + 0x22, 0x00, 0x61, 0x76, 0x07, 0x1a, 0x00, 0x61, + 0x77, 0x13, 0x16, 0x00, 0x61, 0x78, 0x54, 0x4e, + 0x00, 0x61, 0x7b, 0x4b, 0xaa, 0x00, 0x61, 0x7c, + 0x38, 0xd7, 0x00, 0x61, 0x7d, 0x4b, 0xab, 0x00, + 0x61, 0x7e, 0x0f, 0x47, 0x00, 0x61, 0x7f, 0x4b, + 0xac, 0x00, 0x61, 0x80, 0x54, 0x4f, 0x00, 0x61, + 0x81, 0x54, 0x50, 0x00, 0x61, 0x82, 0x0f, 0x15, + 0x00, 0x61, 0x83, 0x54, 0x51, 0x00, 0x61, 0x84, + 0x54, 0x52, 0x00, 0x61, 0x87, 0x13, 0x25, 0x00, + 0x61, 0x8a, 0x13, 0x29, 0x00, 0x61, 0x8b, 0x54, + 0x53, 0x00, 0x61, 0x8d, 0x38, 0xd8, 0x00, 0x61, + 0x8e, 0x34, 0x33, 0x00, 0x61, 0x90, 0x0f, 0xc1, + 0x00, 0x61, 0x91, 0x13, 0x2a, 0x00, 0x61, 0x92, + 0x44, 0xf0, 0x00, 0x61, 0x93, 0x44, 0xf1, 0x00, + 0x61, 0x94, 0x13, 0x27, 0x00, 0x61, 0x96, 0x13, + 0x24, 0x00, 0x61, 0x97, 0x44, 0xf2, 0x00, 0x61, + 0x98, 0x21, 0x10, 0x00, 0x61, 0x99, 0x13, 0x23, + 0x00, 0x61, 0x9a, 0x13, 0x28, 0x00, 0x61, 0x9c, + 0x54, 0x54, 0x00, 0x61, 0x9d, 0x4b, 0xad, 0x00, + 0x61, 0x9f, 0x38, 0xd9, 0x00, 0x61, 0xa0, 0x54, + 0x55, 0x00, 0x61, 0xa4, 0x0e, 0x00, 0x00, 0x61, + 0xa5, 0x44, 0xf3, 0x00, 0x61, 0xa7, 0x0c, 0x8c, + 0x00, 0x61, 0xa8, 0x38, 0xda, 0x00, 0x61, 0xa9, + 0x07, 0x1c, 0x00, 0x61, 0xaa, 0x54, 0x56, 0x00, + 0x61, 0xab, 0x13, 0x2b, 0x00, 0x61, 0xac, 0x13, + 0x26, 0x00, 0x61, 0xad, 0x44, 0xf4, 0x00, 0x61, + 0xae, 0x13, 0x2c, 0x00, 0x61, 0xb2, 0x07, 0x51, + 0x00, 0x61, 0xb6, 0x05, 0x31, 0x00, 0x61, 0xb8, + 0x4b, 0xae, 0x00, 0x61, 0xb9, 0x41, 0xe6, 0x00, + 0x61, 0xba, 0x13, 0x34, 0x00, 0x61, 0xbc, 0x41, + 0xe5, 0x00, 0x61, 0xbe, 0x05, 0xf4, 0x00, 0x61, + 0xc0, 0x54, 0x57, 0x00, 0x61, 0xc1, 0x54, 0x58, + 0x00, 0x61, 0xc2, 0x38, 0xdb, 0x00, 0x61, 0xc3, + 0x13, 0x32, 0x00, 0x61, 0xc6, 0x13, 0x33, 0x00, + 0x61, 0xc7, 0x08, 0x19, 0x00, 0x61, 0xc8, 0x13, + 0x31, 0x00, 0x61, 0xc9, 0x13, 0x2f, 0x00, 0x61, + 0xca, 0x13, 0x2e, 0x00, 0x61, 0xcb, 0x13, 0x35, + 0x00, 0x61, 0xcc, 0x13, 0x2d, 0x00, 0x61, 0xcd, + 0x13, 0x37, 0x00, 0x61, 0xce, 0x54, 0x59, 0x00, + 0x61, 0xcf, 0x54, 0x5a, 0x00, 0x61, 0xd0, 0x05, + 0x7b, 0x00, 0x61, 0xd5, 0x44, 0xf6, 0x00, 0x61, + 0xdc, 0x4b, 0xaf, 0x00, 0x61, 0xdd, 0x44, 0xf7, + 0x00, 0x61, 0xde, 0x54, 0x5b, 0x00, 0x61, 0xdf, + 0x38, 0xdc, 0x00, 0x61, 0xe1, 0x54, 0x5c, 0x00, + 0x61, 0xe2, 0x4b, 0xb0, 0x00, 0x61, 0xe3, 0x13, + 0x39, 0x00, 0x61, 0xe5, 0x4b, 0xb1, 0x00, 0x61, + 0xe6, 0x13, 0x38, 0x00, 0x61, 0xe7, 0x54, 0x5d, + 0x00, 0x61, 0xe8, 0x4b, 0xb2, 0x00, 0x61, 0xe9, + 0x54, 0x5e, 0x00, 0x61, 0xec, 0x54, 0x5f, 0x00, + 0x61, 0xed, 0x54, 0x60, 0x00, 0x61, 0xef, 0x54, + 0x61, 0x00, 0x61, 0xf2, 0x0b, 0xc4, 0x00, 0x61, + 0xf4, 0x13, 0x3c, 0x00, 0x61, 0xf5, 0x44, 0xf8, + 0x00, 0x61, 0xf6, 0x13, 0x3a, 0x00, 0x61, 0xf7, + 0x13, 0x30, 0x00, 0x61, 0xf8, 0x07, 0x52, 0x00, + 0x61, 0xfa, 0x13, 0x3b, 0x00, 0x61, 0xfc, 0x13, + 0x3f, 0x00, 0x61, 0xfd, 0x13, 0x3e, 0x00, 0x61, + 0xfe, 0x13, 0x40, 0x00, 0x61, 0xff, 0x13, 0x3d, + 0x00, 0x62, 0x00, 0x13, 0x41, 0x00, 0x62, 0x01, + 0x54, 0x62, 0x00, 0x62, 0x03, 0x54, 0x63, 0x00, + 0x62, 0x04, 0x4b, 0xb3, 0x00, 0x62, 0x07, 0x4b, + 0xb4, 0x00, 0x62, 0x08, 0x13, 0x42, 0x00, 0x62, + 0x09, 0x13, 0x43, 0x00, 0x62, 0x0a, 0x0e, 0x3a, + 0x00, 0x62, 0x0c, 0x13, 0x45, 0x00, 0x62, 0x0d, + 0x13, 0x44, 0x00, 0x62, 0x0e, 0x09, 0x49, 0x00, + 0x62, 0x10, 0x0a, 0x52, 0x00, 0x62, 0x11, 0x05, + 0x66, 0x00, 0x62, 0x12, 0x05, 0x7c, 0x00, 0x62, + 0x13, 0x21, 0x11, 0x00, 0x62, 0x14, 0x13, 0x46, + 0x00, 0x62, 0x15, 0x38, 0xdd, 0x00, 0x62, 0x16, + 0x04, 0x83, 0x00, 0x62, 0x1a, 0x0a, 0x70, 0x00, + 0x62, 0x1b, 0x13, 0x47, 0x00, 0x62, 0x1c, 0x54, + 0x64, 0x00, 0x62, 0x1d, 0x1a, 0x64, 0x00, 0x62, + 0x1e, 0x13, 0x48, 0x00, 0x62, 0x1f, 0x07, 0x37, + 0x00, 0x62, 0x20, 0x54, 0x65, 0x00, 0x62, 0x21, + 0x13, 0x49, 0x00, 0x62, 0x22, 0x41, 0xe7, 0x00, + 0x62, 0x23, 0x44, 0xfa, 0x00, 0x62, 0x26, 0x0a, + 0x93, 0x00, 0x62, 0x27, 0x54, 0x66, 0x00, 0x62, + 0x29, 0x38, 0xde, 0x00, 0x62, 0x2a, 0x13, 0x4a, + 0x00, 0x62, 0x2b, 0x54, 0x67, 0x00, 0x62, 0x2e, + 0x13, 0x4b, 0x00, 0x62, 0x2f, 0x06, 0x54, 0x00, + 0x62, 0x30, 0x13, 0x4c, 0x00, 0x62, 0x31, 0x4b, + 0xb5, 0x00, 0x62, 0x32, 0x13, 0x4d, 0x00, 0x62, + 0x33, 0x13, 0x4e, 0x00, 0x62, 0x34, 0x0b, 0x37, + 0x00, 0x62, 0x36, 0x35, 0xbd, 0x00, 0x62, 0x38, + 0x07, 0x81, 0x00, 0x62, 0x39, 0x4b, 0xb6, 0x00, + 0x62, 0x3b, 0x0e, 0xed, 0x00, 0x62, 0x3d, 0x4b, + 0xb7, 0x00, 0x62, 0x3e, 0x34, 0x4e, 0x00, 0x62, + 0x3f, 0x0e, 0x6a, 0x00, 0x62, 0x40, 0x09, 0x74, + 0x00, 0x62, 0x41, 0x13, 0x4f, 0x00, 0x62, 0x42, + 0x54, 0x68, 0x00, 0x62, 0x43, 0x38, 0xdf, 0x00, + 0x62, 0x44, 0x54, 0x69, 0x00, 0x62, 0x46, 0x38, + 0xe0, 0x00, 0x62, 0x47, 0x0a, 0x94, 0x00, 0x62, + 0x48, 0x1b, 0x1a, 0x00, 0x62, 0x49, 0x0d, 0x76, + 0x00, 0x62, 0x4b, 0x09, 0x16, 0x00, 0x62, 0x4c, + 0x38, 0xe1, 0x00, 0x62, 0x4d, 0x08, 0x3d, 0x00, + 0x62, 0x4e, 0x13, 0x50, 0x00, 0x62, 0x50, 0x54, + 0x6a, 0x00, 0x62, 0x51, 0x38, 0xe2, 0x00, 0x62, + 0x52, 0x44, 0xfb, 0x00, 0x62, 0x53, 0x0b, 0x27, + 0x00, 0x62, 0x54, 0x54, 0x6b, 0x00, 0x62, 0x55, + 0x0d, 0xf7, 0x00, 0x62, 0x56, 0x38, 0xe3, 0x00, + 0x62, 0x58, 0x0b, 0x51, 0x00, 0x62, 0x5a, 0x41, + 0xe8, 0x00, 0x62, 0x5b, 0x13, 0x53, 0x00, 0x62, + 0x5c, 0x54, 0x6c, 0x00, 0x62, 0x5e, 0x13, 0x51, + 0x00, 0x62, 0x60, 0x13, 0x54, 0x00, 0x62, 0x61, + 0x44, 0xfc, 0x00, 0x62, 0x63, 0x13, 0x52, 0x00, + 0x62, 0x64, 0x44, 0xfd, 0x00, 0x62, 0x68, 0x13, + 0x55, 0x00, 0x62, 0x6d, 0x44, 0xff, 0x00, 0x62, + 0x6e, 0x0e, 0x01, 0x00, 0x62, 0x6f, 0x41, 0xe9, + 0x00, 0x62, 0x71, 0x04, 0x7b, 0x00, 0x62, 0x73, + 0x45, 0x00, 0x00, 0x62, 0x76, 0x0d, 0xd0, 0x00, + 0x62, 0x79, 0x0d, 0x77, 0x00, 0x62, 0x7a, 0x4b, + 0xb8, 0x00, 0x62, 0x7b, 0x44, 0xfe, 0x00, 0x62, + 0x7c, 0x13, 0x56, 0x00, 0x62, 0x7d, 0x54, 0x6d, + 0x00, 0x62, 0x7e, 0x13, 0x59, 0x00, 0x62, 0x7f, + 0x09, 0x9d, 0x00, 0x62, 0x80, 0x06, 0x55, 0x00, + 0x62, 0x82, 0x13, 0x57, 0x00, 0x62, 0x83, 0x13, + 0x5e, 0x00, 0x62, 0x84, 0x09, 0x9e, 0x00, 0x62, + 0x85, 0x35, 0xc5, 0x00, 0x62, 0x89, 0x13, 0x58, + 0x00, 0x62, 0x8a, 0x0c, 0xfa, 0x00, 0x62, 0x8d, + 0x54, 0x6e, 0x00, 0x62, 0x8e, 0x54, 0x6f, 0x00, + 0x62, 0x8f, 0x54, 0x70, 0x00, 0x62, 0x90, 0x4b, + 0xb9, 0x00, 0x62, 0x91, 0x0f, 0x48, 0x00, 0x62, + 0x92, 0x13, 0x5a, 0x00, 0x62, 0x93, 0x13, 0x5b, + 0x00, 0x62, 0x94, 0x13, 0x5f, 0x00, 0x62, 0x95, + 0x0c, 0x64, 0x00, 0x62, 0x96, 0x13, 0x5c, 0x00, + 0x62, 0x97, 0x07, 0xc5, 0x00, 0x62, 0x98, 0x0a, + 0x82, 0x00, 0x62, 0x99, 0x45, 0x01, 0x00, 0x62, + 0x9b, 0x13, 0x6d, 0x00, 0x62, 0x9c, 0x0d, 0x48, + 0x00, 0x62, 0x9e, 0x0b, 0x52, 0x00, 0x62, 0xa6, + 0x21, 0x12, 0x00, 0x62, 0xa8, 0x4b, 0xba, 0x00, + 0x62, 0xab, 0x0d, 0x78, 0x00, 0x62, 0xac, 0x13, + 0xb2, 0x00, 0x62, 0xb1, 0x0e, 0x4a, 0x00, 0x62, + 0xb3, 0x54, 0x71, 0x00, 0x62, 0xb5, 0x0c, 0x0d, + 0x00, 0x62, 0xb6, 0x54, 0x72, 0x00, 0x62, 0xb7, + 0x54, 0x73, 0x00, 0x62, 0xb9, 0x0e, 0xa3, 0x00, + 0x62, 0xba, 0x54, 0x74, 0x00, 0x62, 0xbb, 0x13, + 0x62, 0x00, 0x62, 0xbc, 0x05, 0x21, 0x00, 0x62, + 0xbd, 0x0b, 0xa8, 0x00, 0x62, 0xbe, 0x54, 0x75, + 0x00, 0x62, 0xbf, 0x54, 0x76, 0x00, 0x62, 0xc2, + 0x13, 0x6b, 0x00, 0x62, 0xc4, 0x38, 0xe4, 0x00, + 0x62, 0xc5, 0x0b, 0x72, 0x00, 0x62, 0xc6, 0x13, + 0x65, 0x00, 0x62, 0xc7, 0x13, 0x6c, 0x00, 0x62, + 0xc8, 0x13, 0x67, 0x00, 0x62, 0xc9, 0x13, 0x6e, + 0x00, 0x62, 0xca, 0x13, 0x6a, 0x00, 0x62, 0xcc, + 0x13, 0x69, 0x00, 0x62, 0xcd, 0x0d, 0x25, 0x00, + 0x62, 0xce, 0x54, 0x77, 0x00, 0x62, 0xcf, 0x13, + 0x63, 0x00, 0x62, 0xd0, 0x05, 0x7d, 0x00, 0x62, + 0xd1, 0x13, 0x61, 0x00, 0x62, 0xd2, 0x06, 0x8b, + 0x00, 0x62, 0xd3, 0x0b, 0x53, 0x00, 0x62, 0xd4, + 0x37, 0x31, 0x00, 0x62, 0xd5, 0x45, 0x02, 0x00, + 0x62, 0xd6, 0x41, 0xea, 0x00, 0x62, 0xd7, 0x13, + 0x60, 0x00, 0x62, 0xd8, 0x07, 0xc6, 0x00, 0x62, + 0xd9, 0x0a, 0x7f, 0x00, 0x62, 0xda, 0x4b, 0xbb, + 0x00, 0x62, 0xdb, 0x09, 0x9f, 0x00, 0x62, 0xdc, + 0x13, 0x68, 0x00, 0x62, 0xdd, 0x0d, 0x08, 0x00, + 0x62, 0xe0, 0x06, 0x8c, 0x00, 0x62, 0xe1, 0x05, + 0xa6, 0x00, 0x62, 0xea, 0x54, 0x78, 0x00, 0x62, + 0xec, 0x05, 0xc5, 0x00, 0x62, 0xed, 0x09, 0xe7, + 0x00, 0x62, 0xee, 0x13, 0x70, 0x00, 0x62, 0xef, + 0x13, 0x75, 0x00, 0x62, 0xf1, 0x13, 0x71, 0x00, + 0x62, 0xf2, 0x54, 0x79, 0x00, 0x62, 0xf3, 0x07, + 0x53, 0x00, 0x62, 0xf4, 0x4b, 0xbc, 0x00, 0x62, + 0xf5, 0x13, 0x76, 0x00, 0x62, 0xf6, 0x08, 0x70, + 0x00, 0x62, 0xf7, 0x07, 0xfb, 0x00, 0x62, 0xfc, + 0x38, 0xe5, 0x00, 0x62, 0xfd, 0x45, 0x04, 0x00, + 0x62, 0xfe, 0x09, 0x30, 0x00, 0x62, 0xff, 0x13, + 0x64, 0x00, 0x63, 0x01, 0x08, 0xcb, 0x00, 0x63, + 0x02, 0x13, 0x73, 0x00, 0x63, 0x03, 0x45, 0x05, + 0x00, 0x63, 0x04, 0x54, 0x7a, 0x00, 0x63, 0x07, + 0x08, 0xa6, 0x00, 0x63, 0x08, 0x13, 0x74, 0x00, + 0x63, 0x09, 0x04, 0x88, 0x00, 0x63, 0x0a, 0x38, + 0xe6, 0x00, 0x63, 0x0b, 0x54, 0x7b, 0x00, 0x63, + 0x0c, 0x13, 0x6f, 0x00, 0x63, 0x0d, 0x38, 0xe7, + 0x00, 0x63, 0x10, 0x45, 0x06, 0x00, 0x63, 0x11, + 0x0b, 0xc5, 0x00, 0x63, 0x13, 0x54, 0x7c, 0x00, + 0x63, 0x16, 0x4b, 0xbd, 0x00, 0x63, 0x18, 0x38, + 0xe8, 0x00, 0x63, 0x19, 0x06, 0x8d, 0x00, 0x63, + 0x1b, 0x37, 0x37, 0x00, 0x63, 0x1f, 0x06, 0xac, + 0x00, 0x63, 0x27, 0x13, 0x72, 0x00, 0x63, 0x28, + 0x04, 0x6b, 0x00, 0x63, 0x29, 0x54, 0x7d, 0x00, + 0x63, 0x2a, 0x4b, 0xbe, 0x00, 0x63, 0x2b, 0x08, + 0x33, 0x00, 0x63, 0x2d, 0x54, 0x7e, 0x00, 0x63, + 0x2f, 0x09, 0xfc, 0x00, 0x63, 0x32, 0x45, 0x09, + 0x00, 0x63, 0x35, 0x45, 0x0a, 0x00, 0x63, 0x36, + 0x4b, 0xbf, 0x00, 0x63, 0x39, 0x38, 0xe9, 0x00, + 0x63, 0x3a, 0x0c, 0x0e, 0x00, 0x63, 0x3b, 0x45, + 0x0b, 0x00, 0x63, 0x3c, 0x45, 0x0c, 0x00, 0x63, + 0x3d, 0x0d, 0x68, 0x00, 0x63, 0x3e, 0x13, 0x78, + 0x00, 0x63, 0x3f, 0x0a, 0xe0, 0x00, 0x63, 0x41, + 0x45, 0x0d, 0x00, 0x63, 0x42, 0x38, 0xea, 0x00, + 0x63, 0x43, 0x38, 0xeb, 0x00, 0x63, 0x44, 0x45, + 0x0e, 0x00, 0x63, 0x46, 0x4b, 0xc0, 0x00, 0x63, + 0x49, 0x0b, 0x0a, 0x00, 0x63, 0x4a, 0x54, 0x7f, + 0x00, 0x63, 0x4b, 0x4b, 0xc1, 0x00, 0x63, 0x4c, + 0x08, 0x79, 0x00, 0x63, 0x4d, 0x13, 0x79, 0x00, + 0x63, 0x4e, 0x45, 0x0f, 0x00, 0x63, 0x4f, 0x13, + 0x7b, 0x00, 0x63, 0x50, 0x13, 0x77, 0x00, 0x63, + 0x52, 0x54, 0x80, 0x00, 0x63, 0x53, 0x4b, 0xc2, + 0x00, 0x63, 0x54, 0x54, 0x81, 0x00, 0x63, 0x55, + 0x0e, 0x31, 0x00, 0x63, 0x57, 0x0b, 0xd9, 0x00, + 0x63, 0x58, 0x54, 0x82, 0x00, 0x63, 0x59, 0x45, + 0x11, 0x00, 0x63, 0x5b, 0x54, 0x83, 0x00, 0x63, + 0x5c, 0x0a, 0xde, 0x00, 0x63, 0x65, 0x38, 0xec, + 0x00, 0x63, 0x66, 0x54, 0x84, 0x00, 0x63, 0x67, + 0x0e, 0x4b, 0x00, 0x63, 0x68, 0x08, 0xfa, 0x00, + 0x63, 0x69, 0x13, 0x87, 0x00, 0x63, 0x6b, 0x13, + 0x86, 0x00, 0x63, 0x6c, 0x45, 0x14, 0x00, 0x63, + 0x6d, 0x54, 0x85, 0x00, 0x63, 0x6e, 0x0a, 0x3e, + 0x00, 0x63, 0x71, 0x4b, 0xc3, 0x00, 0x63, 0x72, + 0x07, 0x54, 0x00, 0x63, 0x74, 0x38, 0xed, 0x00, + 0x63, 0x75, 0x4b, 0xc4, 0x00, 0x63, 0x76, 0x13, + 0x80, 0x00, 0x63, 0x77, 0x09, 0xa1, 0x00, 0x63, + 0x78, 0x54, 0x86, 0x00, 0x63, 0x7a, 0x0c, 0xc0, + 0x00, 0x63, 0x7b, 0x0c, 0xe7, 0x00, 0x63, 0x7c, + 0x41, 0xeb, 0x00, 0x63, 0x7d, 0x38, 0xee, 0x00, + 0x63, 0x7f, 0x4b, 0xc5, 0x00, 0x63, 0x80, 0x13, + 0x7e, 0x00, 0x63, 0x82, 0x4b, 0xc6, 0x00, 0x63, + 0x83, 0x0a, 0xdf, 0x00, 0x63, 0x84, 0x38, 0xef, + 0x00, 0x63, 0x87, 0x38, 0xf0, 0x00, 0x63, 0x88, + 0x09, 0x24, 0x00, 0x63, 0x89, 0x13, 0x83, 0x00, + 0x63, 0x8a, 0x4b, 0xc7, 0x00, 0x63, 0x8c, 0x09, + 0xa0, 0x00, 0x63, 0x8e, 0x13, 0x7d, 0x00, 0x63, + 0x8f, 0x13, 0x82, 0x00, 0x63, 0x90, 0x38, 0xf1, + 0x00, 0x63, 0x92, 0x0d, 0x09, 0x00, 0x63, 0x94, + 0x45, 0x17, 0x00, 0x63, 0x95, 0x54, 0x87, 0x00, + 0x63, 0x96, 0x13, 0x7c, 0x00, 0x63, 0x98, 0x06, + 0xf7, 0x00, 0x63, 0x99, 0x45, 0x15, 0x00, 0x63, + 0x9a, 0x54, 0x88, 0x00, 0x63, 0x9b, 0x05, 0xbb, + 0x00, 0x63, 0x9e, 0x38, 0xf2, 0x00, 0x63, 0x9f, + 0x13, 0x84, 0x00, 0x63, 0xa0, 0x0f, 0x73, 0x00, + 0x63, 0xa1, 0x08, 0x3e, 0x00, 0x63, 0xa2, 0x0b, + 0x73, 0x00, 0x63, 0xa3, 0x13, 0x81, 0x00, 0x63, + 0xa4, 0x54, 0x89, 0x00, 0x63, 0xa5, 0x0a, 0x80, + 0x00, 0x63, 0xa6, 0x54, 0x8a, 0x00, 0x63, 0xa7, + 0x07, 0xc7, 0x00, 0x63, 0xa8, 0x0a, 0x2a, 0x00, + 0x63, 0xa9, 0x05, 0x08, 0x00, 0x63, 0xaa, 0x0a, + 0xbe, 0x00, 0x63, 0xab, 0x13, 0x7f, 0x00, 0x63, + 0xac, 0x06, 0x5f, 0x00, 0x63, 0xad, 0x54, 0x8b, + 0x00, 0x63, 0xae, 0x4b, 0xc8, 0x00, 0x63, 0xaf, + 0x4b, 0xc9, 0x00, 0x63, 0xb2, 0x07, 0x1d, 0x00, + 0x63, 0xb4, 0x0b, 0xeb, 0x00, 0x63, 0xb5, 0x13, + 0x85, 0x00, 0x63, 0xbb, 0x0a, 0xe1, 0x00, 0x63, + 0xbd, 0x45, 0x18, 0x00, 0x63, 0xbe, 0x13, 0x88, + 0x00, 0x63, 0xc0, 0x13, 0x8a, 0x00, 0x63, 0xc1, + 0x54, 0x8c, 0x00, 0x63, 0xc3, 0x0b, 0x17, 0x00, + 0x63, 0xc4, 0x13, 0x90, 0x00, 0x63, 0xc5, 0x54, + 0x8d, 0x00, 0x63, 0xc6, 0x13, 0x8b, 0x00, 0x63, + 0xc8, 0x54, 0x8e, 0x00, 0x63, 0xc9, 0x13, 0x8d, + 0x00, 0x63, 0xce, 0x54, 0x8f, 0x00, 0x63, 0xcf, + 0x0d, 0xb3, 0x00, 0x63, 0xd0, 0x0c, 0x0f, 0x00, + 0x63, 0xd1, 0x38, 0xf3, 0x00, 0x63, 0xd2, 0x13, + 0x8e, 0x00, 0x63, 0xd3, 0x54, 0x90, 0x00, 0x63, + 0xd4, 0x45, 0x19, 0x00, 0x63, 0xd5, 0x45, 0x1a, + 0x00, 0x63, 0xd6, 0x0f, 0x16, 0x00, 0x63, 0xda, + 0x0f, 0x32, 0x00, 0x63, 0xdb, 0x05, 0xf5, 0x00, + 0x63, 0xdc, 0x38, 0xf4, 0x00, 0x63, 0xe0, 0x45, + 0x1b, 0x00, 0x63, 0xe1, 0x04, 0x72, 0x00, 0x63, + 0xe3, 0x13, 0x8c, 0x00, 0x63, 0xe5, 0x41, 0xec, + 0x00, 0x63, 0xe9, 0x13, 0x89, 0x00, 0x63, 0xea, + 0x4b, 0xca, 0x00, 0x63, 0xeb, 0x45, 0x1c, 0x00, + 0x63, 0xec, 0x45, 0x1d, 0x00, 0x63, 0xed, 0x34, + 0x1c, 0x00, 0x63, 0xee, 0x06, 0x34, 0x00, 0x63, + 0xf2, 0x45, 0x1e, 0x00, 0x63, 0xf3, 0x54, 0x91, + 0x00, 0x63, 0xf4, 0x05, 0x09, 0x00, 0x63, 0xf5, + 0x21, 0x13, 0x00, 0x63, 0xf6, 0x13, 0x8f, 0x00, + 0x63, 0xf7, 0x36, 0x44, 0x00, 0x63, 0xf8, 0x4b, + 0xcb, 0x00, 0x63, 0xf9, 0x4b, 0xcc, 0x00, 0x63, + 0xfa, 0x0f, 0x33, 0x00, 0x64, 0x06, 0x13, 0x93, + 0x00, 0x64, 0x09, 0x38, 0xf5, 0x00, 0x64, 0x0a, + 0x54, 0x92, 0x00, 0x64, 0x0d, 0x0b, 0x1b, 0x00, + 0x64, 0x0f, 0x13, 0x9a, 0x00, 0x64, 0x10, 0x38, + 0xf6, 0x00, 0x64, 0x12, 0x4b, 0xcd, 0x00, 0x64, + 0x13, 0x13, 0x94, 0x00, 0x64, 0x14, 0x1e, 0x2c, + 0x00, 0x64, 0x16, 0x13, 0x91, 0x00, 0x64, 0x17, + 0x13, 0x98, 0x00, 0x64, 0x18, 0x4b, 0xce, 0x00, + 0x64, 0x1c, 0x13, 0x7a, 0x00, 0x64, 0x1e, 0x45, + 0x1f, 0x00, 0x64, 0x20, 0x4b, 0xcf, 0x00, 0x64, + 0x22, 0x38, 0xf7, 0x00, 0x64, 0x24, 0x4b, 0xd0, + 0x00, 0x64, 0x25, 0x45, 0x20, 0x00, 0x64, 0x26, + 0x13, 0x95, 0x00, 0x64, 0x28, 0x13, 0x99, 0x00, + 0x64, 0x29, 0x45, 0x21, 0x00, 0x64, 0x2a, 0x4b, + 0xd1, 0x00, 0x64, 0x2c, 0x0d, 0x56, 0x00, 0x64, + 0x2d, 0x0c, 0x65, 0x00, 0x64, 0x2f, 0x45, 0x22, + 0x00, 0x64, 0x30, 0x54, 0x93, 0x00, 0x64, 0x34, + 0x13, 0x92, 0x00, 0x64, 0x35, 0x4b, 0xd2, 0x00, + 0x64, 0x36, 0x13, 0x96, 0x00, 0x64, 0x3a, 0x07, + 0x1e, 0x00, 0x64, 0x3d, 0x4b, 0xd3, 0x00, 0x64, + 0x3e, 0x08, 0x61, 0x00, 0x64, 0x3f, 0x4b, 0xd4, + 0x00, 0x64, 0x42, 0x0a, 0x81, 0x00, 0x64, 0x4b, + 0x54, 0x94, 0x00, 0x64, 0x4e, 0x13, 0x9e, 0x00, + 0x64, 0x4f, 0x54, 0x95, 0x00, 0x64, 0x51, 0x1e, + 0x43, 0x00, 0x64, 0x52, 0x4b, 0xd5, 0x00, 0x64, + 0x53, 0x54, 0x96, 0x00, 0x64, 0x54, 0x38, 0xf8, + 0x00, 0x64, 0x58, 0x0c, 0x20, 0x00, 0x64, 0x5a, + 0x45, 0x23, 0x00, 0x64, 0x5b, 0x38, 0xf9, 0x00, + 0x64, 0x5c, 0x54, 0x97, 0x00, 0x64, 0x5d, 0x45, + 0x24, 0x00, 0x64, 0x5f, 0x4b, 0xd6, 0x00, 0x64, + 0x60, 0x21, 0x14, 0x00, 0x64, 0x61, 0x54, 0x98, + 0x00, 0x64, 0x63, 0x54, 0x99, 0x00, 0x64, 0x67, + 0x13, 0x9b, 0x00, 0x64, 0x69, 0x0e, 0x8e, 0x00, + 0x64, 0x6d, 0x38, 0xfa, 0x00, 0x64, 0x6f, 0x13, + 0x9c, 0x00, 0x64, 0x73, 0x45, 0x25, 0x00, 0x64, + 0x74, 0x4b, 0xd7, 0x00, 0x64, 0x76, 0x13, 0x9d, + 0x00, 0x64, 0x78, 0x0e, 0xda, 0x00, 0x64, 0x79, + 0x41, 0xed, 0x00, 0x64, 0x7a, 0x0a, 0x46, 0x00, + 0x64, 0x7b, 0x38, 0xfb, 0x00, 0x64, 0x7d, 0x45, + 0x26, 0x00, 0x64, 0x83, 0x07, 0x38, 0x00, 0x64, + 0x85, 0x54, 0x9a, 0x00, 0x64, 0x87, 0x45, 0x27, + 0x00, 0x64, 0x88, 0x13, 0xa4, 0x00, 0x64, 0x8f, + 0x54, 0x9b, 0x00, 0x64, 0x90, 0x4b, 0xd8, 0x00, + 0x64, 0x91, 0x45, 0x28, 0x00, 0x64, 0x92, 0x08, + 0x83, 0x00, 0x64, 0x93, 0x13, 0xa1, 0x00, 0x64, + 0x95, 0x13, 0xa0, 0x00, 0x64, 0x98, 0x4b, 0xd9, + 0x00, 0x64, 0x99, 0x4b, 0xda, 0x00, 0x64, 0x9a, + 0x0c, 0xe8, 0x00, 0x64, 0x9b, 0x54, 0x9c, 0x00, + 0x64, 0x9d, 0x21, 0x15, 0x00, 0x64, 0x9e, 0x0c, + 0x8d, 0x00, 0x64, 0x9f, 0x45, 0x29, 0x00, 0x64, + 0xa1, 0x54, 0x9d, 0x00, 0x64, 0xa3, 0x54, 0x9e, + 0x00, 0x64, 0xa4, 0x0c, 0x2b, 0x00, 0x64, 0xa5, + 0x13, 0xa2, 0x00, 0x64, 0xa6, 0x54, 0x9f, 0x00, + 0x64, 0xa8, 0x54, 0xa0, 0x00, 0x64, 0xa9, 0x13, + 0xa3, 0x00, 0x64, 0xab, 0x0d, 0xe1, 0x00, 0x64, + 0xac, 0x4b, 0xdb, 0x00, 0x64, 0xad, 0x0c, 0xfb, + 0x00, 0x64, 0xae, 0x08, 0x71, 0x00, 0x64, 0xb0, + 0x0a, 0x95, 0x00, 0x64, 0xb2, 0x0e, 0x7e, 0x00, + 0x64, 0xb3, 0x4b, 0xdc, 0x00, 0x64, 0xb9, 0x05, + 0xa7, 0x00, 0x64, 0xbb, 0x13, 0xaa, 0x00, 0x64, + 0xbc, 0x13, 0xa5, 0x00, 0x64, 0xbd, 0x54, 0xa1, + 0x00, 0x64, 0xbe, 0x38, 0xfc, 0x00, 0x64, 0xbf, + 0x38, 0xfd, 0x00, 0x64, 0xc1, 0x0f, 0x34, 0x00, + 0x64, 0xc2, 0x13, 0xac, 0x00, 0x64, 0xc4, 0x41, + 0xee, 0x00, 0x64, 0xc5, 0x13, 0xa8, 0x00, 0x64, + 0xc7, 0x13, 0xa9, 0x00, 0x64, 0xc9, 0x54, 0xa2, + 0x00, 0x64, 0xca, 0x34, 0x1d, 0x00, 0x64, 0xcb, + 0x45, 0x2a, 0x00, 0x64, 0xcc, 0x45, 0x2b, 0x00, + 0x64, 0xcd, 0x0a, 0xe2, 0x00, 0x64, 0xce, 0x21, + 0x16, 0x00, 0x64, 0xd0, 0x41, 0xef, 0x00, 0x64, + 0xd1, 0x54, 0xa3, 0x00, 0x64, 0xd2, 0x13, 0xa7, + 0x00, 0x64, 0xd4, 0x13, 0x66, 0x00, 0x64, 0xd5, + 0x45, 0x2c, 0x00, 0x64, 0xd7, 0x45, 0x2d, 0x00, + 0x64, 0xd8, 0x13, 0xab, 0x00, 0x64, 0xda, 0x13, + 0xa6, 0x00, 0x64, 0xe0, 0x13, 0xb0, 0x00, 0x64, + 0xe1, 0x13, 0xb1, 0x00, 0x64, 0xe2, 0x0c, 0x21, + 0x00, 0x64, 0xe3, 0x13, 0xb3, 0x00, 0x64, 0xe4, + 0x45, 0x2f, 0x00, 0x64, 0xe5, 0x38, 0xfe, 0x00, + 0x64, 0xe6, 0x08, 0x72, 0x00, 0x64, 0xe7, 0x13, + 0xae, 0x00, 0x64, 0xe9, 0x54, 0xa4, 0x00, 0x64, + 0xea, 0x54, 0xa5, 0x00, 0x64, 0xec, 0x06, 0x56, + 0x00, 0x64, 0xed, 0x4b, 0xdd, 0x00, 0x64, 0xef, + 0x13, 0xb4, 0x00, 0x64, 0xf0, 0x4b, 0xde, 0x00, + 0x64, 0xf1, 0x13, 0xad, 0x00, 0x64, 0xf2, 0x13, + 0xb8, 0x00, 0x64, 0xf4, 0x13, 0xb7, 0x00, 0x64, + 0xf5, 0x54, 0xa6, 0x00, 0x64, 0xf6, 0x13, 0xb6, + 0x00, 0x64, 0xf7, 0x38, 0xff, 0x00, 0x64, 0xfa, + 0x13, 0xb9, 0x00, 0x64, 0xfb, 0x39, 0x00, 0x00, + 0x64, 0xfd, 0x13, 0xbb, 0x00, 0x64, 0xfe, 0x09, + 0xd9, 0x00, 0x64, 0xff, 0x45, 0x30, 0x00, 0x65, + 0x00, 0x13, 0xba, 0x00, 0x65, 0x01, 0x54, 0xa7, + 0x00, 0x65, 0x04, 0x39, 0x01, 0x00, 0x65, 0x05, + 0x13, 0xbe, 0x00, 0x65, 0x08, 0x54, 0xa8, 0x00, + 0x65, 0x09, 0x54, 0xa9, 0x00, 0x65, 0x0a, 0x54, + 0xaa, 0x00, 0x65, 0x0f, 0x45, 0x32, 0x00, 0x65, + 0x13, 0x54, 0xab, 0x00, 0x65, 0x14, 0x45, 0x33, + 0x00, 0x65, 0x16, 0x39, 0x02, 0x00, 0x65, 0x18, + 0x13, 0xbc, 0x00, 0x65, 0x19, 0x39, 0x03, 0x00, + 0x65, 0x1b, 0x4b, 0xdf, 0x00, 0x65, 0x1c, 0x13, + 0xbd, 0x00, 0x65, 0x1d, 0x13, 0x97, 0x00, 0x65, + 0x1e, 0x45, 0x35, 0x00, 0x65, 0x1f, 0x4b, 0xe0, + 0x00, 0x65, 0x22, 0x1e, 0x97, 0x00, 0x65, 0x23, + 0x13, 0xc0, 0x00, 0x65, 0x24, 0x13, 0xbf, 0x00, + 0x65, 0x26, 0x54, 0xac, 0x00, 0x65, 0x29, 0x41, + 0xf0, 0x00, 0x65, 0x2a, 0x13, 0x9f, 0x00, 0x65, + 0x2b, 0x13, 0xc1, 0x00, 0x65, 0x2c, 0x13, 0xb5, + 0x00, 0x65, 0x2e, 0x4b, 0xe1, 0x00, 0x65, 0x2f, + 0x08, 0xa7, 0x00, 0x65, 0x31, 0x54, 0xad, 0x00, + 0x65, 0x32, 0x45, 0x36, 0x00, 0x65, 0x34, 0x13, + 0xc2, 0x00, 0x65, 0x35, 0x13, 0xc3, 0x00, 0x65, + 0x36, 0x13, 0xc5, 0x00, 0x65, 0x37, 0x13, 0xc4, + 0x00, 0x65, 0x38, 0x13, 0xc6, 0x00, 0x65, 0x39, + 0x05, 0x7e, 0x00, 0x65, 0x3a, 0x54, 0xae, 0x00, + 0x65, 0x3b, 0x07, 0xc8, 0x00, 0x65, 0x3c, 0x54, + 0xaf, 0x00, 0x65, 0x3d, 0x54, 0xb0, 0x00, 0x65, + 0x3e, 0x0e, 0x4c, 0x00, 0x65, 0x3f, 0x0a, 0x53, + 0x00, 0x65, 0x43, 0x54, 0xb1, 0x00, 0x65, 0x44, + 0x45, 0x37, 0x00, 0x65, 0x45, 0x07, 0x82, 0x00, + 0x65, 0x47, 0x39, 0x04, 0x00, 0x65, 0x48, 0x13, + 0xc8, 0x00, 0x65, 0x49, 0x4b, 0xe2, 0x00, 0x65, + 0x4d, 0x13, 0xcb, 0x00, 0x65, 0x4e, 0x21, 0x17, + 0x00, 0x65, 0x4f, 0x34, 0x45, 0x00, 0x65, 0x50, + 0x54, 0xb2, 0x00, 0x65, 0x51, 0x06, 0x79, 0x00, + 0x65, 0x52, 0x54, 0xb3, 0x00, 0x65, 0x54, 0x45, + 0x38, 0x00, 0x65, 0x55, 0x13, 0xca, 0x00, 0x65, + 0x56, 0x13, 0xc9, 0x00, 0x65, 0x57, 0x0d, 0x0a, + 0x00, 0x65, 0x58, 0x13, 0xcc, 0x00, 0x65, 0x59, + 0x06, 0xad, 0x00, 0x65, 0x5d, 0x13, 0xce, 0x00, + 0x65, 0x5e, 0x13, 0xcd, 0x00, 0x65, 0x5f, 0x54, + 0xb4, 0x00, 0x65, 0x60, 0x4b, 0xe3, 0x00, 0x65, + 0x62, 0x05, 0xf6, 0x00, 0x65, 0x63, 0x08, 0x84, + 0x00, 0x65, 0x66, 0x0c, 0xb0, 0x00, 0x65, 0x67, + 0x39, 0x05, 0x00, 0x65, 0x6b, 0x45, 0x39, 0x00, + 0x65, 0x6c, 0x07, 0x1f, 0x00, 0x65, 0x70, 0x0a, + 0x3a, 0x00, 0x65, 0x72, 0x13, 0xcf, 0x00, 0x65, + 0x74, 0x0a, 0x54, 0x00, 0x65, 0x75, 0x0c, 0x22, + 0x00, 0x65, 0x77, 0x0d, 0xd1, 0x00, 0x65, 0x78, + 0x13, 0xd0, 0x00, 0x65, 0x7a, 0x45, 0x3a, 0x00, + 0x65, 0x7d, 0x54, 0xb5, 0x00, 0x65, 0x81, 0x39, + 0x06, 0x00, 0x65, 0x82, 0x13, 0xd1, 0x00, 0x65, + 0x83, 0x13, 0xd2, 0x00, 0x65, 0x84, 0x45, 0x3b, + 0x00, 0x65, 0x85, 0x39, 0x07, 0x00, 0x65, 0x87, + 0x0e, 0x08, 0x00, 0x65, 0x88, 0x12, 0x0c, 0x00, + 0x65, 0x89, 0x0a, 0x6a, 0x00, 0x65, 0x8a, 0x45, + 0x3c, 0x00, 0x65, 0x8c, 0x0d, 0xbe, 0x00, 0x65, + 0x8e, 0x08, 0x48, 0x00, 0x65, 0x90, 0x0d, 0x79, + 0x00, 0x65, 0x91, 0x0d, 0x57, 0x00, 0x65, 0x92, + 0x4b, 0xe4, 0x00, 0x65, 0x95, 0x4b, 0xe5, 0x00, + 0x65, 0x97, 0x0c, 0x47, 0x00, 0x65, 0x98, 0x54, + 0xb6, 0x00, 0x65, 0x99, 0x0f, 0x89, 0x00, 0x65, + 0x9b, 0x13, 0xd4, 0x00, 0x65, 0x9c, 0x08, 0xfc, + 0x00, 0x65, 0x9d, 0x41, 0xf1, 0x00, 0x65, 0x9f, + 0x13, 0xd5, 0x00, 0x65, 0xa0, 0x54, 0xb7, 0x00, + 0x65, 0xa1, 0x04, 0x7a, 0x00, 0x65, 0xa3, 0x54, + 0xb8, 0x00, 0x65, 0xa4, 0x06, 0xcc, 0x00, 0x65, + 0xa5, 0x0a, 0x71, 0x00, 0x65, 0xa6, 0x54, 0xb9, + 0x00, 0x65, 0xa7, 0x0d, 0xd2, 0x00, 0x65, 0xab, + 0x13, 0xd6, 0x00, 0x65, 0xac, 0x08, 0x90, 0x00, + 0x65, 0xad, 0x0b, 0x85, 0x00, 0x65, 0xae, 0x54, + 0xba, 0x00, 0x65, 0xaf, 0x08, 0xa9, 0x00, 0x65, + 0xb0, 0x09, 0xfd, 0x00, 0x65, 0xb2, 0x45, 0x3d, + 0x00, 0x65, 0xb3, 0x54, 0xbb, 0x00, 0x65, 0xb4, + 0x4b, 0xe6, 0x00, 0x65, 0xb5, 0x45, 0x3e, 0x00, + 0x65, 0xb7, 0x13, 0xd7, 0x00, 0x65, 0xb8, 0x45, + 0x3f, 0x00, 0x65, 0xb9, 0x0e, 0x4d, 0x00, 0x65, + 0xbc, 0x05, 0x19, 0x00, 0x65, 0xbd, 0x08, 0xaa, + 0x00, 0x65, 0xbe, 0x4b, 0xe7, 0x00, 0x65, 0xbf, + 0x45, 0x40, 0x00, 0x65, 0xc1, 0x13, 0xda, 0x00, + 0x65, 0xc2, 0x39, 0x08, 0x00, 0x65, 0xc3, 0x13, + 0xd8, 0x00, 0x65, 0xc4, 0x13, 0xdb, 0x00, 0x65, + 0xc5, 0x0f, 0x81, 0x00, 0x65, 0xc6, 0x13, 0xd9, + 0x00, 0x65, 0xc8, 0x4b, 0xe8, 0x00, 0x65, 0xc9, + 0x45, 0x41, 0x00, 0x65, 0xcb, 0x0a, 0x9f, 0x00, + 0x65, 0xcc, 0x13, 0xdc, 0x00, 0x65, 0xce, 0x4b, + 0xe9, 0x00, 0x65, 0xcf, 0x0b, 0x12, 0x00, 0x65, + 0xd0, 0x4b, 0xea, 0x00, 0x65, 0xd2, 0x13, 0xdd, + 0x00, 0x65, 0xd4, 0x45, 0x42, 0x00, 0x65, 0xd6, + 0x54, 0xbc, 0x00, 0x65, 0xd7, 0x06, 0x36, 0x00, + 0x65, 0xd8, 0x54, 0xbd, 0x00, 0x65, 0xd9, 0x13, + 0xdf, 0x00, 0x65, 0xdb, 0x13, 0xde, 0x00, 0x65, + 0xdf, 0x4b, 0xeb, 0x00, 0x65, 0xe0, 0x13, 0xe0, + 0x00, 0x65, 0xe1, 0x13, 0xe1, 0x00, 0x65, 0xe2, + 0x34, 0x16, 0x00, 0x65, 0xe3, 0x35, 0x85, 0x00, + 0x65, 0xe5, 0x0c, 0xd4, 0x00, 0x65, 0xe6, 0x0b, + 0x74, 0x00, 0x65, 0xe7, 0x06, 0x86, 0x00, 0x65, + 0xe8, 0x08, 0xab, 0x00, 0x65, 0xe9, 0x0a, 0xe3, + 0x00, 0x65, 0xec, 0x09, 0x66, 0x00, 0x65, 0xed, + 0x04, 0x74, 0x00, 0x65, 0xf0, 0x39, 0x09, 0x00, + 0x65, 0xf1, 0x13, 0xe2, 0x00, 0x65, 0xf2, 0x39, + 0x0a, 0x00, 0x65, 0xf4, 0x54, 0xbf, 0x00, 0x65, + 0xf5, 0x54, 0xc0, 0x00, 0x65, 0xf9, 0x45, 0x44, + 0x00, 0x65, 0xfa, 0x05, 0x22, 0x00, 0x65, 0xfb, + 0x13, 0xe6, 0x00, 0x65, 0xfc, 0x45, 0x45, 0x00, + 0x65, 0xfe, 0x54, 0xc1, 0x00, 0x65, 0xff, 0x54, + 0xc2, 0x00, 0x66, 0x00, 0x21, 0x18, 0x00, 0x66, + 0x02, 0x07, 0xc9, 0x00, 0x66, 0x03, 0x13, 0xe5, + 0x00, 0x66, 0x04, 0x45, 0x46, 0x00, 0x66, 0x06, + 0x08, 0x1b, 0x00, 0x66, 0x07, 0x09, 0xa2, 0x00, + 0x66, 0x08, 0x45, 0x47, 0x00, 0x66, 0x09, 0x21, + 0x1a, 0x00, 0x66, 0x0a, 0x13, 0xe4, 0x00, 0x66, + 0x0c, 0x09, 0xa3, 0x00, 0x66, 0x0d, 0x54, 0xc3, + 0x00, 0x66, 0x0e, 0x0e, 0xcc, 0x00, 0x66, 0x0f, + 0x08, 0x1a, 0x00, 0x66, 0x11, 0x54, 0xc4, 0x00, + 0x66, 0x12, 0x54, 0xc5, 0x00, 0x66, 0x13, 0x04, + 0x9b, 0x00, 0x66, 0x14, 0x0a, 0x72, 0x00, 0x66, + 0x15, 0x21, 0x19, 0x00, 0x66, 0x16, 0x54, 0xc6, + 0x00, 0x66, 0x1c, 0x13, 0xeb, 0x00, 0x66, 0x1d, + 0x54, 0xc7, 0x00, 0x66, 0x1e, 0x4f, 0x50, 0x00, + 0x66, 0x1f, 0x0a, 0x55, 0x00, 0x66, 0x20, 0x04, + 0xe9, 0x00, 0x66, 0x21, 0x45, 0x48, 0x00, 0x66, + 0x22, 0x41, 0xf3, 0x00, 0x66, 0x23, 0x54, 0xc8, + 0x00, 0x66, 0x24, 0x21, 0x1d, 0x00, 0x66, 0x25, + 0x09, 0x5f, 0x00, 0x66, 0x26, 0x54, 0xc9, 0x00, + 0x66, 0x27, 0x0e, 0x94, 0x00, 0x66, 0x28, 0x08, + 0x62, 0x00, 0x66, 0x29, 0x54, 0xca, 0x00, 0x66, + 0x2a, 0x45, 0x49, 0x00, 0x66, 0x2b, 0x41, 0xf4, + 0x00, 0x66, 0x2c, 0x39, 0x0b, 0x00, 0x66, 0x2d, + 0x09, 0xa4, 0x00, 0x66, 0x2e, 0x21, 0x1b, 0x00, + 0x66, 0x2f, 0x0a, 0x4b, 0x00, 0x66, 0x30, 0x41, + 0xf5, 0x00, 0x66, 0x31, 0x20, 0xae, 0x00, 0x66, + 0x33, 0x41, 0xf6, 0x00, 0x66, 0x34, 0x13, 0xea, + 0x00, 0x66, 0x35, 0x13, 0xe8, 0x00, 0x66, 0x36, + 0x13, 0xe9, 0x00, 0x66, 0x37, 0x54, 0xcc, 0x00, + 0x66, 0x39, 0x54, 0xcb, 0x00, 0x66, 0x3a, 0x41, + 0xf2, 0x00, 0x66, 0x3b, 0x1e, 0x00, 0x00, 0x66, + 0x3c, 0x0b, 0xa9, 0x00, 0x66, 0x3f, 0x14, 0x09, + 0x00, 0x66, 0x40, 0x54, 0xcd, 0x00, 0x66, 0x41, + 0x13, 0xef, 0x00, 0x66, 0x42, 0x08, 0xcc, 0x00, + 0x66, 0x43, 0x07, 0xca, 0x00, 0x66, 0x44, 0x13, + 0xed, 0x00, 0x66, 0x45, 0x45, 0x4a, 0x00, 0x66, + 0x46, 0x54, 0xce, 0x00, 0x66, 0x48, 0x41, 0xf7, + 0x00, 0x66, 0x49, 0x13, 0xee, 0x00, 0x66, 0x4a, + 0x54, 0xcf, 0x00, 0x66, 0x4b, 0x09, 0xfe, 0x00, + 0x66, 0x4c, 0x39, 0x0c, 0x00, 0x66, 0x4e, 0x45, + 0x4c, 0x00, 0x66, 0x4f, 0x13, 0xec, 0x00, 0x66, + 0x51, 0x45, 0x4b, 0x00, 0x66, 0x52, 0x08, 0x7d, + 0x00, 0x66, 0x57, 0x21, 0x1f, 0x00, 0x66, 0x58, + 0x54, 0xd0, 0x00, 0x66, 0x59, 0x21, 0x20, 0x00, + 0x66, 0x5a, 0x34, 0x41, 0x00, 0x66, 0x5b, 0x39, + 0x0d, 0x00, 0x66, 0x5c, 0x39, 0x0e, 0x00, 0x66, + 0x5d, 0x13, 0xf1, 0x00, 0x66, 0x5e, 0x13, 0xf0, + 0x00, 0x66, 0x5f, 0x13, 0xf5, 0x00, 0x66, 0x60, + 0x54, 0xd1, 0x00, 0x66, 0x61, 0x39, 0x0f, 0x00, + 0x66, 0x62, 0x13, 0xf6, 0x00, 0x66, 0x63, 0x37, + 0x3a, 0x00, 0x66, 0x64, 0x13, 0xf2, 0x00, 0x66, + 0x65, 0x21, 0x1e, 0x00, 0x66, 0x66, 0x05, 0x80, + 0x00, 0x66, 0x67, 0x13, 0xf3, 0x00, 0x66, 0x68, + 0x13, 0xf4, 0x00, 0x66, 0x69, 0x0d, 0x69, 0x00, + 0x66, 0x6a, 0x45, 0x51, 0x00, 0x66, 0x6b, 0x39, + 0x10, 0x00, 0x66, 0x6c, 0x45, 0x52, 0x00, 0x66, + 0x6d, 0x45, 0x53, 0x00, 0x66, 0x6e, 0x0d, 0xd3, + 0x00, 0x66, 0x6f, 0x07, 0x20, 0x00, 0x66, 0x70, + 0x13, 0xf7, 0x00, 0x66, 0x73, 0x21, 0x22, 0x00, + 0x66, 0x74, 0x21, 0x21, 0x00, 0x66, 0x75, 0x54, + 0xd2, 0x00, 0x66, 0x76, 0x09, 0xa5, 0x00, 0x66, + 0x77, 0x41, 0xf9, 0x00, 0x66, 0x78, 0x41, 0xfa, + 0x00, 0x66, 0x79, 0x54, 0xd4, 0x00, 0x66, 0x7a, + 0x0b, 0x90, 0x00, 0x66, 0x7b, 0x45, 0x54, 0x00, + 0x66, 0x7c, 0x54, 0xd5, 0x00, 0x66, 0x7e, 0x4b, + 0xec, 0x00, 0x66, 0x7f, 0x54, 0xd3, 0x00, 0x66, + 0x80, 0x45, 0x55, 0x00, 0x66, 0x81, 0x06, 0xbf, + 0x00, 0x66, 0x83, 0x13, 0xf8, 0x00, 0x66, 0x84, + 0x13, 0xfc, 0x00, 0x66, 0x87, 0x05, 0x4b, 0x00, + 0x66, 0x88, 0x13, 0xf9, 0x00, 0x66, 0x89, 0x13, + 0xfb, 0x00, 0x66, 0x8b, 0x4b, 0xed, 0x00, 0x66, + 0x8c, 0x4b, 0xee, 0x00, 0x66, 0x8d, 0x41, 0xfb, + 0x00, 0x66, 0x8e, 0x13, 0xfa, 0x00, 0x66, 0x90, + 0x45, 0x56, 0x00, 0x66, 0x91, 0x09, 0x75, 0x00, + 0x66, 0x92, 0x45, 0x57, 0x00, 0x66, 0x96, 0x0b, + 0x86, 0x00, 0x66, 0x97, 0x04, 0x89, 0x00, 0x66, + 0x98, 0x13, 0xfd, 0x00, 0x66, 0x99, 0x21, 0x23, + 0x00, 0x66, 0x9a, 0x54, 0xd6, 0x00, 0x66, 0x9b, + 0x54, 0xd7, 0x00, 0x66, 0x9c, 0x54, 0xd8, 0x00, + 0x66, 0x9d, 0x13, 0xfe, 0x00, 0x66, 0x9f, 0x54, + 0xd9, 0x00, 0x66, 0xa0, 0x21, 0x24, 0x00, 0x66, + 0xa2, 0x0b, 0xc6, 0x00, 0x66, 0xa4, 0x39, 0x12, + 0x00, 0x66, 0xa6, 0x0f, 0xb9, 0x00, 0x66, 0xab, + 0x08, 0x91, 0x00, 0x66, 0xad, 0x45, 0x59, 0x00, + 0x66, 0xae, 0x0e, 0x3b, 0x00, 0x66, 0xb1, 0x45, + 0x5a, 0x00, 0x66, 0xb2, 0x21, 0x25, 0x00, 0x66, + 0xb3, 0x4b, 0xef, 0x00, 0x66, 0xb4, 0x0e, 0x6b, + 0x00, 0x66, 0xb5, 0x45, 0x5b, 0x00, 0x66, 0xb8, + 0x14, 0x05, 0x00, 0x66, 0xb9, 0x14, 0x00, 0x00, + 0x66, 0xbb, 0x41, 0xfc, 0x00, 0x66, 0xbc, 0x14, + 0x03, 0x00, 0x66, 0xbe, 0x14, 0x02, 0x00, 0x66, + 0xbf, 0x21, 0x26, 0x00, 0x66, 0xc0, 0x4b, 0xf0, + 0x00, 0x66, 0xc1, 0x13, 0xff, 0x00, 0x66, 0xc2, + 0x54, 0xdb, 0x00, 0x66, 0xc3, 0x54, 0xdc, 0x00, + 0x66, 0xc4, 0x14, 0x04, 0x00, 0x66, 0xc6, 0x34, + 0x55, 0x00, 0x66, 0xc7, 0x0c, 0xb6, 0x00, 0x66, + 0xc8, 0x39, 0x13, 0x00, 0x66, 0xc9, 0x14, 0x01, + 0x00, 0x66, 0xcc, 0x54, 0xdd, 0x00, 0x66, 0xce, + 0x54, 0xde, 0x00, 0x66, 0xcf, 0x4b, 0xf1, 0x00, + 0x66, 0xd4, 0x54, 0xdf, 0x00, 0x66, 0xd6, 0x14, + 0x06, 0x00, 0x66, 0xd9, 0x09, 0x76, 0x00, 0x66, + 0xda, 0x14, 0x07, 0x00, 0x66, 0xdb, 0x41, 0xfd, + 0x00, 0x66, 0xdc, 0x0f, 0x35, 0x00, 0x66, 0xdd, + 0x0d, 0x2e, 0x00, 0x66, 0xdf, 0x54, 0xe0, 0x00, + 0x66, 0xe0, 0x14, 0x08, 0x00, 0x66, 0xe6, 0x14, + 0x0a, 0x00, 0x66, 0xe8, 0x41, 0xfe, 0x00, 0x66, + 0xe9, 0x14, 0x0b, 0x00, 0x66, 0xeb, 0x54, 0xe1, + 0x00, 0x66, 0xec, 0x39, 0x14, 0x00, 0x66, 0xee, + 0x54, 0xe2, 0x00, 0x66, 0xf0, 0x14, 0x0c, 0x00, + 0x66, 0xf2, 0x06, 0xc2, 0x00, 0x66, 0xf3, 0x04, + 0xea, 0x00, 0x66, 0xf4, 0x07, 0xcb, 0x00, 0x66, + 0xf5, 0x14, 0x0d, 0x00, 0x66, 0xf7, 0x14, 0x0e, + 0x00, 0x66, 0xf8, 0x09, 0x7b, 0x00, 0x66, 0xf9, + 0x0a, 0xe4, 0x00, 0x66, 0xfa, 0x21, 0x27, 0x00, + 0x66, 0xfb, 0x20, 0xb1, 0x00, 0x66, 0xfc, 0x10, + 0xed, 0x00, 0x66, 0xfd, 0x0a, 0xc0, 0x00, 0x66, + 0xfe, 0x0a, 0xbf, 0x00, 0x66, 0xff, 0x0b, 0x38, + 0x00, 0x67, 0x00, 0x08, 0x37, 0x00, 0x67, 0x01, + 0x45, 0x5f, 0x00, 0x67, 0x03, 0x10, 0x4b, 0x00, + 0x67, 0x05, 0x39, 0x15, 0x00, 0x67, 0x07, 0x54, + 0xe3, 0x00, 0x67, 0x08, 0x07, 0x44, 0x00, 0x67, + 0x09, 0x0f, 0x17, 0x00, 0x67, 0x0b, 0x0e, 0x4e, + 0x00, 0x67, 0x0d, 0x0d, 0xf0, 0x00, 0x67, 0x0e, + 0x21, 0x28, 0x00, 0x67, 0x0f, 0x14, 0x0f, 0x00, + 0x67, 0x12, 0x45, 0x60, 0x00, 0x67, 0x13, 0x39, + 0x16, 0x00, 0x67, 0x14, 0x08, 0x63, 0x00, 0x67, + 0x15, 0x0b, 0xdb, 0x00, 0x67, 0x16, 0x14, 0x10, + 0x00, 0x67, 0x17, 0x4f, 0x51, 0x00, 0x67, 0x19, + 0x45, 0x62, 0x00, 0x67, 0x1b, 0x0e, 0x6c, 0x00, + 0x67, 0x1c, 0x54, 0xe4, 0x00, 0x67, 0x1d, 0x0b, + 0xc7, 0x00, 0x67, 0x1e, 0x14, 0x11, 0x00, 0x67, + 0x1f, 0x06, 0x38, 0x00, 0x67, 0x20, 0x54, 0xe5, + 0x00, 0x67, 0x22, 0x54, 0xe6, 0x00, 0x67, 0x25, + 0x4b, 0xf2, 0x00, 0x67, 0x26, 0x14, 0x12, 0x00, + 0x67, 0x27, 0x14, 0x13, 0x00, 0x67, 0x28, 0x0e, + 0xe6, 0x00, 0x67, 0x2a, 0x0e, 0xb0, 0x00, 0x67, + 0x2b, 0x0e, 0xa4, 0x00, 0x67, 0x2c, 0x0e, 0x8a, + 0x00, 0x67, 0x2d, 0x08, 0x73, 0x00, 0x67, 0x2e, + 0x14, 0x15, 0x00, 0x67, 0x31, 0x09, 0x17, 0x00, + 0x67, 0x33, 0x39, 0x17, 0x00, 0x67, 0x34, 0x0e, + 0x7f, 0x00, 0x67, 0x35, 0x4b, 0xf3, 0x00, 0x67, + 0x36, 0x14, 0x17, 0x00, 0x67, 0x37, 0x14, 0x1a, + 0x00, 0x67, 0x38, 0x14, 0x19, 0x00, 0x67, 0x3a, + 0x06, 0x35, 0x00, 0x67, 0x3d, 0x06, 0x7a, 0x00, + 0x67, 0x3e, 0x54, 0xe7, 0x00, 0x67, 0x3f, 0x14, + 0x16, 0x00, 0x67, 0x41, 0x14, 0x18, 0x00, 0x67, + 0x43, 0x35, 0xb7, 0x00, 0x67, 0x45, 0x54, 0xe8, + 0x00, 0x67, 0x46, 0x14, 0x1b, 0x00, 0x67, 0x47, + 0x41, 0xff, 0x00, 0x67, 0x48, 0x39, 0x18, 0x00, + 0x67, 0x49, 0x0a, 0x3f, 0x00, 0x67, 0x4c, 0x39, + 0x19, 0x00, 0x67, 0x4d, 0x45, 0x65, 0x00, 0x67, + 0x4e, 0x0f, 0x65, 0x00, 0x67, 0x4f, 0x04, 0x8d, + 0x00, 0x67, 0x50, 0x08, 0x50, 0x00, 0x67, 0x51, + 0x0b, 0x1c, 0x00, 0x67, 0x53, 0x09, 0x09, 0x00, + 0x67, 0x54, 0x45, 0x66, 0x00, 0x67, 0x55, 0x4b, + 0xf4, 0x00, 0x67, 0x56, 0x09, 0xdb, 0x00, 0x67, + 0x59, 0x14, 0x1e, 0x00, 0x67, 0x5c, 0x0c, 0x48, + 0x00, 0x67, 0x5d, 0x45, 0x67, 0x00, 0x67, 0x5e, + 0x14, 0x1c, 0x00, 0x67, 0x5f, 0x0b, 0x0b, 0x00, + 0x67, 0x60, 0x14, 0x1d, 0x00, 0x67, 0x61, 0x09, + 0xda, 0x00, 0x67, 0x62, 0x0e, 0xe9, 0x00, 0x67, + 0x63, 0x14, 0x1f, 0x00, 0x67, 0x64, 0x14, 0x20, + 0x00, 0x67, 0x65, 0x0f, 0x52, 0x00, 0x67, 0x66, + 0x21, 0x2a, 0x00, 0x67, 0x6a, 0x14, 0x25, 0x00, + 0x67, 0x6c, 0x54, 0xe9, 0x00, 0x67, 0x6d, 0x07, + 0xcc, 0x00, 0x67, 0x6e, 0x35, 0x71, 0x00, 0x67, + 0x6f, 0x0d, 0x0b, 0x00, 0x67, 0x70, 0x14, 0x22, + 0x00, 0x67, 0x71, 0x0c, 0x66, 0x00, 0x67, 0x72, + 0x13, 0xe3, 0x00, 0x67, 0x73, 0x13, 0xe7, 0x00, + 0x67, 0x74, 0x45, 0x6b, 0x00, 0x67, 0x75, 0x06, + 0x69, 0x00, 0x67, 0x76, 0x39, 0x1a, 0x00, 0x67, + 0x77, 0x0c, 0xfd, 0x00, 0x67, 0x7b, 0x39, 0x1b, + 0x00, 0x67, 0x7c, 0x14, 0x24, 0x00, 0x67, 0x7e, + 0x09, 0xa6, 0x00, 0x67, 0x7f, 0x0d, 0x58, 0x00, + 0x67, 0x80, 0x4b, 0xf5, 0x00, 0x67, 0x81, 0x42, + 0x00, 0x00, 0x67, 0x84, 0x54, 0xea, 0x00, 0x67, + 0x85, 0x14, 0x2a, 0x00, 0x67, 0x87, 0x0d, 0x8e, + 0x00, 0x67, 0x89, 0x14, 0x21, 0x00, 0x67, 0x8b, + 0x14, 0x27, 0x00, 0x67, 0x8c, 0x14, 0x26, 0x00, + 0x67, 0x8e, 0x54, 0xeb, 0x00, 0x67, 0x8f, 0x4b, + 0xf6, 0x00, 0x67, 0x90, 0x0a, 0x73, 0x00, 0x67, + 0x91, 0x4b, 0xf7, 0x00, 0x67, 0x92, 0x45, 0x6d, + 0x00, 0x67, 0x93, 0x42, 0x01, 0x00, 0x67, 0x95, + 0x0e, 0x9b, 0x00, 0x67, 0x96, 0x54, 0xec, 0x00, + 0x67, 0x97, 0x0f, 0x9b, 0x00, 0x67, 0x98, 0x42, + 0x02, 0x00, 0x67, 0x99, 0x54, 0xed, 0x00, 0x67, + 0x9a, 0x0e, 0x95, 0x00, 0x67, 0x9b, 0x42, 0x03, + 0x00, 0x67, 0x9c, 0x05, 0x4c, 0x00, 0x67, 0x9d, + 0x08, 0xac, 0x00, 0x67, 0xa0, 0x0f, 0xee, 0x00, + 0x67, 0xa1, 0x14, 0x29, 0x00, 0x67, 0xa2, 0x0a, + 0x3b, 0x00, 0x67, 0xa4, 0x4b, 0xf8, 0x00, 0x67, + 0xa6, 0x14, 0x28, 0x00, 0x67, 0xa9, 0x14, 0x23, + 0x00, 0x67, 0xaf, 0x07, 0x83, 0x00, 0x67, 0xb0, + 0x39, 0x1c, 0x00, 0x67, 0xb1, 0x4b, 0xf9, 0x00, + 0x67, 0xb2, 0x39, 0x1d, 0x00, 0x67, 0xb3, 0x14, + 0x2f, 0x00, 0x67, 0xb4, 0x14, 0x2d, 0x00, 0x67, + 0xb5, 0x4b, 0xfa, 0x00, 0x67, 0xb6, 0x05, 0x4d, + 0x00, 0x67, 0xb7, 0x14, 0x2b, 0x00, 0x67, 0xb8, + 0x14, 0x31, 0x00, 0x67, 0xb9, 0x14, 0x37, 0x00, + 0x67, 0xbb, 0x21, 0x2b, 0x00, 0x67, 0xbc, 0x54, + 0xee, 0x00, 0x67, 0xbd, 0x54, 0xef, 0x00, 0x67, + 0xbe, 0x4b, 0xfb, 0x00, 0x67, 0xc0, 0x21, 0x2d, + 0x00, 0x67, 0xc1, 0x0b, 0x28, 0x00, 0x67, 0xc2, + 0x54, 0xf0, 0x00, 0x67, 0xc3, 0x45, 0x71, 0x00, + 0x67, 0xc4, 0x0e, 0x11, 0x00, 0x67, 0xc5, 0x54, + 0xf1, 0x00, 0x67, 0xc6, 0x14, 0x39, 0x00, 0x67, + 0xc8, 0x45, 0x72, 0x00, 0x67, 0xc9, 0x54, 0xf2, + 0x00, 0x67, 0xca, 0x0d, 0x94, 0x00, 0x67, 0xce, + 0x14, 0x38, 0x00, 0x67, 0xcf, 0x0d, 0x26, 0x00, + 0x67, 0xd0, 0x0e, 0x6d, 0x00, 0x67, 0xd1, 0x05, + 0xf7, 0x00, 0x67, 0xd2, 0x45, 0x73, 0x00, 0x67, + 0xd3, 0x0a, 0x9b, 0x00, 0x67, 0xd4, 0x09, 0x4a, + 0x00, 0x67, 0xd7, 0x39, 0x1f, 0x00, 0x67, 0xd8, + 0x0b, 0xef, 0x00, 0x67, 0xd9, 0x39, 0x20, 0x00, + 0x67, 0xda, 0x0f, 0x18, 0x00, 0x67, 0xdb, 0x45, + 0x74, 0x00, 0x67, 0xdc, 0x54, 0xf3, 0x00, 0x67, + 0xdd, 0x14, 0x34, 0x00, 0x67, 0xde, 0x14, 0x33, + 0x00, 0x67, 0xe1, 0x54, 0xf4, 0x00, 0x67, 0xe2, + 0x14, 0x35, 0x00, 0x67, 0xe4, 0x14, 0x32, 0x00, + 0x67, 0xe6, 0x54, 0xf5, 0x00, 0x67, 0xe7, 0x14, + 0x3a, 0x00, 0x67, 0xe9, 0x14, 0x30, 0x00, 0x67, + 0xec, 0x14, 0x2e, 0x00, 0x67, 0xee, 0x14, 0x36, + 0x00, 0x67, 0xef, 0x14, 0x2c, 0x00, 0x67, 0xf0, + 0x39, 0x21, 0x00, 0x67, 0xf1, 0x0b, 0xaa, 0x00, + 0x67, 0xf2, 0x54, 0xf6, 0x00, 0x67, 0xf3, 0x0f, + 0x04, 0x00, 0x67, 0xf4, 0x08, 0xf2, 0x00, 0x67, + 0xf5, 0x08, 0x64, 0x00, 0x67, 0xf6, 0x54, 0xf7, + 0x00, 0x67, 0xf7, 0x45, 0x75, 0x00, 0x67, 0xf9, + 0x39, 0x1e, 0x00, 0x67, 0xfa, 0x1e, 0x9a, 0x00, + 0x67, 0xfb, 0x08, 0x2a, 0x00, 0x67, 0xfc, 0x42, + 0x04, 0x00, 0x67, 0xfe, 0x0e, 0x9d, 0x00, 0x67, + 0xff, 0x05, 0x9f, 0x00, 0x68, 0x01, 0x36, 0xf2, + 0x00, 0x68, 0x02, 0x0b, 0xea, 0x00, 0x68, 0x03, + 0x0c, 0xa2, 0x00, 0x68, 0x04, 0x04, 0xeb, 0x00, + 0x68, 0x05, 0x1e, 0x07, 0x00, 0x68, 0x10, 0x45, + 0x70, 0x00, 0x68, 0x13, 0x0a, 0x96, 0x00, 0x68, + 0x14, 0x54, 0xf8, 0x00, 0x68, 0x16, 0x0a, 0x58, + 0x00, 0x68, 0x17, 0x07, 0x00, 0x00, 0x68, 0x18, + 0x45, 0x79, 0x00, 0x68, 0x19, 0x54, 0xf9, 0x00, + 0x68, 0x1d, 0x42, 0x05, 0x00, 0x68, 0x1e, 0x14, + 0x3c, 0x00, 0x68, 0x1f, 0x45, 0x7a, 0x00, 0x68, + 0x21, 0x07, 0xcd, 0x00, 0x68, 0x22, 0x05, 0xda, + 0x00, 0x68, 0x27, 0x54, 0xfa, 0x00, 0x68, 0x28, + 0x4b, 0xfc, 0x00, 0x68, 0x29, 0x14, 0x3e, 0x00, + 0x68, 0x2a, 0x05, 0xd2, 0x00, 0x68, 0x2b, 0x14, + 0x44, 0x00, 0x68, 0x2c, 0x39, 0x22, 0x00, 0x68, + 0x2d, 0x45, 0x7b, 0x00, 0x68, 0x2f, 0x54, 0xfb, + 0x00, 0x68, 0x30, 0x39, 0x23, 0x00, 0x68, 0x31, + 0x39, 0x24, 0x00, 0x68, 0x32, 0x14, 0x41, 0x00, + 0x68, 0x33, 0x45, 0x7d, 0x00, 0x68, 0x34, 0x0a, + 0x97, 0x00, 0x68, 0x38, 0x05, 0xa9, 0x00, 0x68, + 0x39, 0x08, 0x1c, 0x00, 0x68, 0x3b, 0x45, 0x7e, + 0x00, 0x68, 0x3c, 0x05, 0xa8, 0x00, 0x68, 0x3d, + 0x08, 0x3f, 0x00, 0x68, 0x3e, 0x45, 0x7f, 0x00, + 0x68, 0x3f, 0x54, 0xfc, 0x00, 0x68, 0x40, 0x14, + 0x3f, 0x00, 0x68, 0x41, 0x07, 0x3b, 0x00, 0x68, + 0x42, 0x07, 0x21, 0x00, 0x68, 0x43, 0x0c, 0x67, + 0x00, 0x68, 0x44, 0x21, 0x2f, 0x00, 0x68, 0x45, + 0x45, 0x80, 0x00, 0x68, 0x46, 0x14, 0x3d, 0x00, + 0x68, 0x48, 0x04, 0x8a, 0x00, 0x68, 0x49, 0x45, + 0x81, 0x00, 0x68, 0x4a, 0x54, 0xfd, 0x00, 0x68, + 0x4c, 0x45, 0x82, 0x00, 0x68, 0x4d, 0x14, 0x40, + 0x00, 0x68, 0x4e, 0x14, 0x42, 0x00, 0x68, 0x50, + 0x06, 0xc5, 0x00, 0x68, 0x51, 0x07, 0x02, 0x00, + 0x68, 0x52, 0x37, 0xd3, 0x00, 0x68, 0x53, 0x05, + 0xf8, 0x00, 0x68, 0x54, 0x06, 0x65, 0x00, 0x68, + 0x55, 0x45, 0x83, 0x00, 0x68, 0x57, 0x45, 0x84, + 0x00, 0x68, 0x58, 0x54, 0xfe, 0x00, 0x68, 0x59, + 0x14, 0x45, 0x00, 0x68, 0x5b, 0x39, 0x25, 0x00, + 0x68, 0x5c, 0x08, 0x69, 0x00, 0x68, 0x5d, 0x0e, + 0x9f, 0x00, 0x68, 0x5f, 0x08, 0x85, 0x00, 0x68, + 0x63, 0x14, 0x46, 0x00, 0x68, 0x67, 0x0d, 0xa2, + 0x00, 0x68, 0x6b, 0x45, 0x86, 0x00, 0x68, 0x6e, + 0x45, 0x87, 0x00, 0x68, 0x6f, 0x54, 0xff, 0x00, + 0x68, 0x70, 0x55, 0x00, 0x00, 0x68, 0x71, 0x55, + 0x01, 0x00, 0x68, 0x72, 0x39, 0x26, 0x00, 0x68, + 0x74, 0x14, 0x52, 0x00, 0x68, 0x75, 0x39, 0x27, + 0x00, 0x68, 0x76, 0x05, 0x33, 0x00, 0x68, 0x77, + 0x14, 0x47, 0x00, 0x68, 0x79, 0x55, 0x02, 0x00, + 0x68, 0x7a, 0x39, 0x28, 0x00, 0x68, 0x7b, 0x55, + 0x03, 0x00, 0x68, 0x7c, 0x45, 0x88, 0x00, 0x68, + 0x7e, 0x14, 0x58, 0x00, 0x68, 0x7f, 0x14, 0x48, + 0x00, 0x68, 0x81, 0x0f, 0x8a, 0x00, 0x68, 0x82, + 0x45, 0x89, 0x00, 0x68, 0x83, 0x14, 0x4f, 0x00, + 0x68, 0x84, 0x39, 0x29, 0x00, 0x68, 0x85, 0x34, + 0x3f, 0x00, 0x68, 0x86, 0x4b, 0xfd, 0x00, 0x68, + 0x88, 0x55, 0x04, 0x00, 0x68, 0x8d, 0x14, 0x57, + 0x00, 0x68, 0x8e, 0x1e, 0x9c, 0x00, 0x68, 0x8f, + 0x14, 0x4a, 0x00, 0x68, 0x90, 0x45, 0x8a, 0x00, + 0x68, 0x93, 0x04, 0x78, 0x00, 0x68, 0x94, 0x14, + 0x4c, 0x00, 0x68, 0x96, 0x45, 0x8b, 0x00, 0x68, + 0x97, 0x07, 0xce, 0x00, 0x68, 0x98, 0x45, 0x8d, + 0x00, 0x68, 0x99, 0x45, 0x8e, 0x00, 0x68, 0x9a, + 0x45, 0x8f, 0x00, 0x68, 0x9b, 0x14, 0x4e, 0x00, + 0x68, 0x9c, 0x45, 0x90, 0x00, 0x68, 0x9d, 0x14, + 0x4d, 0x00, 0x68, 0x9f, 0x14, 0x49, 0x00, 0x68, + 0xa0, 0x14, 0x54, 0x00, 0x68, 0xa1, 0x55, 0x05, + 0x00, 0x68, 0xa2, 0x09, 0xa7, 0x00, 0x68, 0xa3, + 0x42, 0x06, 0x00, 0x68, 0xa5, 0x39, 0x2a, 0x00, + 0x68, 0xa6, 0x11, 0xbe, 0x00, 0x68, 0xa7, 0x07, + 0x9c, 0x00, 0x68, 0xa8, 0x0f, 0x66, 0x00, 0x68, + 0xa9, 0x55, 0x06, 0x00, 0x68, 0xaa, 0x45, 0x91, + 0x00, 0x68, 0xab, 0x45, 0x92, 0x00, 0x68, 0xad, + 0x14, 0x4b, 0x00, 0x68, 0xae, 0x55, 0x07, 0x00, + 0x68, 0xaf, 0x0c, 0x10, 0x00, 0x68, 0xb0, 0x05, + 0x81, 0x00, 0x68, 0xb1, 0x08, 0x1d, 0x00, 0x68, + 0xb2, 0x39, 0x2b, 0x00, 0x68, 0xb3, 0x14, 0x43, + 0x00, 0x68, 0xb4, 0x45, 0x93, 0x00, 0x68, 0xb5, + 0x14, 0x53, 0x00, 0x68, 0xb6, 0x05, 0xbf, 0x00, + 0x68, 0xb9, 0x14, 0x51, 0x00, 0x68, 0xba, 0x14, + 0x55, 0x00, 0x68, 0xbb, 0x45, 0x94, 0x00, 0x68, + 0xbc, 0x0c, 0x68, 0x00, 0x68, 0xc3, 0x45, 0x98, + 0x00, 0x68, 0xc4, 0x06, 0x3a, 0x00, 0x68, 0xc5, + 0x45, 0x99, 0x00, 0x68, 0xc6, 0x14, 0x73, 0x00, + 0x68, 0xc8, 0x20, 0xaf, 0x00, 0x68, 0xc9, 0x0e, + 0xd5, 0x00, 0x68, 0xca, 0x14, 0x5a, 0x00, 0x68, + 0xcb, 0x06, 0x39, 0x00, 0x68, 0xcc, 0x45, 0x9a, + 0x00, 0x68, 0xcd, 0x14, 0x61, 0x00, 0x68, 0xcf, + 0x21, 0x30, 0x00, 0x68, 0xd0, 0x39, 0x2c, 0x00, + 0x68, 0xd1, 0x55, 0x08, 0x00, 0x68, 0xd2, 0x0e, + 0x6e, 0x00, 0x68, 0xd3, 0x55, 0x09, 0x00, 0x68, + 0xd4, 0x14, 0x62, 0x00, 0x68, 0xd5, 0x14, 0x64, + 0x00, 0x68, 0xd6, 0x39, 0x2d, 0x00, 0x68, 0xd7, + 0x14, 0x68, 0x00, 0x68, 0xd8, 0x14, 0x5c, 0x00, + 0x68, 0xd9, 0x45, 0x9b, 0x00, 0x68, 0xda, 0x0b, + 0x68, 0x00, 0x68, 0xdc, 0x55, 0x0a, 0x00, 0x68, + 0xdd, 0x55, 0x0b, 0x00, 0x68, 0xdf, 0x0c, 0x69, + 0x00, 0x68, 0xe0, 0x14, 0x6c, 0x00, 0x68, 0xe1, + 0x14, 0x5f, 0x00, 0x68, 0xe3, 0x14, 0x69, 0x00, + 0x68, 0xe4, 0x45, 0x9c, 0x00, 0x68, 0xe5, 0x45, + 0x9d, 0x00, 0x68, 0xe7, 0x14, 0x63, 0x00, 0x68, + 0xe8, 0x39, 0x2e, 0x00, 0x68, 0xea, 0x55, 0x0c, + 0x00, 0x68, 0xeb, 0x4b, 0xfe, 0x00, 0x68, 0xec, + 0x45, 0x9e, 0x00, 0x68, 0xed, 0x39, 0x2f, 0x00, + 0x68, 0xee, 0x09, 0xff, 0x00, 0x68, 0xef, 0x14, + 0x6d, 0x00, 0x68, 0xf0, 0x39, 0x30, 0x00, 0x68, + 0xf1, 0x39, 0x31, 0x00, 0x68, 0xf2, 0x0a, 0x57, + 0x00, 0x68, 0xf5, 0x4b, 0xff, 0x00, 0x68, 0xf6, + 0x55, 0x0d, 0x00, 0x68, 0xf7, 0x45, 0x9f, 0x00, + 0x68, 0xf9, 0x14, 0x6b, 0x00, 0x68, 0xfa, 0x05, + 0xf9, 0x00, 0x68, 0xfb, 0x45, 0x95, 0x00, 0x68, + 0xfc, 0x39, 0x32, 0x00, 0x68, 0xfd, 0x55, 0x0e, + 0x00, 0x69, 0x00, 0x0f, 0xf6, 0x00, 0x69, 0x01, + 0x14, 0x59, 0x00, 0x69, 0x03, 0x45, 0xa0, 0x00, + 0x69, 0x04, 0x14, 0x67, 0x00, 0x69, 0x05, 0x04, + 0x9c, 0x00, 0x69, 0x06, 0x55, 0x0f, 0x00, 0x69, + 0x07, 0x45, 0xa1, 0x00, 0x69, 0x08, 0x14, 0x5b, + 0x00, 0x69, 0x09, 0x55, 0x10, 0x00, 0x69, 0x0a, + 0x42, 0x07, 0x00, 0x69, 0x0b, 0x0e, 0xc6, 0x00, + 0x69, 0x0c, 0x14, 0x60, 0x00, 0x69, 0x0d, 0x09, + 0xe8, 0x00, 0x69, 0x0e, 0x0b, 0xe3, 0x00, 0x69, + 0x0f, 0x14, 0x56, 0x00, 0x69, 0x10, 0x55, 0x11, + 0x00, 0x69, 0x11, 0x39, 0x33, 0x00, 0x69, 0x12, + 0x14, 0x66, 0x00, 0x69, 0x13, 0x39, 0x34, 0x00, + 0x69, 0x16, 0x55, 0x12, 0x00, 0x69, 0x17, 0x4c, + 0x00, 0x00, 0x69, 0x19, 0x0a, 0x40, 0x00, 0x69, + 0x1a, 0x14, 0x70, 0x00, 0x69, 0x1b, 0x05, 0xcf, + 0x00, 0x69, 0x1c, 0x07, 0x55, 0x00, 0x69, 0x21, + 0x14, 0x72, 0x00, 0x69, 0x22, 0x14, 0x5d, 0x00, + 0x69, 0x23, 0x14, 0x71, 0x00, 0x69, 0x25, 0x14, + 0x6a, 0x00, 0x69, 0x26, 0x14, 0x5e, 0x00, 0x69, + 0x28, 0x14, 0x6e, 0x00, 0x69, 0x2a, 0x14, 0x6f, + 0x00, 0x69, 0x30, 0x14, 0x80, 0x00, 0x69, 0x31, + 0x55, 0x13, 0x00, 0x69, 0x33, 0x4c, 0x01, 0x00, + 0x69, 0x34, 0x0c, 0xa6, 0x00, 0x69, 0x35, 0x39, + 0x35, 0x00, 0x69, 0x36, 0x14, 0x65, 0x00, 0x69, + 0x38, 0x4c, 0x02, 0x00, 0x69, 0x39, 0x14, 0x7c, + 0x00, 0x69, 0x3b, 0x39, 0x36, 0x00, 0x69, 0x3d, + 0x14, 0x7e, 0x00, 0x69, 0x3f, 0x0b, 0xf4, 0x00, + 0x69, 0x42, 0x42, 0x0a, 0x00, 0x69, 0x45, 0x55, + 0x14, 0x00, 0x69, 0x46, 0x45, 0xa5, 0x00, 0x69, + 0x49, 0x42, 0x08, 0x00, 0x69, 0x4a, 0x0f, 0x36, + 0x00, 0x69, 0x4e, 0x55, 0x15, 0x00, 0x69, 0x53, + 0x0d, 0xe8, 0x00, 0x69, 0x54, 0x14, 0x79, 0x00, + 0x69, 0x55, 0x0b, 0x2a, 0x00, 0x69, 0x57, 0x39, + 0x37, 0x00, 0x69, 0x59, 0x14, 0x7f, 0x00, 0x69, + 0x5a, 0x0a, 0xc1, 0x00, 0x69, 0x5b, 0x4c, 0x03, + 0x00, 0x69, 0x5c, 0x14, 0x76, 0x00, 0x69, 0x5d, + 0x14, 0x83, 0x00, 0x69, 0x5e, 0x14, 0x82, 0x00, + 0x69, 0x60, 0x0c, 0xc7, 0x00, 0x69, 0x61, 0x14, + 0x81, 0x00, 0x69, 0x62, 0x0c, 0xc2, 0x00, 0x69, + 0x63, 0x39, 0x38, 0x00, 0x69, 0x64, 0x42, 0x0b, + 0x00, 0x69, 0x65, 0x4c, 0x04, 0x00, 0x69, 0x66, + 0x55, 0x16, 0x00, 0x69, 0x68, 0x21, 0x32, 0x00, + 0x69, 0x69, 0x45, 0xa6, 0x00, 0x69, 0x6a, 0x14, + 0x85, 0x00, 0x69, 0x6b, 0x14, 0x78, 0x00, 0x69, + 0x6c, 0x45, 0xa7, 0x00, 0x69, 0x6d, 0x06, 0xc0, + 0x00, 0x69, 0x6e, 0x14, 0x7b, 0x00, 0x69, 0x6f, + 0x09, 0x67, 0x00, 0x69, 0x70, 0x55, 0x17, 0x00, + 0x69, 0x71, 0x55, 0x18, 0x00, 0x69, 0x72, 0x39, + 0x39, 0x00, 0x69, 0x73, 0x0d, 0x16, 0x00, 0x69, + 0x74, 0x14, 0x7d, 0x00, 0x69, 0x75, 0x06, 0xc3, + 0x00, 0x69, 0x77, 0x14, 0x75, 0x00, 0x69, 0x78, + 0x14, 0x77, 0x00, 0x69, 0x79, 0x14, 0x74, 0x00, + 0x69, 0x7a, 0x45, 0xa8, 0x00, 0x69, 0x7b, 0x55, + 0x19, 0x00, 0x69, 0x7c, 0x0f, 0xd6, 0x00, 0x69, + 0x7d, 0x05, 0xb8, 0x00, 0x69, 0x7e, 0x14, 0x7a, + 0x00, 0x69, 0x7f, 0x39, 0x3a, 0x00, 0x69, 0x80, + 0x39, 0x3b, 0x00, 0x69, 0x81, 0x14, 0x84, 0x00, + 0x69, 0x82, 0x05, 0x93, 0x00, 0x69, 0x86, 0x37, + 0x40, 0x00, 0x69, 0x8a, 0x08, 0x57, 0x00, 0x69, + 0x8d, 0x55, 0x1a, 0x00, 0x69, 0x8e, 0x04, 0xff, + 0x00, 0x69, 0x91, 0x14, 0x95, 0x00, 0x69, 0x92, + 0x45, 0xa9, 0x00, 0x69, 0x94, 0x0f, 0xd7, 0x00, + 0x69, 0x95, 0x14, 0x98, 0x00, 0x69, 0x96, 0x45, + 0xab, 0x00, 0x69, 0x98, 0x21, 0x34, 0x00, 0x69, + 0x9b, 0x0a, 0x00, 0x00, 0x69, 0x9c, 0x14, 0x97, + 0x00, 0x69, 0xa0, 0x14, 0x96, 0x00, 0x69, 0xa1, + 0x55, 0x1b, 0x00, 0x69, 0xa5, 0x42, 0x0c, 0x00, + 0x69, 0xa6, 0x39, 0x3c, 0x00, 0x69, 0xa7, 0x14, + 0x93, 0x00, 0x69, 0xa8, 0x4c, 0x05, 0x00, 0x69, + 0xab, 0x4c, 0x06, 0x00, 0x69, 0xad, 0x39, 0x3d, + 0x00, 0x69, 0xae, 0x14, 0x87, 0x00, 0x69, 0xaf, + 0x4c, 0x07, 0x00, 0x69, 0xb0, 0x45, 0xac, 0x00, + 0x69, 0xb1, 0x14, 0xa4, 0x00, 0x69, 0xb2, 0x14, + 0x86, 0x00, 0x69, 0xb4, 0x14, 0x99, 0x00, 0x69, + 0xb7, 0x39, 0x3e, 0x00, 0x69, 0xb8, 0x55, 0x1c, + 0x00, 0x69, 0xba, 0x45, 0xad, 0x00, 0x69, 0xbb, + 0x14, 0x91, 0x00, 0x69, 0xbc, 0x45, 0xae, 0x00, + 0x69, 0xbe, 0x14, 0x8c, 0x00, 0x69, 0xbf, 0x14, + 0x89, 0x00, 0x69, 0xc0, 0x45, 0xaf, 0x00, 0x69, + 0xc1, 0x14, 0x8a, 0x00, 0x69, 0xc3, 0x14, 0x92, + 0x00, 0x69, 0xc5, 0x55, 0x1d, 0x00, 0x69, 0xc7, + 0x1d, 0x33, 0x00, 0x69, 0xc8, 0x55, 0x1e, 0x00, + 0x69, 0xca, 0x14, 0x8f, 0x00, 0x69, 0xcb, 0x07, + 0xcf, 0x00, 0x69, 0xcc, 0x0b, 0xe4, 0x00, 0x69, + 0xcd, 0x0a, 0xe6, 0x00, 0x69, 0xce, 0x14, 0x8d, + 0x00, 0x69, 0xcf, 0x42, 0x0d, 0x00, 0x69, 0xd0, + 0x14, 0x88, 0x00, 0x69, 0xd1, 0x45, 0xb0, 0x00, + 0x69, 0xd3, 0x14, 0x8b, 0x00, 0x69, 0xd6, 0x39, + 0x3f, 0x00, 0x69, 0xd7, 0x39, 0x40, 0x00, 0x69, + 0xd8, 0x0f, 0x37, 0x00, 0x69, 0xd9, 0x0e, 0x98, + 0x00, 0x69, 0xdd, 0x14, 0x90, 0x00, 0x69, 0xde, + 0x14, 0x9a, 0x00, 0x69, 0xe2, 0x21, 0x35, 0x00, + 0x69, 0xe3, 0x45, 0xb4, 0x00, 0x69, 0xe5, 0x4c, + 0x08, 0x00, 0x69, 0xe7, 0x14, 0xa2, 0x00, 0x69, + 0xe8, 0x14, 0x9b, 0x00, 0x69, 0xe9, 0x42, 0x10, + 0x00, 0x69, 0xea, 0x34, 0x11, 0x00, 0x69, 0xeb, + 0x14, 0xa8, 0x00, 0x69, 0xed, 0x14, 0xa6, 0x00, + 0x69, 0xee, 0x45, 0xb5, 0x00, 0x69, 0xef, 0x45, + 0xb6, 0x00, 0x69, 0xf1, 0x4c, 0x09, 0x00, 0x69, + 0xf2, 0x14, 0xa1, 0x00, 0x69, 0xf3, 0x45, 0xb7, + 0x00, 0x69, 0xf4, 0x45, 0xb9, 0x00, 0x69, 0xf5, + 0x42, 0x11, 0x00, 0x69, 0xf6, 0x37, 0x3f, 0x00, + 0x69, 0xf9, 0x14, 0xa0, 0x00, 0x69, 0xfb, 0x0b, + 0xec, 0x00, 0x69, 0xfd, 0x0a, 0xe7, 0x00, 0x69, + 0xfe, 0x45, 0xba, 0x00, 0x69, 0xff, 0x14, 0x9e, + 0x00, 0x6a, 0x00, 0x55, 0x20, 0x00, 0x6a, 0x01, + 0x39, 0x41, 0x00, 0x6a, 0x02, 0x14, 0x9c, 0x00, + 0x6a, 0x03, 0x55, 0x21, 0x00, 0x6a, 0x05, 0x14, + 0xa3, 0x00, 0x6a, 0x0a, 0x14, 0xa9, 0x00, 0x6a, + 0x0b, 0x0d, 0x89, 0x00, 0x6a, 0x0c, 0x14, 0xaf, + 0x00, 0x6a, 0x0f, 0x39, 0x42, 0x00, 0x6a, 0x11, + 0x45, 0xbb, 0x00, 0x6a, 0x12, 0x14, 0xaa, 0x00, + 0x6a, 0x13, 0x14, 0xad, 0x00, 0x6a, 0x14, 0x14, + 0xa7, 0x00, 0x6a, 0x15, 0x39, 0x43, 0x00, 0x6a, + 0x17, 0x0b, 0xb2, 0x00, 0x6a, 0x19, 0x0d, 0xaa, + 0x00, 0x6a, 0x1a, 0x45, 0xbc, 0x00, 0x6a, 0x1b, + 0x14, 0x9d, 0x00, 0x6a, 0x1d, 0x45, 0xbd, 0x00, + 0x6a, 0x1e, 0x14, 0xa5, 0x00, 0x6a, 0x1f, 0x09, + 0xa8, 0x00, 0x6a, 0x20, 0x55, 0x22, 0x00, 0x6a, + 0x21, 0x0e, 0xdb, 0x00, 0x6a, 0x22, 0x14, 0xb9, + 0x00, 0x6a, 0x23, 0x14, 0xac, 0x00, 0x6a, 0x24, + 0x55, 0x23, 0x00, 0x6a, 0x28, 0x39, 0x44, 0x00, + 0x6a, 0x29, 0x07, 0x56, 0x00, 0x6a, 0x2a, 0x05, + 0x23, 0x00, 0x6a, 0x2b, 0x05, 0xbd, 0x00, 0x6a, + 0x2e, 0x14, 0x94, 0x00, 0x6a, 0x30, 0x21, 0x36, + 0x00, 0x6a, 0x32, 0x45, 0xbf, 0x00, 0x6a, 0x33, + 0x45, 0xc0, 0x00, 0x6a, 0x34, 0x39, 0x45, 0x00, + 0x6a, 0x35, 0x09, 0xa9, 0x00, 0x6a, 0x36, 0x14, + 0xb1, 0x00, 0x6a, 0x37, 0x55, 0x24, 0x00, 0x6a, + 0x38, 0x14, 0xb8, 0x00, 0x6a, 0x39, 0x09, 0x25, + 0x00, 0x6a, 0x3a, 0x05, 0xd0, 0x00, 0x6a, 0x3b, + 0x42, 0x13, 0x00, 0x6a, 0x3d, 0x0b, 0x6c, 0x00, + 0x6a, 0x3e, 0x39, 0x46, 0x00, 0x6a, 0x3f, 0x45, + 0xc1, 0x00, 0x6a, 0x44, 0x14, 0xae, 0x00, 0x6a, + 0x45, 0x39, 0x47, 0x00, 0x6a, 0x46, 0x21, 0x38, + 0x00, 0x6a, 0x47, 0x14, 0xb3, 0x00, 0x6a, 0x48, + 0x14, 0xb7, 0x00, 0x6a, 0x49, 0x45, 0xc2, 0x00, + 0x6a, 0x4a, 0x4c, 0x0a, 0x00, 0x6a, 0x4b, 0x06, + 0xae, 0x00, 0x6a, 0x4e, 0x45, 0xc4, 0x00, 0x6a, + 0x50, 0x39, 0x48, 0x00, 0x6a, 0x51, 0x39, 0x49, + 0x00, 0x6a, 0x52, 0x45, 0xc5, 0x00, 0x6a, 0x54, + 0x3c, 0x34, 0x00, 0x6a, 0x55, 0x4c, 0x0b, 0x00, + 0x6a, 0x56, 0x39, 0x4a, 0x00, 0x6a, 0x58, 0x06, + 0x66, 0x00, 0x6a, 0x59, 0x14, 0xb5, 0x00, 0x6a, + 0x5b, 0x39, 0x4b, 0x00, 0x6a, 0x5f, 0x06, 0x3b, + 0x00, 0x6a, 0x61, 0x0c, 0xa3, 0x00, 0x6a, 0x62, + 0x14, 0xb4, 0x00, 0x6a, 0x64, 0x45, 0xc6, 0x00, + 0x6a, 0x66, 0x14, 0xb6, 0x00, 0x6a, 0x67, 0x4c, + 0x0c, 0x00, 0x6a, 0x6a, 0x55, 0x26, 0x00, 0x6a, + 0x6b, 0x21, 0x37, 0x00, 0x6a, 0x71, 0x4c, 0x0d, + 0x00, 0x6a, 0x72, 0x14, 0xb0, 0x00, 0x6a, 0x73, + 0x21, 0x39, 0x00, 0x6a, 0x78, 0x14, 0xb2, 0x00, + 0x6a, 0x7a, 0x45, 0xc3, 0x00, 0x6a, 0x7e, 0x21, + 0x3a, 0x00, 0x6a, 0x7f, 0x05, 0xbe, 0x00, 0x6a, + 0x80, 0x0b, 0x87, 0x00, 0x6a, 0x81, 0x55, 0x27, + 0x00, 0x6a, 0x83, 0x39, 0x4c, 0x00, 0x6a, 0x84, + 0x14, 0xbd, 0x00, 0x6a, 0x86, 0x55, 0x28, 0x00, + 0x6a, 0x87, 0x55, 0x29, 0x00, 0x6a, 0x89, 0x39, + 0x4d, 0x00, 0x6a, 0x8b, 0x45, 0xc8, 0x00, 0x6a, + 0x8d, 0x14, 0xbb, 0x00, 0x6a, 0x8e, 0x07, 0x9d, + 0x00, 0x6a, 0x90, 0x14, 0xba, 0x00, 0x6a, 0x91, + 0x39, 0x4e, 0x00, 0x6a, 0x94, 0x42, 0x15, 0x00, + 0x6a, 0x97, 0x14, 0xc0, 0x00, 0x6a, 0x9b, 0x55, + 0x2a, 0x00, 0x6a, 0x9c, 0x14, 0x3b, 0x00, 0x6a, + 0x9d, 0x39, 0x4f, 0x00, 0x6a, 0x9e, 0x39, 0x50, + 0x00, 0x6a, 0x9f, 0x39, 0x51, 0x00, 0x6a, 0xa0, + 0x14, 0xbc, 0x00, 0x6a, 0xa1, 0x45, 0xca, 0x00, + 0x6a, 0xa2, 0x14, 0xbe, 0x00, 0x6a, 0xa3, 0x14, + 0xbf, 0x00, 0x6a, 0xa5, 0x42, 0x16, 0x00, 0x6a, + 0xaa, 0x14, 0xcb, 0x00, 0x6a, 0xab, 0x45, 0xcc, + 0x00, 0x6a, 0xac, 0x14, 0xc7, 0x00, 0x6a, 0xae, + 0x14, 0x50, 0x00, 0x6a, 0xaf, 0x4c, 0x0e, 0x00, + 0x6a, 0xb0, 0x55, 0x2b, 0x00, 0x6a, 0xb1, 0x55, + 0x2c, 0x00, 0x6a, 0xb3, 0x14, 0xc6, 0x00, 0x6a, + 0xb4, 0x55, 0x2d, 0x00, 0x6a, 0xb8, 0x14, 0xc5, + 0x00, 0x6a, 0xbb, 0x14, 0xc2, 0x00, 0x6a, 0xbd, + 0x45, 0xcd, 0x00, 0x6a, 0xbe, 0x55, 0x2e, 0x00, + 0x6a, 0xbf, 0x55, 0x2f, 0x00, 0x6a, 0xc1, 0x14, + 0xab, 0x00, 0x6a, 0xc2, 0x14, 0xc4, 0x00, 0x6a, + 0xc3, 0x14, 0xc3, 0x00, 0x6a, 0xc6, 0x45, 0xce, + 0x00, 0x6a, 0xc8, 0x4c, 0x0f, 0x00, 0x6a, 0xc9, + 0x4c, 0x10, 0x00, 0x6a, 0xcc, 0x55, 0x30, 0x00, + 0x6a, 0xd0, 0x45, 0xd0, 0x00, 0x6a, 0xd1, 0x14, + 0xc9, 0x00, 0x6a, 0xd3, 0x0f, 0xcc, 0x00, 0x6a, + 0xd4, 0x45, 0xcf, 0x00, 0x6a, 0xd5, 0x55, 0x31, + 0x00, 0x6a, 0xd6, 0x55, 0x32, 0x00, 0x6a, 0xda, + 0x14, 0xcc, 0x00, 0x6a, 0xdb, 0x1d, 0xf1, 0x00, + 0x6a, 0xdc, 0x39, 0x52, 0x00, 0x6a, 0xdd, 0x45, + 0xd1, 0x00, 0x6a, 0xde, 0x14, 0xc8, 0x00, 0x6a, + 0xdf, 0x14, 0xca, 0x00, 0x6a, 0xe2, 0x21, 0x3b, + 0x00, 0x6a, 0xe4, 0x21, 0x3c, 0x00, 0x6a, 0xe7, + 0x39, 0x53, 0x00, 0x6a, 0xe8, 0x0d, 0x3b, 0x00, + 0x6a, 0xea, 0x14, 0xcd, 0x00, 0x6a, 0xec, 0x39, + 0x54, 0x00, 0x6a, 0xf0, 0x55, 0x33, 0x00, 0x6a, + 0xf1, 0x45, 0xd4, 0x00, 0x6a, 0xf2, 0x45, 0xd5, + 0x00, 0x6a, 0xf3, 0x45, 0xd6, 0x00, 0x6a, 0xf8, + 0x4e, 0xb8, 0x00, 0x6a, 0xfa, 0x14, 0xd1, 0x00, + 0x6a, 0xfb, 0x14, 0xce, 0x00, 0x6a, 0xfc, 0x55, + 0x34, 0x00, 0x6a, 0xfd, 0x45, 0xd7, 0x00, 0x6b, + 0x02, 0x55, 0x35, 0x00, 0x6b, 0x03, 0x4c, 0x11, + 0x00, 0x6b, 0x04, 0x34, 0x50, 0x00, 0x6b, 0x05, + 0x14, 0xcf, 0x00, 0x6b, 0x06, 0x55, 0x36, 0x00, + 0x6b, 0x07, 0x55, 0x37, 0x00, 0x6b, 0x09, 0x55, + 0x38, 0x00, 0x6b, 0x0a, 0x14, 0x9f, 0x00, 0x6b, + 0x0b, 0x45, 0xd9, 0x00, 0x6b, 0x0f, 0x45, 0xda, + 0x00, 0x6b, 0x10, 0x45, 0xdb, 0x00, 0x6b, 0x11, + 0x45, 0xdc, 0x00, 0x6b, 0x12, 0x14, 0xd2, 0x00, + 0x6b, 0x16, 0x14, 0xd3, 0x00, 0x6b, 0x17, 0x45, + 0xde, 0x00, 0x6b, 0x1b, 0x42, 0x18, 0x00, 0x6b, + 0x1d, 0x04, 0xd7, 0x00, 0x6b, 0x1e, 0x39, 0x55, + 0x00, 0x6b, 0x1f, 0x14, 0xd5, 0x00, 0x6b, 0x20, + 0x07, 0x3d, 0x00, 0x6b, 0x21, 0x08, 0xcd, 0x00, + 0x6b, 0x23, 0x06, 0xcd, 0x00, 0x6b, 0x24, 0x39, + 0x56, 0x00, 0x6b, 0x27, 0x05, 0x24, 0x00, 0x6b, + 0x28, 0x55, 0x39, 0x00, 0x6b, 0x2b, 0x55, 0x3a, + 0x00, 0x6b, 0x2c, 0x42, 0x19, 0x00, 0x6b, 0x2f, + 0x45, 0xe0, 0x00, 0x6b, 0x32, 0x0f, 0x49, 0x00, + 0x6b, 0x35, 0x39, 0x57, 0x00, 0x6b, 0x36, 0x55, + 0x3b, 0x00, 0x6b, 0x37, 0x14, 0xd7, 0x00, 0x6b, + 0x38, 0x14, 0xd6, 0x00, 0x6b, 0x39, 0x14, 0xd9, + 0x00, 0x6b, 0x3a, 0x06, 0x57, 0x00, 0x6b, 0x3b, + 0x4c, 0x12, 0x00, 0x6b, 0x3d, 0x06, 0xce, 0x00, + 0x6b, 0x3e, 0x05, 0xfa, 0x00, 0x6b, 0x3f, 0x4c, + 0x13, 0x00, 0x6b, 0x43, 0x14, 0xdc, 0x00, 0x6b, + 0x46, 0x39, 0x58, 0x00, 0x6b, 0x47, 0x14, 0xdb, + 0x00, 0x6b, 0x49, 0x14, 0xdd, 0x00, 0x6b, 0x4a, + 0x45, 0xe1, 0x00, 0x6b, 0x4c, 0x05, 0x4e, 0x00, + 0x6b, 0x4d, 0x55, 0x3c, 0x00, 0x6b, 0x4e, 0x0b, + 0x75, 0x00, 0x6b, 0x50, 0x14, 0xde, 0x00, 0x6b, + 0x52, 0x55, 0x3d, 0x00, 0x6b, 0x53, 0x05, 0xfb, + 0x00, 0x6b, 0x54, 0x14, 0xe0, 0x00, 0x6b, 0x56, + 0x39, 0x59, 0x00, 0x6b, 0x58, 0x45, 0xe2, 0x00, + 0x6b, 0x59, 0x14, 0xdf, 0x00, 0x6b, 0x5b, 0x14, + 0xe1, 0x00, 0x6b, 0x5d, 0x55, 0x3e, 0x00, 0x6b, + 0x5f, 0x14, 0xe2, 0x00, 0x6b, 0x60, 0x39, 0x5a, + 0x00, 0x6b, 0x61, 0x14, 0xe3, 0x00, 0x6b, 0x62, + 0x08, 0xad, 0x00, 0x6b, 0x63, 0x0a, 0x59, 0x00, + 0x6b, 0x64, 0x08, 0x11, 0x00, 0x6b, 0x65, 0x34, + 0x4a, 0x00, 0x6b, 0x66, 0x0d, 0xe2, 0x00, 0x6b, + 0x67, 0x42, 0x1a, 0x00, 0x6b, 0x69, 0x0e, 0x32, + 0x00, 0x6b, 0x6a, 0x0f, 0xea, 0x00, 0x6b, 0x6b, + 0x55, 0x3f, 0x00, 0x6b, 0x6c, 0x45, 0xe3, 0x00, + 0x6b, 0x6e, 0x55, 0x40, 0x00, 0x6b, 0x6f, 0x08, + 0xc3, 0x00, 0x6b, 0x70, 0x55, 0x41, 0x00, 0x6b, + 0x72, 0x35, 0xd9, 0x00, 0x6b, 0x73, 0x08, 0x40, + 0x00, 0x6b, 0x74, 0x0f, 0xba, 0x00, 0x6b, 0x75, + 0x45, 0xe4, 0x00, 0x6b, 0x77, 0x34, 0x56, 0x00, + 0x6b, 0x78, 0x14, 0xe4, 0x00, 0x6b, 0x79, 0x14, + 0xe5, 0x00, 0x6b, 0x7a, 0x45, 0xe5, 0x00, 0x6b, + 0x7b, 0x08, 0xae, 0x00, 0x6b, 0x7d, 0x4c, 0x14, + 0x00, 0x6b, 0x7e, 0x4c, 0x15, 0x00, 0x6b, 0x7f, + 0x14, 0xe6, 0x00, 0x6b, 0x80, 0x14, 0xe7, 0x00, + 0x6b, 0x81, 0x45, 0xe6, 0x00, 0x6b, 0x82, 0x39, + 0x5b, 0x00, 0x6b, 0x83, 0x14, 0xe9, 0x00, 0x6b, + 0x84, 0x14, 0xe8, 0x00, 0x6b, 0x85, 0x55, 0x42, + 0x00, 0x6b, 0x86, 0x0e, 0x86, 0x00, 0x6b, 0x89, + 0x09, 0x68, 0x00, 0x6b, 0x8a, 0x09, 0x18, 0x00, + 0x6b, 0x8b, 0x08, 0x92, 0x00, 0x6b, 0x8d, 0x14, + 0xea, 0x00, 0x6b, 0x95, 0x14, 0xec, 0x00, 0x6b, + 0x96, 0x09, 0xe9, 0x00, 0x6b, 0x97, 0x55, 0x43, + 0x00, 0x6b, 0x98, 0x14, 0xeb, 0x00, 0x6b, 0x9b, + 0x45, 0xe7, 0x00, 0x6b, 0x9e, 0x14, 0xed, 0x00, + 0x6b, 0x9f, 0x55, 0x44, 0x00, 0x6b, 0xa0, 0x55, + 0x45, 0x00, 0x6b, 0xa2, 0x55, 0x46, 0x00, 0x6b, + 0xa3, 0x55, 0x47, 0x00, 0x6b, 0xa4, 0x14, 0xee, + 0x00, 0x6b, 0xa8, 0x55, 0x48, 0x00, 0x6b, 0xa9, + 0x42, 0x1b, 0x00, 0x6b, 0xaa, 0x14, 0xef, 0x00, + 0x6b, 0xab, 0x14, 0xf0, 0x00, 0x6b, 0xac, 0x55, + 0x49, 0x00, 0x6b, 0xad, 0x42, 0x1c, 0x00, 0x6b, + 0xae, 0x45, 0xe8, 0x00, 0x6b, 0xaf, 0x14, 0xf1, + 0x00, 0x6b, 0xb0, 0x4c, 0x16, 0x00, 0x6b, 0xb1, + 0x14, 0xf3, 0x00, 0x6b, 0xb2, 0x14, 0xf2, 0x00, + 0x6b, 0xb3, 0x14, 0xf4, 0x00, 0x6b, 0xb4, 0x05, + 0x25, 0x00, 0x6b, 0xb5, 0x0b, 0x88, 0x00, 0x6b, + 0xb7, 0x14, 0xf5, 0x00, 0x6b, 0xb8, 0x55, 0x4a, + 0x00, 0x6b, 0xb9, 0x55, 0x4b, 0x00, 0x6b, 0xba, + 0x34, 0x20, 0x00, 0x6b, 0xbb, 0x05, 0xaa, 0x00, + 0x6b, 0xbc, 0x14, 0xf6, 0x00, 0x6b, 0xbd, 0x45, + 0xea, 0x00, 0x6b, 0xbe, 0x39, 0x5c, 0x00, 0x6b, + 0xbf, 0x0c, 0x3c, 0x00, 0x6b, 0xc0, 0x11, 0x9d, + 0x00, 0x6b, 0xc3, 0x55, 0x4c, 0x00, 0x6b, 0xc4, + 0x55, 0x4d, 0x00, 0x6b, 0xc5, 0x06, 0x3d, 0x00, + 0x6b, 0xc6, 0x14, 0xf7, 0x00, 0x6b, 0xc7, 0x45, + 0xeb, 0x00, 0x6b, 0xc8, 0x45, 0xec, 0x00, 0x6b, + 0xc9, 0x45, 0xed, 0x00, 0x6b, 0xcb, 0x14, 0xf8, + 0x00, 0x6b, 0xcc, 0x37, 0x44, 0x00, 0x6b, 0xcd, + 0x0e, 0x3c, 0x00, 0x6b, 0xce, 0x0e, 0x96, 0x00, + 0x6b, 0xcf, 0x34, 0x4c, 0x00, 0x6b, 0xd2, 0x0c, + 0x9f, 0x00, 0x6b, 0xd3, 0x14, 0xf9, 0x00, 0x6b, + 0xd4, 0x0d, 0x7a, 0x00, 0x6b, 0xd6, 0x21, 0x3d, + 0x00, 0x6b, 0xd7, 0x42, 0x1d, 0x00, 0x6b, 0xd8, + 0x0d, 0x8f, 0x00, 0x6b, 0xda, 0x45, 0xee, 0x00, + 0x6b, 0xdb, 0x0e, 0xdf, 0x00, 0x6b, 0xdf, 0x14, + 0xfa, 0x00, 0x6b, 0xe1, 0x39, 0x5d, 0x00, 0x6b, + 0xe3, 0x55, 0x4e, 0x00, 0x6b, 0xe6, 0x45, 0xef, + 0x00, 0x6b, 0xe7, 0x45, 0xf0, 0x00, 0x6b, 0xeb, + 0x14, 0xfc, 0x00, 0x6b, 0xec, 0x14, 0xfb, 0x00, + 0x6b, 0xee, 0x45, 0xf1, 0x00, 0x6b, 0xef, 0x14, + 0xfe, 0x00, 0x6b, 0xf1, 0x39, 0x5e, 0x00, 0x6b, + 0xf3, 0x14, 0xfd, 0x00, 0x6b, 0xf7, 0x4c, 0x17, + 0x00, 0x6b, 0xf9, 0x4c, 0x18, 0x00, 0x6b, 0xff, + 0x42, 0x1e, 0x00, 0x6c, 0x02, 0x45, 0xf2, 0x00, + 0x6c, 0x04, 0x4c, 0x19, 0x00, 0x6c, 0x05, 0x42, + 0x1f, 0x00, 0x6c, 0x08, 0x15, 0x00, 0x00, 0x6c, + 0x09, 0x4c, 0x1a, 0x00, 0x6c, 0x0a, 0x45, 0xf3, + 0x00, 0x6c, 0x0d, 0x4c, 0x1b, 0x00, 0x6c, 0x0e, + 0x45, 0xf4, 0x00, 0x6c, 0x0f, 0x08, 0xaf, 0x00, + 0x6c, 0x10, 0x39, 0x5f, 0x00, 0x6c, 0x11, 0x0e, + 0xbd, 0x00, 0x6c, 0x12, 0x55, 0x4f, 0x00, 0x6c, + 0x13, 0x15, 0x01, 0x00, 0x6c, 0x14, 0x15, 0x02, + 0x00, 0x6c, 0x17, 0x06, 0x3e, 0x00, 0x6c, 0x19, + 0x55, 0x50, 0x00, 0x6c, 0x1b, 0x15, 0x03, 0x00, + 0x6c, 0x1f, 0x55, 0x51, 0x00, 0x6c, 0x23, 0x15, + 0x05, 0x00, 0x6c, 0x24, 0x15, 0x04, 0x00, 0x6c, + 0x26, 0x55, 0x52, 0x00, 0x6c, 0x27, 0x55, 0x53, + 0x00, 0x6c, 0x28, 0x55, 0x54, 0x00, 0x6c, 0x2c, + 0x4c, 0x1c, 0x00, 0x6c, 0x2e, 0x55, 0x55, 0x00, + 0x6c, 0x33, 0x39, 0x60, 0x00, 0x6c, 0x34, 0x0a, + 0x2b, 0x00, 0x6c, 0x35, 0x39, 0x61, 0x00, 0x6c, + 0x36, 0x45, 0xf5, 0x00, 0x6c, 0x37, 0x0d, 0xab, + 0x00, 0x6c, 0x38, 0x04, 0xec, 0x00, 0x6c, 0x3a, + 0x4f, 0x55, 0x00, 0x6c, 0x3b, 0x55, 0x56, 0x00, + 0x6c, 0x3e, 0x0d, 0x59, 0x00, 0x6c, 0x3f, 0x21, + 0x3e, 0x00, 0x6c, 0x40, 0x0c, 0x11, 0x00, 0x6c, + 0x41, 0x09, 0x4b, 0x00, 0x6c, 0x42, 0x06, 0x7b, + 0x00, 0x6c, 0x4a, 0x4c, 0x1d, 0x00, 0x6c, 0x4b, + 0x55, 0x57, 0x00, 0x6c, 0x4d, 0x45, 0xf7, 0x00, + 0x6c, 0x4e, 0x0d, 0x5a, 0x00, 0x6c, 0x4f, 0x55, + 0x58, 0x00, 0x6c, 0x50, 0x08, 0xda, 0x00, 0x6c, + 0x52, 0x4c, 0x1e, 0x00, 0x6c, 0x54, 0x4c, 0x1f, + 0x00, 0x6c, 0x55, 0x15, 0x07, 0x00, 0x6c, 0x57, + 0x05, 0xfc, 0x00, 0x6c, 0x59, 0x39, 0x63, 0x00, + 0x6c, 0x5a, 0x05, 0x1a, 0x00, 0x6c, 0x5b, 0x45, + 0xf8, 0x00, 0x6c, 0x5c, 0x21, 0x3f, 0x00, 0x6c, + 0x5d, 0x0c, 0xca, 0x00, 0x6c, 0x5e, 0x15, 0x06, + 0x00, 0x6c, 0x5f, 0x07, 0xd0, 0x00, 0x6c, 0x60, + 0x0b, 0x91, 0x00, 0x6c, 0x62, 0x15, 0x08, 0x00, + 0x6c, 0x67, 0x46, 0x0a, 0x00, 0x6c, 0x68, 0x15, + 0x10, 0x00, 0x6c, 0x6a, 0x15, 0x09, 0x00, 0x6c, + 0x6b, 0x55, 0x59, 0x00, 0x6c, 0x6d, 0x45, 0xf9, + 0x00, 0x6c, 0x6f, 0x21, 0x41, 0x00, 0x6c, 0x70, + 0x0b, 0x21, 0x00, 0x6c, 0x72, 0x06, 0x7c, 0x00, + 0x6c, 0x73, 0x15, 0x11, 0x00, 0x6c, 0x74, 0x42, + 0x20, 0x00, 0x6c, 0x76, 0x39, 0x64, 0x00, 0x6c, + 0x78, 0x55, 0x5a, 0x00, 0x6c, 0x79, 0x4c, 0x20, + 0x00, 0x6c, 0x7a, 0x07, 0x3e, 0x00, 0x6c, 0x7b, + 0x39, 0x65, 0x00, 0x6c, 0x7d, 0x06, 0x3f, 0x00, + 0x6c, 0x7e, 0x15, 0x0f, 0x00, 0x6c, 0x81, 0x15, + 0x0d, 0x00, 0x6c, 0x82, 0x15, 0x0a, 0x00, 0x6c, + 0x83, 0x0f, 0x4a, 0x00, 0x6c, 0x84, 0x45, 0xfa, + 0x00, 0x6c, 0x85, 0x39, 0x66, 0x00, 0x6c, 0x86, + 0x21, 0x40, 0x00, 0x6c, 0x87, 0x55, 0x5b, 0x00, + 0x6c, 0x88, 0x0b, 0xdc, 0x00, 0x6c, 0x89, 0x45, + 0xfb, 0x00, 0x6c, 0x8c, 0x0c, 0xb1, 0x00, 0x6c, + 0x8d, 0x15, 0x0b, 0x00, 0x6c, 0x90, 0x15, 0x13, + 0x00, 0x6c, 0x92, 0x15, 0x12, 0x00, 0x6c, 0x93, + 0x06, 0xf9, 0x00, 0x6c, 0x94, 0x45, 0xfd, 0x00, + 0x6c, 0x95, 0x39, 0x67, 0x00, 0x6c, 0x96, 0x05, + 0x2d, 0x00, 0x6c, 0x97, 0x45, 0xfe, 0x00, 0x6c, + 0x98, 0x42, 0x21, 0x00, 0x6c, 0x99, 0x08, 0x2b, + 0x00, 0x6c, 0x9a, 0x15, 0x0c, 0x00, 0x6c, 0x9b, + 0x15, 0x0e, 0x00, 0x6c, 0x9c, 0x39, 0x68, 0x00, + 0x6c, 0x9f, 0x55, 0x5c, 0x00, 0x6c, 0xa1, 0x0e, + 0x85, 0x00, 0x6c, 0xa2, 0x0b, 0x54, 0x00, 0x6c, + 0xaa, 0x37, 0x49, 0x00, 0x6c, 0xab, 0x0e, 0xa5, + 0x00, 0x6c, 0xac, 0x4c, 0x21, 0x00, 0x6c, 0xad, + 0x45, 0xff, 0x00, 0x6c, 0xae, 0x15, 0x1b, 0x00, + 0x6c, 0xb0, 0x55, 0x5d, 0x00, 0x6c, 0xb1, 0x15, + 0x1c, 0x00, 0x6c, 0xb2, 0x55, 0x5e, 0x00, 0x6c, + 0xb3, 0x05, 0x4f, 0x00, 0x6c, 0xb4, 0x4c, 0x22, + 0x00, 0x6c, 0xb8, 0x0d, 0xf8, 0x00, 0x6c, 0xb9, + 0x0f, 0x09, 0x00, 0x6c, 0xba, 0x15, 0x1e, 0x00, + 0x6c, 0xbb, 0x08, 0xcf, 0x00, 0x6c, 0xbc, 0x09, + 0xaa, 0x00, 0x6c, 0xbd, 0x15, 0x17, 0x00, 0x6c, + 0xbe, 0x15, 0x1d, 0x00, 0x6c, 0xbf, 0x35, 0x58, + 0x00, 0x6c, 0xc1, 0x06, 0xaf, 0x00, 0x6c, 0xc2, + 0x46, 0x00, 0x00, 0x6c, 0xc4, 0x15, 0x14, 0x00, + 0x6c, 0xc5, 0x15, 0x19, 0x00, 0x6c, 0xc6, 0x42, + 0x23, 0x00, 0x6c, 0xc9, 0x0a, 0x98, 0x00, 0x6c, + 0xca, 0x0d, 0x27, 0x00, 0x6c, 0xcc, 0x0d, 0x7b, + 0x00, 0x6c, 0xcd, 0x55, 0x5f, 0x00, 0x6c, 0xcf, + 0x55, 0x60, 0x00, 0x6c, 0xd0, 0x39, 0x69, 0x00, + 0x6c, 0xd1, 0x55, 0x61, 0x00, 0x6c, 0xd2, 0x4c, + 0x23, 0x00, 0x6c, 0xd3, 0x15, 0x16, 0x00, 0x6c, + 0xd4, 0x39, 0x6a, 0x00, 0x6c, 0xd5, 0x0e, 0x4f, + 0x00, 0x6c, 0xd6, 0x39, 0x6b, 0x00, 0x6c, 0xd7, + 0x15, 0x18, 0x00, 0x6c, 0xd9, 0x15, 0x21, 0x00, + 0x6c, 0xda, 0x21, 0x42, 0x00, 0x6c, 0xdb, 0x15, + 0x1f, 0x00, 0x6c, 0xdc, 0x46, 0x02, 0x00, 0x6c, + 0xdd, 0x15, 0x1a, 0x00, 0x6c, 0xe0, 0x39, 0x6c, + 0x00, 0x6c, 0xe1, 0x0e, 0x50, 0x00, 0x6c, 0xe2, + 0x0c, 0xfe, 0x00, 0x6c, 0xe3, 0x06, 0x7d, 0x00, + 0x6c, 0xe5, 0x0c, 0x1f, 0x00, 0x6c, 0xe7, 0x55, + 0x62, 0x00, 0x6c, 0xe8, 0x0b, 0xab, 0x00, 0x6c, + 0xe9, 0x46, 0x03, 0x00, 0x6c, 0xea, 0x15, 0x22, + 0x00, 0x6c, 0xeb, 0x39, 0x6d, 0x00, 0x6c, 0xec, + 0x39, 0x6e, 0x00, 0x6c, 0xed, 0x46, 0x04, 0x00, + 0x6c, 0xee, 0x39, 0x6f, 0x00, 0x6c, 0xef, 0x15, + 0x20, 0x00, 0x6c, 0xf0, 0x0b, 0x39, 0x00, 0x6c, + 0xf1, 0x15, 0x15, 0x00, 0x6c, 0xf2, 0x55, 0x63, + 0x00, 0x6c, 0xf3, 0x04, 0xed, 0x00, 0x6c, 0xf4, + 0x55, 0x64, 0x00, 0x6c, 0xfb, 0x42, 0x22, 0x00, + 0x6d, 0x00, 0x46, 0x06, 0x00, 0x6d, 0x01, 0x3c, + 0x35, 0x00, 0x6d, 0x04, 0x21, 0x43, 0x00, 0x6d, + 0x07, 0x55, 0x65, 0x00, 0x6d, 0x0a, 0x39, 0x70, + 0x00, 0x6d, 0x0b, 0x0f, 0x38, 0x00, 0x6d, 0x0c, + 0x15, 0x2d, 0x00, 0x6d, 0x0e, 0x39, 0x71, 0x00, + 0x6d, 0x0f, 0x55, 0x66, 0x00, 0x6d, 0x11, 0x39, + 0x72, 0x00, 0x6d, 0x12, 0x15, 0x2c, 0x00, 0x6d, + 0x13, 0x55, 0x67, 0x00, 0x6d, 0x17, 0x0a, 0x9a, + 0x00, 0x6d, 0x19, 0x15, 0x29, 0x00, 0x6d, 0x1a, + 0x55, 0x68, 0x00, 0x6d, 0x1b, 0x0f, 0x56, 0x00, + 0x6d, 0x1e, 0x0c, 0x8e, 0x00, 0x6d, 0x1f, 0x15, + 0x23, 0x00, 0x6d, 0x24, 0x46, 0x07, 0x00, 0x6d, + 0x25, 0x0b, 0xe1, 0x00, 0x6d, 0x26, 0x46, 0x08, + 0x00, 0x6d, 0x27, 0x46, 0x09, 0x00, 0x6d, 0x28, + 0x55, 0x69, 0x00, 0x6d, 0x29, 0x04, 0xee, 0x00, + 0x6d, 0x2a, 0x07, 0xd1, 0x00, 0x6d, 0x2b, 0x15, + 0x26, 0x00, 0x6d, 0x2e, 0x39, 0x73, 0x00, 0x6d, + 0x2f, 0x46, 0x0b, 0x00, 0x6d, 0x31, 0x42, 0x24, + 0x00, 0x6d, 0x32, 0x09, 0x31, 0x00, 0x6d, 0x33, + 0x15, 0x2b, 0x00, 0x6d, 0x34, 0x46, 0x1e, 0x00, + 0x6d, 0x35, 0x15, 0x2a, 0x00, 0x6d, 0x36, 0x15, + 0x25, 0x00, 0x6d, 0x38, 0x15, 0x28, 0x00, 0x6d, + 0x39, 0x42, 0x25, 0x00, 0x6d, 0x3b, 0x05, 0xc6, + 0x00, 0x6d, 0x3c, 0x46, 0x0c, 0x00, 0x6d, 0x3d, + 0x15, 0x27, 0x00, 0x6d, 0x3e, 0x0c, 0xff, 0x00, + 0x6d, 0x3f, 0x42, 0x26, 0x00, 0x6d, 0x41, 0x0f, + 0x76, 0x00, 0x6d, 0x44, 0x09, 0xdc, 0x00, 0x6d, + 0x45, 0x0a, 0x99, 0x00, 0x6d, 0x57, 0x39, 0x74, + 0x00, 0x6d, 0x58, 0x42, 0x27, 0x00, 0x6d, 0x59, + 0x15, 0x33, 0x00, 0x6d, 0x5a, 0x15, 0x31, 0x00, + 0x6d, 0x5b, 0x46, 0x0d, 0x00, 0x6d, 0x5c, 0x0d, + 0xbf, 0x00, 0x6d, 0x5e, 0x39, 0x75, 0x00, 0x6d, + 0x5f, 0x55, 0x6a, 0x00, 0x6d, 0x60, 0x46, 0x0e, + 0x00, 0x6d, 0x61, 0x4c, 0x24, 0x00, 0x6d, 0x63, + 0x15, 0x2e, 0x00, 0x6d, 0x64, 0x15, 0x30, 0x00, + 0x6d, 0x65, 0x39, 0x76, 0x00, 0x6d, 0x66, 0x04, + 0xdc, 0x00, 0x6d, 0x67, 0x55, 0x6b, 0x00, 0x6d, + 0x69, 0x07, 0xd2, 0x00, 0x6d, 0x6a, 0x0f, 0xd8, + 0x00, 0x6d, 0x6c, 0x05, 0x9b, 0x00, 0x6d, 0x6e, + 0x0d, 0xd4, 0x00, 0x6d, 0x6f, 0x21, 0x45, 0x00, + 0x6d, 0x70, 0x46, 0x0f, 0x00, 0x6d, 0x74, 0x0f, + 0x4b, 0x00, 0x6d, 0x77, 0x34, 0x0f, 0x00, 0x6d, + 0x78, 0x0a, 0x01, 0x00, 0x6d, 0x79, 0x15, 0x32, + 0x00, 0x6d, 0x7c, 0x4c, 0x25, 0x00, 0x6d, 0x80, + 0x46, 0x10, 0x00, 0x6d, 0x81, 0x46, 0x11, 0x00, + 0x6d, 0x82, 0x39, 0x77, 0x00, 0x6d, 0x85, 0x15, + 0x37, 0x00, 0x6d, 0x87, 0x21, 0x44, 0x00, 0x6d, + 0x88, 0x09, 0xab, 0x00, 0x6d, 0x89, 0x34, 0x2a, + 0x00, 0x6d, 0x8a, 0x46, 0x12, 0x00, 0x6d, 0x8c, + 0x0f, 0x1a, 0x00, 0x6d, 0x8d, 0x46, 0x13, 0x00, + 0x6d, 0x8e, 0x15, 0x34, 0x00, 0x6d, 0x91, 0x46, + 0x14, 0x00, 0x6d, 0x92, 0x55, 0x6c, 0x00, 0x6d, + 0x93, 0x15, 0x2f, 0x00, 0x6d, 0x94, 0x42, 0x28, + 0x00, 0x6d, 0x95, 0x15, 0x35, 0x00, 0x6d, 0x96, + 0x21, 0x46, 0x00, 0x6d, 0x97, 0x55, 0x6d, 0x00, + 0x6d, 0x98, 0x46, 0x15, 0x00, 0x6d, 0x99, 0x0f, + 0xa6, 0x00, 0x6d, 0x9b, 0x0c, 0x6d, 0x00, 0x6d, + 0x9c, 0x0c, 0x9a, 0x00, 0x6d, 0xaa, 0x42, 0x29, + 0x00, 0x6d, 0xab, 0x46, 0x1a, 0x00, 0x6d, 0xac, + 0x21, 0x47, 0x00, 0x6d, 0xae, 0x46, 0x1b, 0x00, + 0x6d, 0xaf, 0x05, 0x94, 0x00, 0x6d, 0xb2, 0x04, + 0xf7, 0x00, 0x6d, 0xb4, 0x46, 0x1c, 0x00, 0x6d, + 0xb5, 0x15, 0x3b, 0x00, 0x6d, 0xb7, 0x55, 0x6e, + 0x00, 0x6d, 0xb8, 0x15, 0x3e, 0x00, 0x6d, 0xb9, + 0x4c, 0x26, 0x00, 0x6d, 0xbc, 0x0f, 0x8b, 0x00, + 0x6d, 0xbd, 0x55, 0x6f, 0x00, 0x6d, 0xbf, 0x39, + 0x78, 0x00, 0x6d, 0xc0, 0x0f, 0x4e, 0x00, 0x6d, + 0xc2, 0x46, 0x1d, 0x00, 0x6d, 0xc4, 0x39, 0x79, + 0x00, 0x6d, 0xc5, 0x15, 0x45, 0x00, 0x6d, 0xc6, + 0x15, 0x3f, 0x00, 0x6d, 0xc7, 0x15, 0x3c, 0x00, + 0x6d, 0xc8, 0x46, 0x1f, 0x00, 0x6d, 0xca, 0x39, + 0x7a, 0x00, 0x6d, 0xcb, 0x0f, 0x9c, 0x00, 0x6d, + 0xcc, 0x15, 0x42, 0x00, 0x6d, 0xce, 0x46, 0x20, + 0x00, 0x6d, 0xcf, 0x21, 0x48, 0x00, 0x6d, 0xd0, + 0x3c, 0x36, 0x00, 0x6d, 0xd1, 0x09, 0x54, 0x00, + 0x6d, 0xd2, 0x15, 0x44, 0x00, 0x6d, 0xd5, 0x15, + 0x49, 0x00, 0x6d, 0xd6, 0x39, 0x7b, 0x00, 0x6d, + 0xd8, 0x0c, 0x6b, 0x00, 0x6d, 0xd9, 0x15, 0x47, + 0x00, 0x6d, 0xda, 0x34, 0x53, 0x00, 0x6d, 0xdb, + 0x42, 0x2a, 0x00, 0x6d, 0xdd, 0x42, 0x2b, 0x00, + 0x6d, 0xde, 0x15, 0x41, 0x00, 0x6d, 0xdf, 0x46, + 0x21, 0x00, 0x6d, 0xe0, 0x55, 0x70, 0x00, 0x6d, + 0xe1, 0x0b, 0x76, 0x00, 0x6d, 0xe2, 0x55, 0x71, + 0x00, 0x6d, 0xe4, 0x15, 0x48, 0x00, 0x6d, 0xe5, + 0x55, 0x72, 0x00, 0x6d, 0xe6, 0x15, 0x3d, 0x00, + 0x6d, 0xe8, 0x15, 0x43, 0x00, 0x6d, 0xe9, 0x39, + 0x7c, 0x00, 0x6d, 0xea, 0x15, 0x4a, 0x00, 0x6d, + 0xeb, 0x04, 0xc0, 0x00, 0x6d, 0xec, 0x15, 0x40, + 0x00, 0x6d, 0xee, 0x15, 0x4b, 0x00, 0x6d, 0xef, + 0x55, 0x73, 0x00, 0x6d, 0xf0, 0x4c, 0x27, 0x00, + 0x6d, 0xf1, 0x0a, 0x02, 0x00, 0x6d, 0xf2, 0x21, + 0x4a, 0x00, 0x6d, 0xf3, 0x09, 0x69, 0x00, 0x6d, + 0xf4, 0x55, 0x74, 0x00, 0x6d, 0xf5, 0x0d, 0xf5, + 0x00, 0x6d, 0xf6, 0x46, 0x22, 0x00, 0x6d, 0xf7, + 0x08, 0x1e, 0x00, 0x6d, 0xf8, 0x21, 0x49, 0x00, + 0x6d, 0xf9, 0x15, 0x38, 0x00, 0x6d, 0xfa, 0x15, + 0x46, 0x00, 0x6d, 0xfb, 0x0c, 0x34, 0x00, 0x6d, + 0xfc, 0x21, 0x4b, 0x00, 0x6e, 0x00, 0x55, 0x75, + 0x00, 0x6e, 0x04, 0x55, 0x76, 0x00, 0x6e, 0x05, + 0x0a, 0x5a, 0x00, 0x6e, 0x07, 0x05, 0xc7, 0x00, + 0x6e, 0x08, 0x08, 0x41, 0x00, 0x6e, 0x09, 0x09, + 0xac, 0x00, 0x6e, 0x0a, 0x15, 0x3a, 0x00, 0x6e, + 0x0b, 0x09, 0x4c, 0x00, 0x6e, 0x13, 0x07, 0x22, + 0x00, 0x6e, 0x15, 0x15, 0x39, 0x00, 0x6e, 0x17, + 0x37, 0x46, 0x00, 0x6e, 0x19, 0x15, 0x4f, 0x00, + 0x6e, 0x1a, 0x1e, 0x14, 0x00, 0x6e, 0x1b, 0x07, + 0x6e, 0x00, 0x6e, 0x1d, 0x15, 0x5e, 0x00, 0x6e, + 0x1e, 0x46, 0x24, 0x00, 0x6e, 0x1f, 0x15, 0x58, + 0x00, 0x6e, 0x20, 0x06, 0x8e, 0x00, 0x6e, 0x21, + 0x0c, 0x49, 0x00, 0x6e, 0x22, 0x39, 0x7d, 0x00, + 0x6e, 0x23, 0x15, 0x53, 0x00, 0x6e, 0x24, 0x15, + 0x5c, 0x00, 0x6e, 0x25, 0x04, 0x73, 0x00, 0x6e, + 0x26, 0x04, 0xd4, 0x00, 0x6e, 0x27, 0x21, 0x4e, + 0x00, 0x6e, 0x29, 0x05, 0x39, 0x00, 0x6e, 0x2b, + 0x15, 0x55, 0x00, 0x6e, 0x2c, 0x0b, 0x0c, 0x00, + 0x6e, 0x2d, 0x15, 0x4c, 0x00, 0x6e, 0x2e, 0x15, + 0x4e, 0x00, 0x6e, 0x2f, 0x07, 0xd3, 0x00, 0x6e, + 0x32, 0x46, 0x26, 0x00, 0x6e, 0x34, 0x34, 0x12, + 0x00, 0x6e, 0x36, 0x46, 0x23, 0x00, 0x6e, 0x38, + 0x15, 0x5f, 0x00, 0x6e, 0x39, 0x21, 0x4c, 0x00, + 0x6e, 0x3a, 0x15, 0x5a, 0x00, 0x6e, 0x3b, 0x55, + 0x77, 0x00, 0x6e, 0x3c, 0x21, 0x4f, 0x00, 0x6e, + 0x3e, 0x15, 0x52, 0x00, 0x6e, 0x42, 0x3c, 0x37, + 0x00, 0x6e, 0x43, 0x15, 0x59, 0x00, 0x6e, 0x44, + 0x42, 0x2c, 0x00, 0x6e, 0x45, 0x4c, 0x28, 0x00, + 0x6e, 0x48, 0x46, 0x27, 0x00, 0x6e, 0x49, 0x46, + 0x28, 0x00, 0x6e, 0x4a, 0x0e, 0xb7, 0x00, 0x6e, + 0x4b, 0x46, 0x29, 0x00, 0x6e, 0x4c, 0x46, 0x2a, + 0x00, 0x6e, 0x4d, 0x15, 0x57, 0x00, 0x6e, 0x4e, + 0x15, 0x5b, 0x00, 0x6e, 0x4f, 0x46, 0x2b, 0x00, + 0x6e, 0x51, 0x39, 0x7e, 0x00, 0x6e, 0x52, 0x55, + 0x78, 0x00, 0x6e, 0x53, 0x46, 0x2c, 0x00, 0x6e, + 0x54, 0x46, 0x2d, 0x00, 0x6e, 0x56, 0x07, 0x84, + 0x00, 0x6e, 0x57, 0x46, 0x2e, 0x00, 0x6e, 0x58, + 0x09, 0xad, 0x00, 0x6e, 0x5b, 0x0b, 0x77, 0x00, + 0x6e, 0x5c, 0x21, 0x4d, 0x00, 0x6e, 0x5d, 0x55, + 0x79, 0x00, 0x6e, 0x5e, 0x42, 0x2d, 0x00, 0x6e, + 0x5f, 0x15, 0x51, 0x00, 0x6e, 0x62, 0x55, 0x7a, + 0x00, 0x6e, 0x63, 0x46, 0x2f, 0x00, 0x6e, 0x67, + 0x0f, 0x19, 0x00, 0x6e, 0x68, 0x55, 0x7b, 0x00, + 0x6e, 0x6b, 0x15, 0x54, 0x00, 0x6e, 0x6e, 0x15, + 0x4d, 0x00, 0x6e, 0x6f, 0x0c, 0x6c, 0x00, 0x6e, + 0x72, 0x15, 0x50, 0x00, 0x6e, 0x73, 0x4c, 0x29, + 0x00, 0x6e, 0x76, 0x15, 0x56, 0x00, 0x6e, 0x7b, + 0x4c, 0x2a, 0x00, 0x6e, 0x7d, 0x4c, 0x2b, 0x00, + 0x6e, 0x7e, 0x0f, 0xf7, 0x00, 0x6e, 0x7f, 0x08, + 0xea, 0x00, 0x6e, 0x80, 0x0e, 0xac, 0x00, 0x6e, + 0x82, 0x15, 0x60, 0x00, 0x6e, 0x89, 0x4c, 0x2c, + 0x00, 0x6e, 0x8c, 0x0d, 0x42, 0x00, 0x6e, 0x8d, + 0x55, 0x7c, 0x00, 0x6e, 0x8f, 0x15, 0x6c, 0x00, + 0x6e, 0x90, 0x07, 0x6f, 0x00, 0x6e, 0x93, 0x46, + 0x31, 0x00, 0x6e, 0x96, 0x09, 0x6a, 0x00, 0x6e, + 0x98, 0x15, 0x62, 0x00, 0x6e, 0x99, 0x55, 0x7d, + 0x00, 0x6e, 0x9c, 0x0f, 0x77, 0x00, 0x6e, 0x9d, + 0x07, 0xd4, 0x00, 0x6e, 0x9f, 0x15, 0x6f, 0x00, + 0x6e, 0xa0, 0x55, 0x7e, 0x00, 0x6e, 0xa2, 0x04, + 0xb2, 0x00, 0x6e, 0xa5, 0x15, 0x6d, 0x00, 0x6e, + 0xa7, 0x46, 0x32, 0x00, 0x6e, 0xaa, 0x15, 0x61, + 0x00, 0x6e, 0xab, 0x34, 0x0c, 0x00, 0x6e, 0xad, + 0x55, 0x7f, 0x00, 0x6e, 0xae, 0x55, 0x80, 0x00, + 0x6e, 0xaf, 0x15, 0x67, 0x00, 0x6e, 0xb1, 0x42, + 0x2e, 0x00, 0x6e, 0xb2, 0x15, 0x69, 0x00, 0x6e, + 0xb3, 0x55, 0x81, 0x00, 0x6e, 0xb4, 0x46, 0x33, + 0x00, 0x6e, 0xb6, 0x0f, 0x39, 0x00, 0x6e, 0xb7, + 0x15, 0x64, 0x00, 0x6e, 0xba, 0x0c, 0x28, 0x00, + 0x6e, 0xbb, 0x55, 0x82, 0x00, 0x6e, 0xbc, 0x4c, + 0x2d, 0x00, 0x6e, 0xbd, 0x15, 0x66, 0x00, 0x6e, + 0xbf, 0x21, 0x50, 0x00, 0x6e, 0xc0, 0x55, 0x83, + 0x00, 0x6e, 0xc1, 0x42, 0x2f, 0x00, 0x6e, 0xc2, + 0x15, 0x6e, 0x00, 0x6e, 0xc3, 0x46, 0x34, 0x00, + 0x6e, 0xc4, 0x15, 0x68, 0x00, 0x6e, 0xc5, 0x0e, + 0xd3, 0x00, 0x6e, 0xc7, 0x39, 0x7f, 0x00, 0x6e, + 0xc8, 0x55, 0x84, 0x00, 0x6e, 0xc9, 0x15, 0x63, + 0x00, 0x6e, 0xca, 0x39, 0x80, 0x00, 0x6e, 0xcb, + 0x08, 0xce, 0x00, 0x6e, 0xcc, 0x15, 0x7b, 0x00, + 0x6e, 0xcd, 0x55, 0x85, 0x00, 0x6e, 0xce, 0x39, + 0x81, 0x00, 0x6e, 0xcf, 0x55, 0x86, 0x00, 0x6e, + 0xd1, 0x05, 0xc8, 0x00, 0x6e, 0xd3, 0x15, 0x65, + 0x00, 0x6e, 0xd4, 0x15, 0x6a, 0x00, 0x6e, 0xd5, + 0x15, 0x6b, 0x00, 0x6e, 0xd9, 0x3c, 0x38, 0x00, + 0x6e, 0xda, 0x4c, 0x2e, 0x00, 0x6e, 0xdb, 0x4c, + 0x2f, 0x00, 0x6e, 0xdd, 0x0b, 0x4c, 0x00, 0x6e, + 0xde, 0x0b, 0x3a, 0x00, 0x6e, 0xe6, 0x3c, 0x24, + 0x00, 0x6e, 0xeb, 0x46, 0x36, 0x00, 0x6e, 0xec, + 0x15, 0x73, 0x00, 0x6e, 0xed, 0x55, 0x87, 0x00, + 0x6e, 0xee, 0x55, 0x88, 0x00, 0x6e, 0xef, 0x15, + 0x79, 0x00, 0x6e, 0xf2, 0x15, 0x77, 0x00, 0x6e, + 0xf4, 0x0c, 0x23, 0x00, 0x6e, 0xf7, 0x15, 0x7e, + 0x00, 0x6e, 0xf8, 0x15, 0x74, 0x00, 0x6e, 0xf9, + 0x46, 0x37, 0x00, 0x6e, 0xfb, 0x46, 0x38, 0x00, + 0x6e, 0xfd, 0x39, 0x82, 0x00, 0x6e, 0xfe, 0x15, + 0x75, 0x00, 0x6e, 0xff, 0x15, 0x5d, 0x00, 0x6f, + 0x01, 0x06, 0x93, 0x00, 0x6f, 0x02, 0x0d, 0xac, + 0x00, 0x6f, 0x04, 0x55, 0x89, 0x00, 0x6f, 0x06, + 0x08, 0xeb, 0x00, 0x6f, 0x08, 0x55, 0x8a, 0x00, + 0x6f, 0x09, 0x08, 0x09, 0x00, 0x6f, 0x0a, 0x46, + 0x39, 0x00, 0x6f, 0x0c, 0x46, 0x3a, 0x00, 0x6f, + 0x0d, 0x55, 0x8b, 0x00, 0x6f, 0x0f, 0x0f, 0xd9, + 0x00, 0x6f, 0x10, 0x42, 0x30, 0x00, 0x6f, 0x11, + 0x15, 0x71, 0x00, 0x6f, 0x13, 0x15, 0x7d, 0x00, + 0x6f, 0x14, 0x05, 0x0b, 0x00, 0x6f, 0x15, 0x0a, + 0xe8, 0x00, 0x6f, 0x16, 0x55, 0x8c, 0x00, 0x6f, + 0x18, 0x46, 0x3b, 0x00, 0x6f, 0x1a, 0x39, 0x83, + 0x00, 0x6f, 0x1b, 0x55, 0x8d, 0x00, 0x6f, 0x20, + 0x0d, 0x2f, 0x00, 0x6f, 0x22, 0x05, 0xfd, 0x00, + 0x6f, 0x23, 0x1e, 0x81, 0x00, 0x6f, 0x25, 0x46, + 0x3c, 0x00, 0x6f, 0x26, 0x4c, 0x30, 0x00, 0x6f, + 0x29, 0x4c, 0x31, 0x00, 0x6f, 0x2a, 0x39, 0x84, + 0x00, 0x6f, 0x2b, 0x0e, 0xad, 0x00, 0x6f, 0x2c, + 0x0b, 0xee, 0x00, 0x6f, 0x2d, 0x55, 0x8f, 0x00, + 0x6f, 0x2f, 0x39, 0x85, 0x00, 0x6f, 0x30, 0x4c, + 0x32, 0x00, 0x6f, 0x31, 0x15, 0x78, 0x00, 0x6f, + 0x32, 0x15, 0x7a, 0x00, 0x6f, 0x33, 0x39, 0x86, + 0x00, 0x6f, 0x35, 0x46, 0x35, 0x00, 0x6f, 0x36, + 0x46, 0x3d, 0x00, 0x6f, 0x38, 0x0a, 0xb4, 0x00, + 0x6f, 0x3b, 0x55, 0x8e, 0x00, 0x6f, 0x3c, 0x46, + 0x3e, 0x00, 0x6f, 0x3e, 0x15, 0x7c, 0x00, 0x6f, + 0x3f, 0x15, 0x76, 0x00, 0x6f, 0x41, 0x15, 0x70, + 0x00, 0x6f, 0x45, 0x05, 0xff, 0x00, 0x6f, 0x4f, + 0x55, 0x90, 0x00, 0x6f, 0x51, 0x1e, 0x60, 0x00, + 0x6f, 0x52, 0x46, 0x40, 0x00, 0x6f, 0x53, 0x55, + 0x91, 0x00, 0x6f, 0x54, 0x07, 0x3f, 0x00, 0x6f, + 0x57, 0x46, 0x41, 0x00, 0x6f, 0x58, 0x15, 0x8a, + 0x00, 0x6f, 0x59, 0x42, 0x31, 0x00, 0x6f, 0x5a, + 0x39, 0x87, 0x00, 0x6f, 0x5b, 0x15, 0x85, 0x00, + 0x6f, 0x5c, 0x0a, 0x9c, 0x00, 0x6f, 0x5d, 0x55, + 0x92, 0x00, 0x6f, 0x5e, 0x39, 0x88, 0x00, 0x6f, + 0x5f, 0x05, 0xc1, 0x00, 0x6f, 0x60, 0x46, 0x42, + 0x00, 0x6f, 0x61, 0x42, 0x32, 0x00, 0x6f, 0x62, + 0x39, 0x89, 0x00, 0x6f, 0x64, 0x09, 0x6b, 0x00, + 0x6f, 0x66, 0x15, 0x8e, 0x00, 0x6f, 0x68, 0x46, + 0x43, 0x00, 0x6f, 0x6c, 0x55, 0x93, 0x00, 0x6f, + 0x6d, 0x15, 0x87, 0x00, 0x6f, 0x6e, 0x36, 0x6c, + 0x00, 0x6f, 0x6f, 0x15, 0x84, 0x00, 0x6f, 0x70, + 0x0b, 0xf5, 0x00, 0x6f, 0x74, 0x15, 0xa7, 0x00, + 0x6f, 0x78, 0x15, 0x81, 0x00, 0x6f, 0x7a, 0x15, + 0x80, 0x00, 0x6f, 0x7c, 0x15, 0x89, 0x00, 0x6f, + 0x7d, 0x39, 0x8a, 0x00, 0x6f, 0x7e, 0x42, 0x33, + 0x00, 0x6f, 0x80, 0x15, 0x83, 0x00, 0x6f, 0x81, + 0x15, 0x82, 0x00, 0x6f, 0x82, 0x15, 0x88, 0x00, + 0x6f, 0x83, 0x55, 0x94, 0x00, 0x6f, 0x84, 0x0a, + 0x45, 0x00, 0x6f, 0x86, 0x15, 0x7f, 0x00, 0x6f, + 0x87, 0x4c, 0x33, 0x00, 0x6f, 0x88, 0x21, 0x51, + 0x00, 0x6f, 0x8b, 0x39, 0x8b, 0x00, 0x6f, 0x8c, + 0x42, 0x34, 0x00, 0x6f, 0x8d, 0x39, 0x8c, 0x00, + 0x6f, 0x8e, 0x15, 0x8b, 0x00, 0x6f, 0x90, 0x46, + 0x44, 0x00, 0x6f, 0x91, 0x15, 0x8c, 0x00, 0x6f, + 0x92, 0x39, 0x8d, 0x00, 0x6f, 0x93, 0x55, 0x95, + 0x00, 0x6f, 0x94, 0x39, 0x8e, 0x00, 0x6f, 0x96, + 0x46, 0x45, 0x00, 0x6f, 0x97, 0x05, 0xfe, 0x00, + 0x6f, 0x98, 0x36, 0x3c, 0x00, 0x6f, 0x9a, 0x39, + 0x8f, 0x00, 0x6f, 0x9d, 0x4c, 0x34, 0x00, 0x6f, + 0x9f, 0x46, 0x47, 0x00, 0x6f, 0xa0, 0x42, 0x35, + 0x00, 0x6f, 0xa1, 0x15, 0x91, 0x00, 0x6f, 0xa3, + 0x15, 0x90, 0x00, 0x6f, 0xa4, 0x15, 0x92, 0x00, + 0x6f, 0xa5, 0x46, 0x48, 0x00, 0x6f, 0xa6, 0x55, + 0x96, 0x00, 0x6f, 0xa7, 0x39, 0x90, 0x00, 0x6f, + 0xa8, 0x39, 0x91, 0x00, 0x6f, 0xaa, 0x15, 0x95, + 0x00, 0x6f, 0xae, 0x4c, 0x35, 0x00, 0x6f, 0xaf, + 0x46, 0x49, 0x00, 0x6f, 0xb0, 0x55, 0x97, 0x00, + 0x6f, 0xb1, 0x0c, 0x3d, 0x00, 0x6f, 0xb3, 0x15, + 0x8f, 0x00, 0x6f, 0xb5, 0x21, 0x52, 0x00, 0x6f, + 0xb6, 0x39, 0x92, 0x00, 0x6f, 0xb7, 0x4c, 0x36, + 0x00, 0x6f, 0xb9, 0x15, 0x93, 0x00, 0x6f, 0xbc, + 0x42, 0x36, 0x00, 0x6f, 0xbe, 0x46, 0x46, 0x00, + 0x6f, 0xc0, 0x07, 0x39, 0x00, 0x6f, 0xc1, 0x0b, + 0x59, 0x00, 0x6f, 0xc2, 0x15, 0x8d, 0x00, 0x6f, + 0xc3, 0x0c, 0xf1, 0x00, 0x6f, 0xc5, 0x55, 0x98, + 0x00, 0x6f, 0xc6, 0x15, 0x94, 0x00, 0x6f, 0xc7, + 0x42, 0x37, 0x00, 0x6f, 0xc8, 0x46, 0x4b, 0x00, + 0x6f, 0xc9, 0x46, 0x4c, 0x00, 0x6f, 0xca, 0x42, + 0x38, 0x00, 0x6f, 0xd4, 0x15, 0x99, 0x00, 0x6f, + 0xd5, 0x15, 0x97, 0x00, 0x6f, 0xd8, 0x15, 0x9a, + 0x00, 0x6f, 0xda, 0x39, 0x93, 0x00, 0x6f, 0xdb, + 0x15, 0x9d, 0x00, 0x6f, 0xde, 0x39, 0x94, 0x00, + 0x6f, 0xdf, 0x15, 0x96, 0x00, 0x6f, 0xe0, 0x07, + 0xfc, 0x00, 0x6f, 0xe1, 0x0c, 0xde, 0x00, 0x6f, + 0xe4, 0x15, 0x36, 0x00, 0x6f, 0xe8, 0x55, 0x99, + 0x00, 0x6f, 0xe9, 0x46, 0x4d, 0x00, 0x6f, 0xeb, + 0x0f, 0x5e, 0x00, 0x6f, 0xec, 0x15, 0x98, 0x00, + 0x6f, 0xee, 0x15, 0x9c, 0x00, 0x6f, 0xef, 0x0b, + 0x55, 0x00, 0x6f, 0xf0, 0x42, 0x39, 0x00, 0x6f, + 0xf1, 0x15, 0x9b, 0x00, 0x6f, 0xf3, 0x15, 0x86, + 0x00, 0x6f, 0xf5, 0x21, 0x53, 0x00, 0x6f, 0xf6, + 0x1b, 0xa4, 0x00, 0x6f, 0xf9, 0x3c, 0x23, 0x00, + 0x6f, 0xfa, 0x15, 0xa0, 0x00, 0x6f, 0xfc, 0x46, + 0x4f, 0x00, 0x6f, 0xfd, 0x55, 0x9a, 0x00, 0x6f, + 0xfe, 0x15, 0xa4, 0x00, 0x70, 0x00, 0x46, 0x50, + 0x00, 0x70, 0x01, 0x15, 0xa2, 0x00, 0x70, 0x05, + 0x21, 0x54, 0x00, 0x70, 0x06, 0x1e, 0x50, 0x00, + 0x70, 0x07, 0x21, 0x55, 0x00, 0x70, 0x09, 0x15, + 0x9e, 0x00, 0x70, 0x0a, 0x46, 0x51, 0x00, 0x70, + 0x0b, 0x15, 0x9f, 0x00, 0x70, 0x0d, 0x4c, 0x37, + 0x00, 0x70, 0x0f, 0x15, 0xa3, 0x00, 0x70, 0x11, + 0x15, 0xa1, 0x00, 0x70, 0x15, 0x0d, 0xc0, 0x00, + 0x70, 0x17, 0x55, 0x9b, 0x00, 0x70, 0x18, 0x15, + 0xa9, 0x00, 0x70, 0x1a, 0x15, 0xa6, 0x00, 0x70, + 0x1b, 0x15, 0xa5, 0x00, 0x70, 0x1d, 0x15, 0xa8, + 0x00, 0x70, 0x1e, 0x0c, 0xac, 0x00, 0x70, 0x1f, + 0x15, 0xaa, 0x00, 0x70, 0x20, 0x4c, 0x38, 0x00, + 0x70, 0x23, 0x46, 0x52, 0x00, 0x70, 0x26, 0x0b, + 0xb3, 0x00, 0x70, 0x27, 0x0b, 0x4d, 0x00, 0x70, + 0x28, 0x21, 0x56, 0x00, 0x70, 0x2c, 0x0a, 0x49, + 0x00, 0x70, 0x2f, 0x55, 0x9c, 0x00, 0x70, 0x30, + 0x15, 0xab, 0x00, 0x70, 0x32, 0x15, 0xad, 0x00, + 0x70, 0x34, 0x55, 0x9d, 0x00, 0x70, 0x37, 0x55, + 0x9e, 0x00, 0x70, 0x39, 0x39, 0x96, 0x00, 0x70, + 0x3a, 0x46, 0x54, 0x00, 0x70, 0x3c, 0x39, 0x97, + 0x00, 0x70, 0x3e, 0x15, 0xac, 0x00, 0x70, 0x43, + 0x46, 0x55, 0x00, 0x70, 0x44, 0x55, 0x9f, 0x00, + 0x70, 0x47, 0x46, 0x56, 0x00, 0x70, 0x48, 0x55, + 0xa0, 0x00, 0x70, 0x49, 0x4c, 0x39, 0x00, 0x70, + 0x4a, 0x4f, 0x52, 0x00, 0x70, 0x4b, 0x46, 0x57, + 0x00, 0x70, 0x4c, 0x15, 0x72, 0x00, 0x70, 0x4e, + 0x42, 0x3a, 0x00, 0x70, 0x51, 0x15, 0xae, 0x00, + 0x70, 0x54, 0x39, 0x99, 0x00, 0x70, 0x55, 0x55, + 0xa1, 0x00, 0x70, 0x58, 0x0c, 0xbf, 0x00, 0x70, + 0x5d, 0x39, 0x9a, 0x00, 0x70, 0x5e, 0x39, 0x9b, + 0x00, 0x70, 0x63, 0x15, 0xaf, 0x00, 0x70, 0x64, + 0x39, 0x9c, 0x00, 0x70, 0x65, 0x46, 0x59, 0x00, + 0x70, 0x69, 0x46, 0x5a, 0x00, 0x70, 0x6b, 0x05, + 0x50, 0x00, 0x70, 0x6c, 0x39, 0x9d, 0x00, 0x70, + 0x6e, 0x46, 0x5b, 0x00, 0x70, 0x6f, 0x0c, 0x6e, + 0x00, 0x70, 0x70, 0x05, 0x83, 0x00, 0x70, 0x75, + 0x42, 0x3b, 0x00, 0x70, 0x76, 0x46, 0x5c, 0x00, + 0x70, 0x78, 0x06, 0x7e, 0x00, 0x70, 0x7c, 0x09, + 0x0a, 0x00, 0x70, 0x7d, 0x08, 0x42, 0x00, 0x70, + 0x7e, 0x39, 0x9e, 0x00, 0x70, 0x81, 0x39, 0x9f, + 0x00, 0x70, 0x85, 0x21, 0x57, 0x00, 0x70, 0x86, + 0x46, 0x5d, 0x00, 0x70, 0x89, 0x0f, 0xcd, 0x00, + 0x70, 0x8a, 0x0a, 0x2c, 0x00, 0x70, 0x8e, 0x05, + 0x0c, 0x00, 0x70, 0x92, 0x15, 0xb1, 0x00, 0x70, + 0x94, 0x55, 0xa2, 0x00, 0x70, 0x95, 0x39, 0xa0, + 0x00, 0x70, 0x96, 0x55, 0xa3, 0x00, 0x70, 0x97, + 0x46, 0x5e, 0x00, 0x70, 0x98, 0x4c, 0x3a, 0x00, + 0x70, 0x99, 0x15, 0xb0, 0x00, 0x70, 0x9b, 0x55, + 0xa4, 0x00, 0x70, 0x9f, 0x46, 0x60, 0x00, 0x70, + 0xa4, 0x42, 0x3c, 0x00, 0x70, 0xab, 0x21, 0x58, + 0x00, 0x70, 0xac, 0x15, 0xb4, 0x00, 0x70, 0xad, + 0x0b, 0x78, 0x00, 0x70, 0xae, 0x15, 0xb7, 0x00, + 0x70, 0xaf, 0x15, 0xb2, 0x00, 0x70, 0xb0, 0x4c, + 0x3b, 0x00, 0x70, 0xb1, 0x46, 0x61, 0x00, 0x70, + 0xb3, 0x15, 0xb6, 0x00, 0x70, 0xb4, 0x55, 0xa5, + 0x00, 0x70, 0xb7, 0x39, 0xa1, 0x00, 0x70, 0xb8, + 0x15, 0xb5, 0x00, 0x70, 0xb9, 0x0c, 0x3a, 0x00, + 0x70, 0xba, 0x04, 0x9d, 0x00, 0x70, 0xbb, 0x20, + 0xad, 0x00, 0x70, 0xc8, 0x0f, 0xbd, 0x00, 0x70, + 0xca, 0x46, 0x64, 0x00, 0x70, 0xcb, 0x15, 0xb9, + 0x00, 0x70, 0xcf, 0x04, 0xca, 0x00, 0x70, 0xd1, + 0x46, 0x65, 0x00, 0x70, 0xd3, 0x39, 0xa2, 0x00, + 0x70, 0xd4, 0x39, 0xa3, 0x00, 0x70, 0xd5, 0x4c, + 0x3c, 0x00, 0x70, 0xd6, 0x4c, 0x3d, 0x00, 0x70, + 0xd8, 0x39, 0xa4, 0x00, 0x70, 0xd9, 0x15, 0xbb, + 0x00, 0x70, 0xdc, 0x39, 0xa5, 0x00, 0x70, 0xdd, + 0x15, 0xba, 0x00, 0x70, 0xdf, 0x15, 0xb8, 0x00, + 0x70, 0xe4, 0x42, 0x3d, 0x00, 0x70, 0xec, 0x46, + 0x63, 0x00, 0x70, 0xf1, 0x15, 0xb3, 0x00, 0x70, + 0xf9, 0x0e, 0x51, 0x00, 0x70, 0xfa, 0x55, 0xa6, + 0x00, 0x70, 0xfd, 0x15, 0xbd, 0x00, 0x71, 0x03, + 0x46, 0x66, 0x00, 0x71, 0x04, 0x21, 0x5a, 0x00, + 0x71, 0x05, 0x55, 0xa7, 0x00, 0x71, 0x06, 0x46, + 0x67, 0x00, 0x71, 0x07, 0x39, 0xa6, 0x00, 0x71, + 0x08, 0x46, 0x68, 0x00, 0x71, 0x09, 0x15, 0xbc, + 0x00, 0x71, 0x0b, 0x55, 0xa8, 0x00, 0x71, 0x0c, + 0x46, 0x69, 0x00, 0x71, 0x0f, 0x21, 0x59, 0x00, + 0x71, 0x14, 0x05, 0x0d, 0x00, 0x71, 0x19, 0x15, + 0xbf, 0x00, 0x71, 0x1a, 0x0e, 0x02, 0x00, 0x71, + 0x1c, 0x15, 0xbe, 0x00, 0x71, 0x1e, 0x42, 0x3f, + 0x00, 0x71, 0x20, 0x39, 0xa7, 0x00, 0x71, 0x21, + 0x0e, 0xc1, 0x00, 0x71, 0x26, 0x09, 0xaf, 0x00, + 0x71, 0x2b, 0x42, 0x3e, 0x00, 0x71, 0x2d, 0x55, + 0xa9, 0x00, 0x71, 0x2e, 0x42, 0x40, 0x00, 0x71, + 0x2f, 0x46, 0x6b, 0x00, 0x71, 0x30, 0x1d, 0xdc, + 0x00, 0x71, 0x31, 0x39, 0xa8, 0x00, 0x71, 0x36, + 0x0a, 0xb5, 0x00, 0x71, 0x38, 0x55, 0xaa, 0x00, + 0x71, 0x3c, 0x09, 0xae, 0x00, 0x71, 0x41, 0x55, + 0xab, 0x00, 0x71, 0x45, 0x4c, 0x3e, 0x00, 0x71, + 0x46, 0x21, 0x5c, 0x00, 0x71, 0x47, 0x21, 0x5d, + 0x00, 0x71, 0x49, 0x1e, 0x82, 0x00, 0x71, 0x4a, + 0x39, 0xa9, 0x00, 0x71, 0x4b, 0x55, 0xac, 0x00, + 0x71, 0x4c, 0x15, 0xc5, 0x00, 0x71, 0x4e, 0x0a, + 0x9d, 0x00, 0x71, 0x50, 0x46, 0x6c, 0x00, 0x71, + 0x51, 0x42, 0x41, 0x00, 0x71, 0x52, 0x39, 0xaa, + 0x00, 0x71, 0x53, 0x46, 0x6d, 0x00, 0x71, 0x55, + 0x15, 0xc1, 0x00, 0x71, 0x56, 0x15, 0xc6, 0x00, + 0x71, 0x57, 0x55, 0xae, 0x00, 0x71, 0x59, 0x05, + 0x0e, 0x00, 0x71, 0x5a, 0x55, 0xaf, 0x00, 0x71, + 0x5c, 0x21, 0x5b, 0x00, 0x71, 0x5e, 0x46, 0x6e, + 0x00, 0x71, 0x60, 0x39, 0xab, 0x00, 0x71, 0x62, + 0x15, 0xc4, 0x00, 0x71, 0x64, 0x0d, 0x17, 0x00, + 0x71, 0x65, 0x15, 0xc0, 0x00, 0x71, 0x66, 0x15, + 0xc3, 0x00, 0x71, 0x67, 0x09, 0xb0, 0x00, 0x71, + 0x68, 0x42, 0x42, 0x00, 0x71, 0x69, 0x0d, 0x65, + 0x00, 0x71, 0x6c, 0x15, 0xc7, 0x00, 0x71, 0x6e, + 0x34, 0x23, 0x00, 0x71, 0x79, 0x39, 0xac, 0x00, + 0x71, 0x7d, 0x0a, 0x9e, 0x00, 0x71, 0x80, 0x46, + 0x71, 0x00, 0x71, 0x84, 0x15, 0xca, 0x00, 0x71, + 0x85, 0x42, 0x43, 0x00, 0x71, 0x87, 0x42, 0x44, + 0x00, 0x71, 0x88, 0x15, 0xc2, 0x00, 0x71, 0x8a, + 0x06, 0xfd, 0x00, 0x71, 0x8c, 0x55, 0xb0, 0x00, + 0x71, 0x8f, 0x15, 0xc8, 0x00, 0x71, 0x92, 0x39, + 0xad, 0x00, 0x71, 0x94, 0x0f, 0x3a, 0x00, 0x71, + 0x95, 0x15, 0xcb, 0x00, 0x71, 0x96, 0x46, 0x70, + 0x00, 0x71, 0x99, 0x20, 0x5d, 0x00, 0x71, 0x9a, + 0x55, 0xb1, 0x00, 0x71, 0x9b, 0x46, 0x72, 0x00, + 0x71, 0x9f, 0x09, 0x59, 0x00, 0x71, 0xa0, 0x46, + 0x73, 0x00, 0x71, 0xa2, 0x46, 0x74, 0x00, 0x71, + 0xa8, 0x15, 0xcc, 0x00, 0x71, 0xac, 0x15, 0xcd, + 0x00, 0x71, 0xae, 0x46, 0x75, 0x00, 0x71, 0xaf, + 0x46, 0x76, 0x00, 0x71, 0xb0, 0x55, 0xb2, 0x00, + 0x71, 0xb1, 0x0c, 0xe4, 0x00, 0x71, 0xb2, 0x4c, + 0x3f, 0x00, 0x71, 0xb3, 0x3c, 0x25, 0x00, 0x71, + 0xb9, 0x15, 0xcf, 0x00, 0x71, 0xba, 0x42, 0x45, + 0x00, 0x71, 0xbe, 0x15, 0xd0, 0x00, 0x71, 0xbf, + 0x55, 0xb3, 0x00, 0x71, 0xc0, 0x55, 0xb4, 0x00, + 0x71, 0xc1, 0x21, 0x5f, 0x00, 0x71, 0xc3, 0x0c, + 0xe9, 0x00, 0x71, 0xc4, 0x42, 0x46, 0x00, 0x71, + 0xc8, 0x0c, 0x6f, 0x00, 0x71, 0xc9, 0x15, 0xd2, + 0x00, 0x71, 0xcb, 0x39, 0xaf, 0x00, 0x71, 0xcc, + 0x55, 0xb5, 0x00, 0x71, 0xce, 0x15, 0xd4, 0x00, + 0x71, 0xd0, 0x0f, 0x9d, 0x00, 0x71, 0xd2, 0x15, + 0xd1, 0x00, 0x71, 0xd3, 0x39, 0xb0, 0x00, 0x71, + 0xd4, 0x15, 0xd3, 0x00, 0x71, 0xd5, 0x05, 0x0f, + 0x00, 0x71, 0xd6, 0x39, 0xb1, 0x00, 0x71, 0xd7, + 0x15, 0xce, 0x00, 0x71, 0xd9, 0x46, 0x78, 0x00, + 0x71, 0xda, 0x55, 0xb6, 0x00, 0x71, 0xdc, 0x46, + 0x79, 0x00, 0x71, 0xdf, 0x11, 0x4e, 0x00, 0x71, + 0xe0, 0x15, 0xd5, 0x00, 0x71, 0xe5, 0x0a, 0xe9, + 0x00, 0x71, 0xe6, 0x08, 0x86, 0x00, 0x71, 0xe7, + 0x15, 0xd7, 0x00, 0x71, 0xec, 0x15, 0xd6, 0x00, + 0x71, 0xed, 0x09, 0xea, 0x00, 0x71, 0xee, 0x10, + 0xee, 0x00, 0x71, 0xf4, 0x4c, 0x40, 0x00, 0x71, + 0xf5, 0x15, 0xd8, 0x00, 0x71, 0xf8, 0x55, 0xb7, + 0x00, 0x71, 0xf9, 0x15, 0xda, 0x00, 0x71, 0xfb, + 0x15, 0xc9, 0x00, 0x71, 0xfc, 0x15, 0xd9, 0x00, + 0x71, 0xfe, 0x21, 0x60, 0x00, 0x71, 0xff, 0x15, + 0xdb, 0x00, 0x72, 0x00, 0x39, 0xb2, 0x00, 0x72, + 0x06, 0x0d, 0x30, 0x00, 0x72, 0x07, 0x46, 0x7a, + 0x00, 0x72, 0x08, 0x55, 0xb8, 0x00, 0x72, 0x09, + 0x55, 0xb9, 0x00, 0x72, 0x0d, 0x15, 0xdc, 0x00, + 0x72, 0x10, 0x15, 0xdd, 0x00, 0x72, 0x13, 0x55, + 0xba, 0x00, 0x72, 0x15, 0x42, 0x47, 0x00, 0x72, + 0x17, 0x4c, 0x41, 0x00, 0x72, 0x1a, 0x55, 0xbb, + 0x00, 0x72, 0x1b, 0x15, 0xde, 0x00, 0x72, 0x1d, + 0x39, 0xb3, 0x00, 0x72, 0x1f, 0x4c, 0x42, 0x00, + 0x72, 0x24, 0x55, 0xbc, 0x00, 0x72, 0x28, 0x1e, + 0x9f, 0x00, 0x72, 0x2a, 0x0b, 0xfa, 0x00, 0x72, + 0x2b, 0x39, 0xb4, 0x00, 0x72, 0x2c, 0x15, 0xe1, + 0x00, 0x72, 0x2d, 0x15, 0xe0, 0x00, 0x72, 0x2f, + 0x55, 0xbd, 0x00, 0x72, 0x30, 0x15, 0xe2, 0x00, + 0x72, 0x32, 0x15, 0xe3, 0x00, 0x72, 0x34, 0x46, + 0x7c, 0x00, 0x72, 0x35, 0x35, 0xf1, 0x00, 0x72, + 0x36, 0x0d, 0xd5, 0x00, 0x72, 0x38, 0x39, 0xb5, + 0x00, 0x72, 0x39, 0x46, 0x7d, 0x00, 0x72, 0x3a, + 0x0e, 0xf8, 0x00, 0x72, 0x3b, 0x15, 0xe4, 0x00, + 0x72, 0x3c, 0x15, 0xe5, 0x00, 0x72, 0x3d, 0x0a, + 0xd8, 0x00, 0x72, 0x3e, 0x08, 0xd0, 0x00, 0x72, + 0x3f, 0x15, 0xe6, 0x00, 0x72, 0x40, 0x15, 0xe7, + 0x00, 0x72, 0x41, 0x39, 0xb6, 0x00, 0x72, 0x42, + 0x46, 0x7e, 0x00, 0x72, 0x43, 0x4c, 0x43, 0x00, + 0x72, 0x45, 0x55, 0xbe, 0x00, 0x72, 0x46, 0x15, + 0xe8, 0x00, 0x72, 0x47, 0x0e, 0x22, 0x00, 0x72, + 0x48, 0x0d, 0x5b, 0x00, 0x72, 0x4b, 0x15, 0xe9, + 0x00, 0x72, 0x4c, 0x0d, 0x0d, 0x00, 0x72, 0x4e, + 0x55, 0xbf, 0x00, 0x72, 0x4f, 0x4c, 0x44, 0x00, + 0x72, 0x50, 0x4c, 0x45, 0x00, 0x72, 0x52, 0x0b, + 0xc9, 0x00, 0x72, 0x53, 0x39, 0xb7, 0x00, 0x72, + 0x55, 0x39, 0xb8, 0x00, 0x72, 0x56, 0x39, 0xb9, + 0x00, 0x72, 0x57, 0x46, 0x7f, 0x00, 0x72, 0x58, + 0x15, 0xea, 0x00, 0x72, 0x59, 0x05, 0x67, 0x00, + 0x72, 0x5a, 0x4c, 0x46, 0x00, 0x72, 0x5b, 0x06, + 0x87, 0x00, 0x72, 0x5c, 0x39, 0xba, 0x00, 0x72, + 0x5d, 0x0e, 0xd2, 0x00, 0x72, 0x5e, 0x55, 0xc0, + 0x00, 0x72, 0x5f, 0x0e, 0xc2, 0x00, 0x72, 0x60, + 0x4c, 0x47, 0x00, 0x72, 0x61, 0x05, 0x34, 0x00, + 0x72, 0x62, 0x0f, 0xda, 0x00, 0x72, 0x63, 0x46, + 0x80, 0x00, 0x72, 0x67, 0x0e, 0x80, 0x00, 0x72, + 0x68, 0x4c, 0x48, 0x00, 0x72, 0x69, 0x0d, 0xfa, + 0x00, 0x72, 0x6b, 0x55, 0xc1, 0x00, 0x72, 0x6e, + 0x46, 0x82, 0x00, 0x72, 0x6f, 0x46, 0x83, 0x00, + 0x72, 0x71, 0x55, 0xc2, 0x00, 0x72, 0x72, 0x0a, + 0x5b, 0x00, 0x72, 0x74, 0x15, 0xeb, 0x00, 0x72, + 0x77, 0x4c, 0x49, 0x00, 0x72, 0x78, 0x46, 0x84, + 0x00, 0x72, 0x79, 0x0c, 0x9b, 0x00, 0x72, 0x7b, + 0x55, 0xc3, 0x00, 0x72, 0x7c, 0x55, 0xc4, 0x00, + 0x72, 0x7d, 0x07, 0x57, 0x00, 0x72, 0x7e, 0x15, + 0xec, 0x00, 0x72, 0x7f, 0x46, 0x85, 0x00, 0x72, + 0x80, 0x08, 0x44, 0x00, 0x72, 0x81, 0x15, 0xee, + 0x00, 0x72, 0x82, 0x15, 0xed, 0x00, 0x72, 0x84, + 0x4c, 0x4a, 0x00, 0x72, 0x87, 0x15, 0xef, 0x00, + 0x72, 0x89, 0x55, 0xc5, 0x00, 0x72, 0x8d, 0x39, + 0xbb, 0x00, 0x72, 0x8e, 0x46, 0x86, 0x00, 0x72, + 0x92, 0x15, 0xf0, 0x00, 0x72, 0x93, 0x55, 0xc6, + 0x00, 0x72, 0x96, 0x15, 0xf1, 0x00, 0x72, 0x9b, + 0x42, 0x49, 0x00, 0x72, 0xa0, 0x06, 0x58, 0x00, + 0x72, 0xa2, 0x15, 0xf2, 0x00, 0x72, 0xa7, 0x15, + 0xf3, 0x00, 0x72, 0xa8, 0x55, 0xc7, 0x00, 0x72, + 0xac, 0x07, 0x58, 0x00, 0x72, 0xad, 0x39, 0xbc, + 0x00, 0x72, 0xae, 0x46, 0x88, 0x00, 0x72, 0xaf, + 0x0d, 0x5c, 0x00, 0x72, 0xb0, 0x46, 0x89, 0x00, + 0x72, 0xb1, 0x21, 0x61, 0x00, 0x72, 0xb2, 0x15, + 0xf5, 0x00, 0x72, 0xb4, 0x39, 0xbd, 0x00, 0x72, + 0xb6, 0x09, 0xdd, 0x00, 0x72, 0xb9, 0x15, 0xf4, + 0x00, 0x72, 0xbe, 0x21, 0x62, 0x00, 0x72, 0xc0, + 0x34, 0x2b, 0x00, 0x72, 0xc1, 0x46, 0x8a, 0x00, + 0x72, 0xc2, 0x06, 0xb0, 0x00, 0x72, 0xc3, 0x15, + 0xf6, 0x00, 0x72, 0xc4, 0x15, 0xf8, 0x00, 0x72, + 0xc6, 0x15, 0xf7, 0x00, 0x72, 0xc7, 0x39, 0xbe, + 0x00, 0x72, 0xc9, 0x4c, 0x4b, 0x00, 0x72, 0xcc, + 0x46, 0x8c, 0x00, 0x72, 0xce, 0x15, 0xf9, 0x00, + 0x72, 0xd0, 0x07, 0x85, 0x00, 0x72, 0xd2, 0x15, + 0xfa, 0x00, 0x72, 0xd5, 0x55, 0xc8, 0x00, 0x72, + 0xd6, 0x55, 0xc9, 0x00, 0x72, 0xd7, 0x06, 0xe1, + 0x00, 0x72, 0xd8, 0x55, 0xca, 0x00, 0x72, 0xd9, + 0x0a, 0xc2, 0x00, 0x72, 0xdb, 0x08, 0x0f, 0x00, + 0x72, 0xdf, 0x55, 0xcb, 0x00, 0x72, 0xe0, 0x15, + 0xfc, 0x00, 0x72, 0xe1, 0x15, 0xfd, 0x00, 0x72, + 0xe2, 0x15, 0xfb, 0x00, 0x72, 0xe5, 0x4c, 0x4c, + 0x00, 0x72, 0xe9, 0x09, 0x19, 0x00, 0x72, 0xec, + 0x0c, 0xa0, 0x00, 0x72, 0xed, 0x06, 0xb1, 0x00, + 0x72, 0xf3, 0x46, 0x8f, 0x00, 0x72, 0xf4, 0x4c, + 0x4d, 0x00, 0x72, 0xf7, 0x15, 0xff, 0x00, 0x72, + 0xf8, 0x0b, 0x6a, 0x00, 0x72, 0xf9, 0x15, 0xfe, + 0x00, 0x72, 0xfa, 0x46, 0x90, 0x00, 0x72, 0xfb, + 0x39, 0xbf, 0x00, 0x72, 0xfc, 0x0f, 0xdb, 0x00, + 0x72, 0xfd, 0x0d, 0x18, 0x00, 0x72, 0xfe, 0x55, + 0xcc, 0x00, 0x73, 0x02, 0x4c, 0x4e, 0x00, 0x73, + 0x04, 0x39, 0xc0, 0x00, 0x73, 0x05, 0x39, 0xc1, + 0x00, 0x73, 0x07, 0x46, 0x91, 0x00, 0x73, 0x0a, + 0x16, 0x02, 0x00, 0x73, 0x0b, 0x4c, 0x4f, 0x00, + 0x73, 0x0d, 0x55, 0xcd, 0x00, 0x73, 0x12, 0x46, + 0x92, 0x00, 0x73, 0x13, 0x55, 0xce, 0x00, 0x73, + 0x16, 0x16, 0x04, 0x00, 0x73, 0x17, 0x16, 0x01, + 0x00, 0x73, 0x18, 0x46, 0x93, 0x00, 0x73, 0x19, + 0x46, 0x94, 0x00, 0x73, 0x1b, 0x0e, 0xe0, 0x00, + 0x73, 0x1c, 0x16, 0x03, 0x00, 0x73, 0x1d, 0x16, + 0x05, 0x00, 0x73, 0x1e, 0x4c, 0x50, 0x00, 0x73, + 0x1f, 0x0f, 0x8c, 0x00, 0x73, 0x22, 0x4c, 0x51, + 0x00, 0x73, 0x24, 0x21, 0x63, 0x00, 0x73, 0x25, + 0x16, 0x09, 0x00, 0x73, 0x27, 0x42, 0x4b, 0x00, + 0x73, 0x28, 0x39, 0xc2, 0x00, 0x73, 0x29, 0x16, + 0x08, 0x00, 0x73, 0x2a, 0x21, 0x64, 0x00, 0x73, + 0x2b, 0x0c, 0xe3, 0x00, 0x73, 0x2c, 0x46, 0x97, + 0x00, 0x73, 0x2e, 0x07, 0x59, 0x00, 0x73, 0x2f, + 0x16, 0x07, 0x00, 0x73, 0x31, 0x39, 0xc3, 0x00, + 0x73, 0x32, 0x55, 0xcf, 0x00, 0x73, 0x33, 0x46, + 0x98, 0x00, 0x73, 0x34, 0x16, 0x06, 0x00, 0x73, + 0x35, 0x55, 0xd0, 0x00, 0x73, 0x36, 0x0f, 0x1b, + 0x00, 0x73, 0x37, 0x0f, 0x1c, 0x00, 0x73, 0x39, + 0x46, 0x96, 0x00, 0x73, 0x3a, 0x4c, 0x52, 0x00, + 0x73, 0x3b, 0x4c, 0x53, 0x00, 0x73, 0x3d, 0x46, + 0x99, 0x00, 0x73, 0x3e, 0x16, 0x0a, 0x00, 0x73, + 0x3f, 0x05, 0x10, 0x00, 0x73, 0x43, 0x39, 0xc4, + 0x00, 0x73, 0x44, 0x08, 0x08, 0x00, 0x73, 0x45, + 0x08, 0xb0, 0x00, 0x73, 0x4d, 0x4c, 0x54, 0x00, + 0x73, 0x4e, 0x16, 0x0b, 0x00, 0x73, 0x4f, 0x16, + 0x0c, 0x00, 0x73, 0x50, 0x42, 0x4c, 0x00, 0x73, + 0x52, 0x46, 0x9a, 0x00, 0x73, 0x56, 0x55, 0xd1, + 0x00, 0x73, 0x57, 0x16, 0x0e, 0x00, 0x73, 0x58, + 0x4c, 0x55, 0x00, 0x73, 0x5d, 0x55, 0xd2, 0x00, + 0x73, 0x5e, 0x55, 0xd3, 0x00, 0x73, 0x5f, 0x55, + 0xd4, 0x00, 0x73, 0x60, 0x55, 0xd5, 0x00, 0x73, + 0x63, 0x09, 0x4d, 0x00, 0x73, 0x66, 0x42, 0x4d, + 0x00, 0x73, 0x67, 0x4c, 0x56, 0x00, 0x73, 0x68, + 0x16, 0x10, 0x00, 0x73, 0x69, 0x55, 0xd6, 0x00, + 0x73, 0x6a, 0x16, 0x0f, 0x00, 0x73, 0x6b, 0x46, + 0x9c, 0x00, 0x73, 0x6c, 0x39, 0xc5, 0x00, 0x73, + 0x6e, 0x46, 0x9e, 0x00, 0x73, 0x6f, 0x46, 0x9f, + 0x00, 0x73, 0x70, 0x16, 0x11, 0x00, 0x73, 0x71, + 0x46, 0xa0, 0x00, 0x73, 0x72, 0x05, 0xab, 0x00, + 0x73, 0x75, 0x16, 0x13, 0x00, 0x73, 0x77, 0x21, + 0x65, 0x00, 0x73, 0x78, 0x16, 0x12, 0x00, 0x73, + 0x79, 0x55, 0xd7, 0x00, 0x73, 0x7a, 0x16, 0x15, + 0x00, 0x73, 0x7b, 0x16, 0x14, 0x00, 0x73, 0x7c, + 0x39, 0xc6, 0x00, 0x73, 0x80, 0x55, 0xd8, 0x00, + 0x73, 0x81, 0x46, 0xa1, 0x00, 0x73, 0x83, 0x39, + 0xc7, 0x00, 0x73, 0x84, 0x07, 0x70, 0x00, 0x73, + 0x85, 0x39, 0xc8, 0x00, 0x73, 0x86, 0x39, 0xc9, + 0x00, 0x73, 0x87, 0x0f, 0x70, 0x00, 0x73, 0x89, + 0x06, 0xc4, 0x00, 0x73, 0x8a, 0x46, 0xa2, 0x00, + 0x73, 0x8b, 0x05, 0x26, 0x00, 0x73, 0x8e, 0x55, + 0xd9, 0x00, 0x73, 0x90, 0x55, 0xda, 0x00, 0x73, + 0x93, 0x55, 0xdb, 0x00, 0x73, 0x94, 0x46, 0xa3, + 0x00, 0x73, 0x95, 0x39, 0xca, 0x00, 0x73, 0x96, + 0x06, 0xe2, 0x00, 0x73, 0x97, 0x55, 0xdc, 0x00, + 0x73, 0x98, 0x46, 0xa4, 0x00, 0x73, 0x9c, 0x46, + 0xa5, 0x00, 0x73, 0x9e, 0x39, 0xcb, 0x00, 0x73, + 0x9f, 0x39, 0xcc, 0x00, 0x73, 0xa0, 0x39, 0xcd, + 0x00, 0x73, 0xa2, 0x42, 0x4e, 0x00, 0x73, 0xa5, + 0x46, 0xa6, 0x00, 0x73, 0xa6, 0x39, 0xce, 0x00, + 0x73, 0xa8, 0x3c, 0x3f, 0x00, 0x73, 0xa9, 0x06, + 0x1d, 0x00, 0x73, 0xaa, 0x55, 0xdd, 0x00, 0x73, + 0xab, 0x39, 0xcf, 0x00, 0x73, 0xad, 0x55, 0xde, + 0x00, 0x73, 0xb2, 0x0f, 0xb0, 0x00, 0x73, 0xb3, + 0x16, 0x17, 0x00, 0x73, 0xb5, 0x39, 0xd0, 0x00, + 0x73, 0xb7, 0x39, 0xd1, 0x00, 0x73, 0xb9, 0x46, + 0xa7, 0x00, 0x73, 0xba, 0x35, 0xea, 0x00, 0x73, + 0xbb, 0x16, 0x19, 0x00, 0x73, 0xbc, 0x39, 0xd2, + 0x00, 0x73, 0xbd, 0x21, 0x66, 0x00, 0x73, 0xbf, + 0x46, 0xa8, 0x00, 0x73, 0xc0, 0x16, 0x1a, 0x00, + 0x73, 0xc2, 0x05, 0x51, 0x00, 0x73, 0xc5, 0x46, + 0xa9, 0x00, 0x73, 0xc6, 0x55, 0xdf, 0x00, 0x73, + 0xc8, 0x16, 0x16, 0x00, 0x73, 0xc9, 0x21, 0x67, + 0x00, 0x73, 0xca, 0x08, 0x87, 0x00, 0x73, 0xcb, + 0x46, 0xaa, 0x00, 0x73, 0xcc, 0x55, 0xe0, 0x00, + 0x73, 0xcd, 0x0b, 0xdd, 0x00, 0x73, 0xce, 0x16, + 0x18, 0x00, 0x73, 0xcf, 0x39, 0xd3, 0x00, 0x73, + 0xd2, 0x21, 0x6a, 0x00, 0x73, 0xd3, 0x55, 0xe1, + 0x00, 0x73, 0xd6, 0x21, 0x68, 0x00, 0x73, 0xd9, + 0x39, 0xd4, 0x00, 0x73, 0xdd, 0x55, 0xe2, 0x00, + 0x73, 0xde, 0x16, 0x1d, 0x00, 0x73, 0xe0, 0x09, + 0x1a, 0x00, 0x73, 0xe1, 0x46, 0xab, 0x00, 0x73, + 0xe3, 0x21, 0x69, 0x00, 0x73, 0xe4, 0x3c, 0x39, + 0x00, 0x73, 0xe5, 0x16, 0x1b, 0x00, 0x73, 0xe6, + 0x55, 0xe3, 0x00, 0x73, 0xe7, 0x46, 0xac, 0x00, + 0x73, 0xe9, 0x39, 0xd5, 0x00, 0x73, 0xea, 0x07, + 0x14, 0x00, 0x73, 0xed, 0x0d, 0x5d, 0x00, 0x73, + 0xee, 0x16, 0x1c, 0x00, 0x73, 0xf1, 0x16, 0x37, + 0x00, 0x73, 0xf4, 0x39, 0xd6, 0x00, 0x73, 0xf5, + 0x21, 0x6c, 0x00, 0x73, 0xf7, 0x55, 0xe4, 0x00, + 0x73, 0xf8, 0x16, 0x22, 0x00, 0x73, 0xf9, 0x46, + 0xad, 0x00, 0x73, 0xfa, 0x46, 0xaf, 0x00, 0x73, + 0xfb, 0x55, 0xe5, 0x00, 0x73, 0xfd, 0x39, 0xd7, + 0x00, 0x73, 0xfe, 0x07, 0x71, 0x00, 0x73, 0xff, + 0x55, 0xe6, 0x00, 0x74, 0x00, 0x55, 0xe7, 0x00, + 0x74, 0x01, 0x46, 0xb0, 0x00, 0x74, 0x03, 0x06, + 0x7f, 0x00, 0x74, 0x04, 0x39, 0xd8, 0x00, 0x74, + 0x05, 0x16, 0x1f, 0x00, 0x74, 0x06, 0x0f, 0x67, + 0x00, 0x74, 0x07, 0x21, 0x6b, 0x00, 0x74, 0x09, + 0x0f, 0x78, 0x00, 0x74, 0x0a, 0x39, 0xd9, 0x00, + 0x74, 0x11, 0x55, 0xe8, 0x00, 0x74, 0x13, 0x46, + 0xae, 0x00, 0x74, 0x1a, 0x39, 0xda, 0x00, 0x74, + 0x1b, 0x39, 0xdb, 0x00, 0x74, 0x21, 0x3c, 0x3a, + 0x00, 0x74, 0x22, 0x1e, 0x34, 0x00, 0x74, 0x24, + 0x39, 0xdc, 0x00, 0x74, 0x25, 0x16, 0x21, 0x00, + 0x74, 0x26, 0x21, 0x6d, 0x00, 0x74, 0x28, 0x39, + 0xdd, 0x00, 0x74, 0x29, 0x21, 0x6f, 0x00, 0x74, + 0x2a, 0x21, 0x6e, 0x00, 0x74, 0x2b, 0x42, 0x4f, + 0x00, 0x74, 0x2c, 0x39, 0xde, 0x00, 0x74, 0x2d, + 0x55, 0xe9, 0x00, 0x74, 0x2e, 0x21, 0x70, 0x00, + 0x74, 0x2f, 0x39, 0xdf, 0x00, 0x74, 0x30, 0x39, + 0xe0, 0x00, 0x74, 0x31, 0x39, 0xe1, 0x00, 0x74, + 0x32, 0x16, 0x23, 0x00, 0x74, 0x33, 0x0f, 0x9e, + 0x00, 0x74, 0x34, 0x06, 0xcf, 0x00, 0x74, 0x35, + 0x0d, 0x90, 0x00, 0x74, 0x36, 0x0d, 0x00, 0x00, + 0x74, 0x39, 0x39, 0xe2, 0x00, 0x74, 0x3a, 0x16, + 0x24, 0x00, 0x74, 0x3f, 0x16, 0x26, 0x00, 0x74, + 0x40, 0x46, 0xb2, 0x00, 0x74, 0x41, 0x16, 0x29, + 0x00, 0x74, 0x43, 0x46, 0xb3, 0x00, 0x74, 0x44, + 0x39, 0xe3, 0x00, 0x74, 0x46, 0x42, 0x50, 0x00, + 0x74, 0x47, 0x39, 0xe4, 0x00, 0x74, 0x4b, 0x39, + 0xe5, 0x00, 0x74, 0x4d, 0x39, 0xe6, 0x00, 0x74, + 0x51, 0x39, 0xe7, 0x00, 0x74, 0x52, 0x46, 0xb4, + 0x00, 0x74, 0x53, 0x46, 0xb1, 0x00, 0x74, 0x55, + 0x16, 0x25, 0x00, 0x74, 0x57, 0x39, 0xe8, 0x00, + 0x74, 0x59, 0x16, 0x28, 0x00, 0x74, 0x5a, 0x07, + 0x9e, 0x00, 0x74, 0x5b, 0x04, 0xef, 0x00, 0x74, + 0x5c, 0x16, 0x2a, 0x00, 0x74, 0x5d, 0x46, 0xb5, + 0x00, 0x74, 0x5e, 0x0a, 0x36, 0x00, 0x74, 0x5f, + 0x16, 0x27, 0x00, 0x74, 0x60, 0x0f, 0xa4, 0x00, + 0x74, 0x62, 0x42, 0x51, 0x00, 0x74, 0x63, 0x16, + 0x2d, 0x00, 0x74, 0x64, 0x1d, 0x35, 0x00, 0x74, + 0x66, 0x39, 0xe9, 0x00, 0x74, 0x67, 0x55, 0xea, + 0x00, 0x74, 0x68, 0x55, 0xeb, 0x00, 0x74, 0x69, + 0x16, 0x2b, 0x00, 0x74, 0x6a, 0x16, 0x2e, 0x00, + 0x74, 0x6b, 0x39, 0xea, 0x00, 0x74, 0x6d, 0x42, + 0x52, 0x00, 0x74, 0x6e, 0x55, 0xec, 0x00, 0x74, + 0x6f, 0x16, 0x20, 0x00, 0x74, 0x70, 0x16, 0x2c, + 0x00, 0x74, 0x71, 0x39, 0xeb, 0x00, 0x74, 0x72, + 0x4c, 0x57, 0x00, 0x74, 0x73, 0x08, 0x2c, 0x00, + 0x74, 0x76, 0x16, 0x2f, 0x00, 0x74, 0x7e, 0x16, + 0x30, 0x00, 0x74, 0x80, 0x39, 0xec, 0x00, 0x74, + 0x81, 0x46, 0xb6, 0x00, 0x74, 0x83, 0x0f, 0x68, + 0x00, 0x74, 0x85, 0x39, 0xed, 0x00, 0x74, 0x86, + 0x39, 0xee, 0x00, 0x74, 0x87, 0x39, 0xef, 0x00, + 0x74, 0x88, 0x46, 0xb7, 0x00, 0x74, 0x89, 0x21, + 0x72, 0x00, 0x74, 0x8b, 0x16, 0x31, 0x00, 0x74, + 0x8f, 0x55, 0xed, 0x00, 0x74, 0x90, 0x39, 0xf0, + 0x00, 0x74, 0x91, 0x55, 0xee, 0x00, 0x74, 0x92, + 0x46, 0xb9, 0x00, 0x74, 0x97, 0x46, 0xba, 0x00, + 0x74, 0x98, 0x39, 0xf1, 0x00, 0x74, 0x99, 0x46, + 0xbb, 0x00, 0x74, 0x9a, 0x55, 0xef, 0x00, 0x74, + 0x9c, 0x39, 0xf2, 0x00, 0x74, 0x9e, 0x16, 0x32, + 0x00, 0x74, 0x9f, 0x21, 0x73, 0x00, 0x74, 0xa0, + 0x39, 0xf3, 0x00, 0x74, 0xa1, 0x46, 0xbc, 0x00, + 0x74, 0xa2, 0x16, 0x1e, 0x00, 0x74, 0xa3, 0x39, + 0xf4, 0x00, 0x74, 0xa5, 0x46, 0xbd, 0x00, 0x74, + 0xa6, 0x42, 0x53, 0x00, 0x74, 0xa7, 0x16, 0x33, + 0x00, 0x74, 0xa8, 0x39, 0xf5, 0x00, 0x74, 0xa9, + 0x42, 0x54, 0x00, 0x74, 0xaa, 0x46, 0xbe, 0x00, + 0x74, 0xab, 0x39, 0xf6, 0x00, 0x74, 0xae, 0x55, + 0xf0, 0x00, 0x74, 0xaf, 0x4c, 0x58, 0x00, 0x74, + 0xb0, 0x06, 0x00, 0x00, 0x74, 0xb1, 0x55, 0xf1, + 0x00, 0x74, 0xb2, 0x55, 0xf2, 0x00, 0x74, 0xb5, + 0x39, 0xf7, 0x00, 0x74, 0xb9, 0x46, 0xbf, 0x00, + 0x74, 0xba, 0x46, 0xc1, 0x00, 0x74, 0xbb, 0x46, + 0xc0, 0x00, 0x74, 0xbd, 0x08, 0xd1, 0x00, 0x74, + 0xbf, 0x39, 0xf8, 0x00, 0x74, 0xc8, 0x39, 0xf9, + 0x00, 0x74, 0xc9, 0x42, 0x55, 0x00, 0x74, 0xca, + 0x16, 0x34, 0x00, 0x74, 0xcc, 0x55, 0xf3, 0x00, + 0x74, 0xcf, 0x16, 0x35, 0x00, 0x74, 0xd0, 0x55, + 0xf4, 0x00, 0x74, 0xd3, 0x55, 0xf5, 0x00, 0x74, + 0xd4, 0x16, 0x36, 0x00, 0x74, 0xd6, 0x46, 0xc2, + 0x00, 0x74, 0xd8, 0x46, 0xc3, 0x00, 0x74, 0xda, + 0x39, 0xfa, 0x00, 0x74, 0xdb, 0x55, 0xf7, 0x00, + 0x74, 0xdc, 0x04, 0xdd, 0x00, 0x74, 0xde, 0x39, + 0xfb, 0x00, 0x74, 0xdf, 0x4c, 0x59, 0x00, 0x74, + 0xe0, 0x16, 0x38, 0x00, 0x74, 0xe2, 0x0d, 0xad, + 0x00, 0x74, 0xe3, 0x16, 0x39, 0x00, 0x74, 0xe4, + 0x4c, 0x5a, 0x00, 0x74, 0xe6, 0x05, 0xe0, 0x00, + 0x74, 0xe7, 0x16, 0x3a, 0x00, 0x74, 0xe8, 0x55, + 0xf8, 0x00, 0x74, 0xe9, 0x16, 0x3b, 0x00, 0x74, + 0xea, 0x55, 0xf9, 0x00, 0x74, 0xeb, 0x46, 0xc4, + 0x00, 0x74, 0xee, 0x16, 0x3c, 0x00, 0x74, 0xef, + 0x37, 0x50, 0x00, 0x74, 0xf0, 0x16, 0x3e, 0x00, + 0x74, 0xf1, 0x16, 0x3f, 0x00, 0x74, 0xf2, 0x16, + 0x3d, 0x00, 0x74, 0xf4, 0x4c, 0x5b, 0x00, 0x74, + 0xf6, 0x0d, 0xc5, 0x00, 0x74, 0xf7, 0x16, 0x41, + 0x00, 0x74, 0xf8, 0x16, 0x40, 0x00, 0x74, 0xfa, + 0x46, 0xc6, 0x00, 0x74, 0xfb, 0x4c, 0x5c, 0x00, + 0x74, 0xfc, 0x55, 0xfb, 0x00, 0x74, 0xff, 0x42, + 0x56, 0x00, 0x75, 0x01, 0x21, 0x74, 0x00, 0x75, + 0x03, 0x16, 0x43, 0x00, 0x75, 0x04, 0x16, 0x42, + 0x00, 0x75, 0x05, 0x16, 0x44, 0x00, 0x75, 0x06, + 0x55, 0xfc, 0x00, 0x75, 0x0c, 0x16, 0x45, 0x00, + 0x75, 0x0d, 0x16, 0x47, 0x00, 0x75, 0x0e, 0x16, + 0x46, 0x00, 0x75, 0x11, 0x08, 0x0b, 0x00, 0x75, + 0x12, 0x55, 0xfd, 0x00, 0x75, 0x13, 0x16, 0x49, + 0x00, 0x75, 0x15, 0x16, 0x48, 0x00, 0x75, 0x16, + 0x4c, 0x5d, 0x00, 0x75, 0x17, 0x42, 0x57, 0x00, + 0x75, 0x18, 0x06, 0x01, 0x00, 0x75, 0x1a, 0x0a, + 0x19, 0x00, 0x75, 0x1c, 0x0c, 0x36, 0x00, 0x75, + 0x1e, 0x16, 0x4a, 0x00, 0x75, 0x1f, 0x0a, 0x5c, + 0x00, 0x75, 0x20, 0x46, 0xc8, 0x00, 0x75, 0x21, + 0x4c, 0x5e, 0x00, 0x75, 0x22, 0x35, 0xde, 0x00, + 0x75, 0x23, 0x08, 0x88, 0x00, 0x75, 0x24, 0x46, + 0xc9, 0x00, 0x75, 0x25, 0x05, 0x1b, 0x00, 0x75, + 0x26, 0x16, 0x4b, 0x00, 0x75, 0x27, 0x55, 0xfe, + 0x00, 0x75, 0x28, 0x0f, 0x3b, 0x00, 0x75, 0x29, + 0x55, 0xff, 0x00, 0x75, 0x2a, 0x46, 0xca, 0x00, + 0x75, 0x2b, 0x0e, 0x33, 0x00, 0x75, 0x2c, 0x16, + 0x4c, 0x00, 0x75, 0x2f, 0x20, 0xf2, 0x00, 0x75, + 0x30, 0x0c, 0x3e, 0x00, 0x75, 0x31, 0x0f, 0x1d, + 0x00, 0x75, 0x32, 0x07, 0xd5, 0x00, 0x75, 0x33, + 0x0a, 0x03, 0x00, 0x75, 0x36, 0x56, 0x00, 0x00, + 0x75, 0x37, 0x0b, 0x89, 0x00, 0x75, 0x38, 0x10, + 0xc9, 0x00, 0x75, 0x39, 0x56, 0x01, 0x00, 0x75, + 0x3a, 0x0b, 0xca, 0x00, 0x75, 0x3b, 0x05, 0x68, + 0x00, 0x75, 0x3c, 0x16, 0x4d, 0x00, 0x75, 0x3d, + 0x46, 0xcd, 0x00, 0x75, 0x3e, 0x46, 0xce, 0x00, + 0x75, 0x3f, 0x4c, 0x5f, 0x00, 0x75, 0x40, 0x46, + 0xcf, 0x00, 0x75, 0x43, 0x56, 0x02, 0x00, 0x75, + 0x44, 0x16, 0x4e, 0x00, 0x75, 0x46, 0x16, 0x53, + 0x00, 0x75, 0x47, 0x56, 0x03, 0x00, 0x75, 0x48, + 0x46, 0xd0, 0x00, 0x75, 0x49, 0x16, 0x51, 0x00, + 0x75, 0x4a, 0x16, 0x50, 0x00, 0x75, 0x4b, 0x13, + 0xc7, 0x00, 0x75, 0x4c, 0x05, 0x84, 0x00, 0x75, + 0x4d, 0x16, 0x4f, 0x00, 0x75, 0x4e, 0x39, 0xfc, + 0x00, 0x75, 0x4f, 0x04, 0x9e, 0x00, 0x75, 0x50, + 0x46, 0xd1, 0x00, 0x75, 0x51, 0x0d, 0x3e, 0x00, + 0x75, 0x52, 0x46, 0xd2, 0x00, 0x75, 0x54, 0x0d, + 0x5e, 0x00, 0x75, 0x57, 0x56, 0x04, 0x00, 0x75, + 0x59, 0x0f, 0x79, 0x00, 0x75, 0x5a, 0x16, 0x54, + 0x00, 0x75, 0x5b, 0x16, 0x52, 0x00, 0x75, 0x5c, + 0x0b, 0x9a, 0x00, 0x75, 0x5d, 0x0a, 0x4a, 0x00, + 0x75, 0x5e, 0x4c, 0x60, 0x00, 0x75, 0x5f, 0x56, + 0x05, 0x00, 0x75, 0x60, 0x0d, 0x3f, 0x00, 0x75, + 0x61, 0x56, 0x06, 0x00, 0x75, 0x62, 0x0d, 0x9f, + 0x00, 0x75, 0x64, 0x16, 0x56, 0x00, 0x75, 0x65, + 0x0f, 0x74, 0x00, 0x75, 0x66, 0x07, 0x23, 0x00, + 0x75, 0x67, 0x16, 0x57, 0x00, 0x75, 0x69, 0x16, + 0x55, 0x00, 0x75, 0x6a, 0x0d, 0x6a, 0x00, 0x75, + 0x6b, 0x16, 0x58, 0x00, 0x75, 0x6c, 0x3c, 0x3b, + 0x00, 0x75, 0x6d, 0x16, 0x59, 0x00, 0x75, 0x6f, + 0x21, 0x75, 0x00, 0x75, 0x70, 0x04, 0x9f, 0x00, + 0x75, 0x71, 0x46, 0xd4, 0x00, 0x75, 0x72, 0x46, + 0xd3, 0x00, 0x75, 0x73, 0x09, 0xde, 0x00, 0x75, + 0x74, 0x16, 0x5e, 0x00, 0x75, 0x75, 0x37, 0x51, + 0x00, 0x75, 0x76, 0x16, 0x5b, 0x00, 0x75, 0x77, + 0x0c, 0xc5, 0x00, 0x75, 0x78, 0x16, 0x5a, 0x00, + 0x75, 0x79, 0x39, 0xfd, 0x00, 0x75, 0x7a, 0x46, + 0xd5, 0x00, 0x75, 0x7b, 0x56, 0x07, 0x00, 0x75, + 0x7c, 0x56, 0x08, 0x00, 0x75, 0x7d, 0x46, 0xd6, + 0x00, 0x75, 0x7e, 0x46, 0xd7, 0x00, 0x75, 0x7f, + 0x06, 0x40, 0x00, 0x75, 0x81, 0x39, 0xfe, 0x00, + 0x75, 0x82, 0x16, 0x61, 0x00, 0x75, 0x85, 0x56, + 0x09, 0x00, 0x75, 0x86, 0x16, 0x5c, 0x00, 0x75, + 0x87, 0x16, 0x5d, 0x00, 0x75, 0x89, 0x16, 0x60, + 0x00, 0x75, 0x8a, 0x16, 0x5f, 0x00, 0x75, 0x8b, + 0x0d, 0x97, 0x00, 0x75, 0x8c, 0x46, 0xd8, 0x00, + 0x75, 0x8e, 0x0a, 0xc4, 0x00, 0x75, 0x8f, 0x0a, + 0xc3, 0x00, 0x75, 0x90, 0x39, 0xff, 0x00, 0x75, + 0x91, 0x06, 0x59, 0x00, 0x75, 0x92, 0x3a, 0x00, + 0x00, 0x75, 0x93, 0x3a, 0x01, 0x00, 0x75, 0x94, + 0x16, 0x62, 0x00, 0x75, 0x95, 0x56, 0x0a, 0x00, + 0x75, 0x99, 0x4c, 0x61, 0x00, 0x75, 0x9a, 0x16, + 0x63, 0x00, 0x75, 0x9c, 0x56, 0x0b, 0x00, 0x75, + 0x9d, 0x16, 0x64, 0x00, 0x75, 0xa2, 0x46, 0xda, + 0x00, 0x75, 0xa3, 0x16, 0x66, 0x00, 0x75, 0xa4, + 0x4c, 0x62, 0x00, 0x75, 0xa5, 0x16, 0x65, 0x00, + 0x75, 0xab, 0x04, 0xf8, 0x00, 0x75, 0xb0, 0x46, + 0xdc, 0x00, 0x75, 0xb1, 0x16, 0x6e, 0x00, 0x75, + 0xb2, 0x0d, 0x7c, 0x00, 0x75, 0xb3, 0x16, 0x68, + 0x00, 0x75, 0xb4, 0x3a, 0x02, 0x00, 0x75, 0xb5, + 0x16, 0x6a, 0x00, 0x75, 0xb7, 0x46, 0xdd, 0x00, + 0x75, 0xb8, 0x16, 0x6c, 0x00, 0x75, 0xb9, 0x0a, + 0x04, 0x00, 0x75, 0xba, 0x56, 0x0c, 0x00, 0x75, + 0xbc, 0x16, 0x6d, 0x00, 0x75, 0xbd, 0x16, 0x6b, + 0x00, 0x75, 0xbe, 0x08, 0xec, 0x00, 0x75, 0xbf, + 0x46, 0xde, 0x00, 0x75, 0xc0, 0x46, 0xdf, 0x00, + 0x75, 0xc1, 0x4c, 0x63, 0x00, 0x75, 0xc2, 0x16, + 0x67, 0x00, 0x75, 0xc3, 0x16, 0x69, 0x00, 0x75, + 0xc4, 0x4c, 0x64, 0x00, 0x75, 0xc5, 0x0d, 0xb4, + 0x00, 0x75, 0xc6, 0x46, 0xe0, 0x00, 0x75, 0xc7, + 0x09, 0xb1, 0x00, 0x75, 0xca, 0x16, 0x70, 0x00, + 0x75, 0xcc, 0x4c, 0x65, 0x00, 0x75, 0xcd, 0x16, + 0x6f, 0x00, 0x75, 0xce, 0x42, 0x59, 0x00, 0x75, + 0xcf, 0x46, 0xe1, 0x00, 0x75, 0xd2, 0x16, 0x71, + 0x00, 0x75, 0xd3, 0x46, 0xe2, 0x00, 0x75, 0xd4, + 0x08, 0xd2, 0x00, 0x75, 0xd5, 0x08, 0x1f, 0x00, + 0x75, 0xd7, 0x4c, 0x66, 0x00, 0x75, 0xd8, 0x0c, + 0x71, 0x00, 0x75, 0xd9, 0x16, 0x72, 0x00, 0x75, + 0xdb, 0x0b, 0xe7, 0x00, 0x75, 0xdc, 0x4c, 0x67, + 0x00, 0x75, 0xdd, 0x46, 0xe3, 0x00, 0x75, 0xde, + 0x16, 0x74, 0x00, 0x75, 0xdf, 0x46, 0xe4, 0x00, + 0x75, 0xe0, 0x46, 0xe5, 0x00, 0x75, 0xe1, 0x4c, + 0x68, 0x00, 0x75, 0xe2, 0x0f, 0x69, 0x00, 0x75, + 0xe3, 0x16, 0x73, 0x00, 0x75, 0xe4, 0x3a, 0x03, + 0x00, 0x75, 0xe7, 0x46, 0xe6, 0x00, 0x75, 0xe9, + 0x0a, 0xeb, 0x00, 0x75, 0xec, 0x37, 0x52, 0x00, + 0x75, 0xee, 0x46, 0xe7, 0x00, 0x75, 0xef, 0x4c, + 0x69, 0x00, 0x75, 0xf0, 0x16, 0x79, 0x00, 0x75, + 0xf1, 0x46, 0xe8, 0x00, 0x75, 0xf2, 0x16, 0x7b, + 0x00, 0x75, 0xf3, 0x16, 0x7c, 0x00, 0x75, 0xf4, + 0x0b, 0x92, 0x00, 0x75, 0xf9, 0x3a, 0x04, 0x00, + 0x75, 0xfa, 0x16, 0x7a, 0x00, 0x75, 0xfc, 0x16, + 0x77, 0x00, 0x75, 0xfe, 0x16, 0x75, 0x00, 0x75, + 0xff, 0x16, 0x76, 0x00, 0x76, 0x00, 0x3a, 0x05, + 0x00, 0x76, 0x01, 0x16, 0x78, 0x00, 0x76, 0x02, + 0x42, 0x5a, 0x00, 0x76, 0x03, 0x46, 0xe9, 0x00, + 0x76, 0x04, 0x4c, 0x6a, 0x00, 0x76, 0x07, 0x46, + 0xeb, 0x00, 0x76, 0x08, 0x42, 0x5b, 0x00, 0x76, + 0x09, 0x16, 0x7f, 0x00, 0x76, 0x0a, 0x3a, 0x06, + 0x00, 0x76, 0x0b, 0x16, 0x7d, 0x00, 0x76, 0x0c, + 0x4c, 0x6b, 0x00, 0x76, 0x0d, 0x16, 0x7e, 0x00, + 0x76, 0x0f, 0x46, 0xec, 0x00, 0x76, 0x12, 0x56, + 0x0d, 0x00, 0x76, 0x13, 0x46, 0xef, 0x00, 0x76, + 0x15, 0x3a, 0x07, 0x00, 0x76, 0x16, 0x3a, 0x08, + 0x00, 0x76, 0x18, 0x46, 0xea, 0x00, 0x76, 0x19, + 0x3a, 0x09, 0x00, 0x76, 0x1b, 0x46, 0xf0, 0x00, + 0x76, 0x1c, 0x46, 0xf1, 0x00, 0x76, 0x1d, 0x4c, + 0x6c, 0x00, 0x76, 0x1e, 0x3a, 0x0a, 0x00, 0x76, + 0x1f, 0x16, 0x80, 0x00, 0x76, 0x20, 0x16, 0x82, + 0x00, 0x76, 0x21, 0x16, 0x83, 0x00, 0x76, 0x22, + 0x16, 0x84, 0x00, 0x76, 0x23, 0x56, 0x0e, 0x00, + 0x76, 0x24, 0x16, 0x85, 0x00, 0x76, 0x25, 0x46, + 0xf3, 0x00, 0x76, 0x26, 0x36, 0x45, 0x00, 0x76, + 0x27, 0x16, 0x81, 0x00, 0x76, 0x28, 0x46, 0xf4, + 0x00, 0x76, 0x29, 0x56, 0x0f, 0x00, 0x76, 0x2d, + 0x3a, 0x0b, 0x00, 0x76, 0x30, 0x16, 0x87, 0x00, + 0x76, 0x32, 0x4c, 0x6d, 0x00, 0x76, 0x33, 0x46, + 0xf6, 0x00, 0x76, 0x34, 0x16, 0x86, 0x00, 0x76, + 0x35, 0x3a, 0x0c, 0x00, 0x76, 0x38, 0x4c, 0x6e, + 0x00, 0x76, 0x39, 0x56, 0x10, 0x00, 0x76, 0x3a, + 0x56, 0x11, 0x00, 0x76, 0x3b, 0x16, 0x88, 0x00, + 0x76, 0x3c, 0x46, 0xf5, 0x00, 0x76, 0x40, 0x56, + 0x12, 0x00, 0x76, 0x41, 0x46, 0xf9, 0x00, 0x76, + 0x42, 0x0f, 0x8d, 0x00, 0x76, 0x43, 0x3a, 0x0d, + 0x00, 0x76, 0x44, 0x56, 0x13, 0x00, 0x76, 0x45, + 0x4c, 0x6f, 0x00, 0x76, 0x46, 0x16, 0x8b, 0x00, + 0x76, 0x47, 0x16, 0x89, 0x00, 0x76, 0x48, 0x16, + 0x8a, 0x00, 0x76, 0x49, 0x46, 0xfb, 0x00, 0x76, + 0x4a, 0x4c, 0x70, 0x00, 0x76, 0x4b, 0x3a, 0x0e, + 0x00, 0x76, 0x4c, 0x06, 0x1e, 0x00, 0x76, 0x4e, + 0x37, 0x53, 0x00, 0x76, 0x52, 0x0f, 0x0a, 0x00, + 0x76, 0x55, 0x46, 0xfc, 0x00, 0x76, 0x56, 0x0e, + 0x1a, 0x00, 0x76, 0x58, 0x16, 0x8d, 0x00, 0x76, + 0x59, 0x56, 0x14, 0x00, 0x76, 0x5c, 0x16, 0x8c, + 0x00, 0x76, 0x5f, 0x4c, 0x71, 0x00, 0x76, 0x61, + 0x16, 0x8e, 0x00, 0x76, 0x62, 0x16, 0x8f, 0x00, + 0x76, 0x64, 0x42, 0x5c, 0x00, 0x76, 0x65, 0x3a, + 0x0f, 0x00, 0x76, 0x67, 0x16, 0x93, 0x00, 0x76, + 0x68, 0x16, 0x90, 0x00, 0x76, 0x69, 0x16, 0x91, + 0x00, 0x76, 0x6a, 0x16, 0x92, 0x00, 0x76, 0x6c, + 0x16, 0x94, 0x00, 0x76, 0x6d, 0x3a, 0x10, 0x00, + 0x76, 0x6e, 0x46, 0xfe, 0x00, 0x76, 0x6f, 0x3a, + 0x11, 0x00, 0x76, 0x70, 0x16, 0x95, 0x00, 0x76, + 0x71, 0x3a, 0x12, 0x00, 0x76, 0x72, 0x16, 0x96, + 0x00, 0x76, 0x74, 0x3a, 0x13, 0x00, 0x76, 0x76, + 0x16, 0x97, 0x00, 0x76, 0x78, 0x16, 0x98, 0x00, + 0x76, 0x7a, 0x0d, 0x43, 0x00, 0x76, 0x7b, 0x0c, + 0x4a, 0x00, 0x76, 0x7c, 0x16, 0x99, 0x00, 0x76, + 0x7d, 0x0d, 0x28, 0x00, 0x76, 0x7e, 0x0d, 0xa6, + 0x00, 0x76, 0x80, 0x16, 0x9a, 0x00, 0x76, 0x81, + 0x42, 0x5d, 0x00, 0x76, 0x82, 0x21, 0x76, 0x00, + 0x76, 0x83, 0x16, 0x9b, 0x00, 0x76, 0x84, 0x0c, + 0x24, 0x00, 0x76, 0x85, 0x56, 0x15, 0x00, 0x76, + 0x86, 0x05, 0x85, 0x00, 0x76, 0x87, 0x07, 0xd6, + 0x00, 0x76, 0x88, 0x16, 0x9c, 0x00, 0x76, 0x8b, + 0x16, 0x9d, 0x00, 0x76, 0x8c, 0x56, 0x16, 0x00, + 0x76, 0x8d, 0x56, 0x17, 0x00, 0x76, 0x8e, 0x16, + 0x9e, 0x00, 0x76, 0x90, 0x08, 0x77, 0x00, 0x76, + 0x93, 0x16, 0xa0, 0x00, 0x76, 0x95, 0x46, 0xff, + 0x00, 0x76, 0x96, 0x16, 0x9f, 0x00, 0x76, 0x99, + 0x16, 0xa1, 0x00, 0x76, 0x9a, 0x16, 0xa2, 0x00, + 0x76, 0x9b, 0x21, 0x79, 0x00, 0x76, 0x9c, 0x21, + 0x77, 0x00, 0x76, 0x9d, 0x42, 0x5e, 0x00, 0x76, + 0x9e, 0x21, 0x78, 0x00, 0x76, 0x9f, 0x56, 0x18, + 0x00, 0x76, 0xa0, 0x47, 0x01, 0x00, 0x76, 0xa1, + 0x47, 0x00, 0x00, 0x76, 0xa2, 0x56, 0x19, 0x00, + 0x76, 0xa3, 0x56, 0x1a, 0x00, 0x76, 0xa4, 0x3a, + 0x14, 0x00, 0x76, 0xa5, 0x3a, 0x15, 0x00, 0x76, + 0xa6, 0x21, 0x7a, 0x00, 0x76, 0xa7, 0x47, 0x02, + 0x00, 0x76, 0xa8, 0x47, 0x03, 0x00, 0x76, 0xaa, + 0x42, 0x5f, 0x00, 0x76, 0xad, 0x4c, 0x72, 0x00, + 0x76, 0xae, 0x0d, 0x7d, 0x00, 0x76, 0xaf, 0x47, + 0x04, 0x00, 0x76, 0xb0, 0x16, 0xa3, 0x00, 0x76, + 0xb4, 0x16, 0xa4, 0x00, 0x76, 0xb6, 0x42, 0x60, + 0x00, 0x76, 0xb7, 0x1d, 0x1c, 0x00, 0x76, 0xb8, + 0x16, 0xa5, 0x00, 0x76, 0xb9, 0x16, 0xa6, 0x00, + 0x76, 0xba, 0x16, 0xa7, 0x00, 0x76, 0xbd, 0x4c, + 0x73, 0x00, 0x76, 0xbf, 0x08, 0x7c, 0x00, 0x76, + 0xc1, 0x56, 0x1b, 0x00, 0x76, 0xc2, 0x16, 0xa8, + 0x00, 0x76, 0xc3, 0x0d, 0x0c, 0x00, 0x76, 0xc5, + 0x3a, 0x16, 0x00, 0x76, 0xc6, 0x0e, 0x8d, 0x00, + 0x76, 0xc8, 0x04, 0xf0, 0x00, 0x76, 0xc9, 0x47, + 0x06, 0x00, 0x76, 0xca, 0x04, 0xf9, 0x00, 0x76, + 0xcb, 0x56, 0x1c, 0x00, 0x76, 0xcc, 0x3a, 0x17, + 0x00, 0x76, 0xcd, 0x16, 0xa9, 0x00, 0x76, 0xce, + 0x42, 0x61, 0x00, 0x76, 0xd2, 0x16, 0xab, 0x00, + 0x76, 0xd4, 0x42, 0x62, 0x00, 0x76, 0xd6, 0x16, + 0xaa, 0x00, 0x76, 0xd7, 0x0c, 0x6a, 0x00, 0x76, + 0xd9, 0x4c, 0x74, 0x00, 0x76, 0xdb, 0x0a, 0x5d, + 0x00, 0x76, 0xdc, 0x14, 0xd8, 0x00, 0x76, 0xde, + 0x16, 0xac, 0x00, 0x76, 0xdf, 0x0e, 0xcd, 0x00, + 0x76, 0xe0, 0x56, 0x1e, 0x00, 0x76, 0xe1, 0x16, + 0xad, 0x00, 0x76, 0xe3, 0x06, 0x02, 0x00, 0x76, + 0xe4, 0x0d, 0x6b, 0x00, 0x76, 0xe5, 0x16, 0xae, + 0x00, 0x76, 0xe6, 0x42, 0x63, 0x00, 0x76, 0xe7, + 0x16, 0xaf, 0x00, 0x76, 0xe8, 0x47, 0x08, 0x00, + 0x76, 0xea, 0x16, 0xb0, 0x00, 0x76, 0xeb, 0x4c, + 0x75, 0x00, 0x76, 0xec, 0x3a, 0x18, 0x00, 0x76, + 0xee, 0x0e, 0xe8, 0x00, 0x76, 0xf0, 0x4c, 0x76, + 0x00, 0x76, 0xf1, 0x42, 0x64, 0x00, 0x76, 0xf2, + 0x0e, 0xe1, 0x00, 0x76, 0xf4, 0x0b, 0xda, 0x00, + 0x76, 0xf6, 0x56, 0x1f, 0x00, 0x76, 0xf8, 0x0a, + 0xec, 0x00, 0x76, 0xf9, 0x4c, 0x77, 0x00, 0x76, + 0xfb, 0x16, 0xb2, 0x00, 0x76, 0xfc, 0x3a, 0x19, + 0x00, 0x76, 0xfe, 0x09, 0x6c, 0x00, 0x77, 0x00, + 0x4c, 0x78, 0x00, 0x77, 0x01, 0x09, 0xb2, 0x00, + 0x77, 0x04, 0x16, 0xb5, 0x00, 0x77, 0x06, 0x56, + 0x20, 0x00, 0x77, 0x07, 0x16, 0xb4, 0x00, 0x77, + 0x08, 0x16, 0xb3, 0x00, 0x77, 0x09, 0x0d, 0x91, + 0x00, 0x77, 0x0a, 0x42, 0x65, 0x00, 0x77, 0x0b, + 0x06, 0x03, 0x00, 0x77, 0x0c, 0x07, 0x5d, 0x00, + 0x77, 0x0e, 0x4c, 0x79, 0x00, 0x77, 0x12, 0x56, + 0x21, 0x00, 0x77, 0x14, 0x56, 0x22, 0x00, 0x77, + 0x15, 0x56, 0x23, 0x00, 0x77, 0x17, 0x47, 0x0a, + 0x00, 0x77, 0x19, 0x42, 0x66, 0x00, 0x77, 0x1a, + 0x47, 0x0b, 0x00, 0x77, 0x1b, 0x16, 0xbb, 0x00, + 0x77, 0x1c, 0x56, 0x24, 0x00, 0x77, 0x1e, 0x34, + 0x2d, 0x00, 0x77, 0x1f, 0x0a, 0x05, 0x00, 0x77, + 0x20, 0x0e, 0xbe, 0x00, 0x77, 0x22, 0x4c, 0x7a, + 0x00, 0x77, 0x24, 0x16, 0xb7, 0x00, 0x77, 0x25, + 0x16, 0xb9, 0x00, 0x77, 0x26, 0x16, 0xba, 0x00, + 0x77, 0x28, 0x4c, 0x7b, 0x00, 0x77, 0x29, 0x16, + 0xb6, 0x00, 0x77, 0x2d, 0x47, 0x0c, 0x00, 0x77, + 0x2e, 0x56, 0x25, 0x00, 0x77, 0x2f, 0x4c, 0x7c, + 0x00, 0x77, 0x34, 0x3a, 0x1a, 0x00, 0x77, 0x35, + 0x47, 0x0d, 0x00, 0x77, 0x36, 0x3a, 0x1b, 0x00, + 0x77, 0x37, 0x16, 0xbc, 0x00, 0x77, 0x38, 0x16, + 0xbd, 0x00, 0x77, 0x39, 0x4c, 0x7d, 0x00, 0x77, + 0x3a, 0x0b, 0xcb, 0x00, 0x77, 0x3c, 0x06, 0x1f, + 0x00, 0x77, 0x3d, 0x56, 0x26, 0x00, 0x77, 0x3e, + 0x4c, 0x7e, 0x00, 0x77, 0x40, 0x0b, 0xa3, 0x00, + 0x77, 0x42, 0x56, 0x27, 0x00, 0x77, 0x45, 0x4c, + 0x7f, 0x00, 0x77, 0x46, 0x21, 0x7c, 0x00, 0x77, + 0x47, 0x16, 0xbe, 0x00, 0x77, 0x4a, 0x4c, 0x80, + 0x00, 0x77, 0x4d, 0x42, 0x67, 0x00, 0x77, 0x4e, + 0x42, 0x68, 0x00, 0x77, 0x4f, 0x4c, 0x81, 0x00, + 0x77, 0x52, 0x56, 0x28, 0x00, 0x77, 0x56, 0x56, + 0x29, 0x00, 0x77, 0x57, 0x56, 0x2a, 0x00, 0x77, + 0x58, 0x47, 0x12, 0x00, 0x77, 0x5a, 0x16, 0xbf, + 0x00, 0x77, 0x5b, 0x16, 0xc2, 0x00, 0x77, 0x5c, + 0x3a, 0x1c, 0x00, 0x77, 0x5e, 0x4c, 0x82, 0x00, + 0x77, 0x5f, 0x3a, 0x1d, 0x00, 0x77, 0x60, 0x3a, + 0x1e, 0x00, 0x77, 0x61, 0x0a, 0x2d, 0x00, 0x77, + 0x62, 0x1e, 0xc5, 0x00, 0x77, 0x63, 0x0c, 0x9c, + 0x00, 0x77, 0x64, 0x4c, 0x83, 0x00, 0x77, 0x65, + 0x16, 0xc3, 0x00, 0x77, 0x66, 0x0e, 0x81, 0x00, + 0x77, 0x67, 0x4c, 0x84, 0x00, 0x77, 0x68, 0x16, + 0xc0, 0x00, 0x77, 0x6a, 0x37, 0x55, 0x00, 0x77, + 0x6b, 0x16, 0xc1, 0x00, 0x77, 0x6c, 0x4c, 0x85, + 0x00, 0x77, 0x70, 0x56, 0x2b, 0x00, 0x77, 0x72, + 0x3a, 0x1f, 0x00, 0x77, 0x73, 0x56, 0x2c, 0x00, + 0x77, 0x74, 0x56, 0x2d, 0x00, 0x77, 0x79, 0x16, + 0xc6, 0x00, 0x77, 0x7a, 0x42, 0x69, 0x00, 0x77, + 0x7c, 0x47, 0x14, 0x00, 0x77, 0x7d, 0x3a, 0x20, + 0x00, 0x77, 0x7e, 0x16, 0xc5, 0x00, 0x77, 0x7f, + 0x16, 0xc4, 0x00, 0x77, 0x80, 0x42, 0x6a, 0x00, + 0x77, 0x84, 0x4c, 0x86, 0x00, 0x77, 0x8b, 0x16, + 0xc8, 0x00, 0x77, 0x8c, 0x4c, 0x87, 0x00, 0x77, + 0x8d, 0x4c, 0x88, 0x00, 0x77, 0x8e, 0x16, 0xc7, + 0x00, 0x77, 0x91, 0x16, 0xc9, 0x00, 0x77, 0x94, + 0x42, 0x6b, 0x00, 0x77, 0x95, 0x3a, 0x21, 0x00, + 0x77, 0x96, 0x4c, 0x89, 0x00, 0x77, 0x9a, 0x47, + 0x17, 0x00, 0x77, 0x9e, 0x16, 0xcb, 0x00, 0x77, + 0x9f, 0x47, 0x18, 0x00, 0x77, 0xa0, 0x16, 0xca, + 0x00, 0x77, 0xa2, 0x47, 0x19, 0x00, 0x77, 0xa4, + 0x47, 0x1a, 0x00, 0x77, 0xa5, 0x0e, 0x1d, 0x00, + 0x77, 0xa7, 0x4c, 0x8a, 0x00, 0x77, 0xa9, 0x37, + 0x56, 0x00, 0x77, 0xaa, 0x3a, 0x22, 0x00, 0x77, + 0xac, 0x09, 0x60, 0x00, 0x77, 0xad, 0x0f, 0x8e, + 0x00, 0x77, 0xae, 0x56, 0x30, 0x00, 0x77, 0xaf, + 0x4c, 0x8b, 0x00, 0x77, 0xb0, 0x16, 0xcc, 0x00, + 0x77, 0xb1, 0x56, 0x31, 0x00, 0x77, 0xb3, 0x0c, + 0x8f, 0x00, 0x77, 0xb5, 0x56, 0x32, 0x00, 0x77, + 0xb6, 0x16, 0xcd, 0x00, 0x77, 0xb7, 0x4c, 0x8c, + 0x00, 0x77, 0xb9, 0x16, 0xce, 0x00, 0x77, 0xbb, + 0x16, 0xd2, 0x00, 0x77, 0xbc, 0x16, 0xd0, 0x00, + 0x77, 0xbd, 0x16, 0xd1, 0x00, 0x77, 0xbe, 0x4c, + 0x8d, 0x00, 0x77, 0xbf, 0x16, 0xcf, 0x00, 0x77, + 0xc3, 0x56, 0x33, 0x00, 0x77, 0xc7, 0x16, 0xd3, + 0x00, 0x77, 0xc9, 0x4c, 0x8e, 0x00, 0x77, 0xcd, + 0x16, 0xd4, 0x00, 0x77, 0xd1, 0x4c, 0x8f, 0x00, + 0x77, 0xd2, 0x56, 0x34, 0x00, 0x77, 0xd5, 0x56, + 0x35, 0x00, 0x77, 0xd7, 0x16, 0xd5, 0x00, 0x77, + 0xd9, 0x4c, 0x90, 0x00, 0x77, 0xda, 0x16, 0xd6, + 0x00, 0x77, 0xdb, 0x0e, 0xc3, 0x00, 0x77, 0xdc, + 0x16, 0xd7, 0x00, 0x77, 0xde, 0x47, 0x1b, 0x00, + 0x77, 0xdf, 0x47, 0x1c, 0x00, 0x77, 0xe0, 0x42, + 0x6c, 0x00, 0x77, 0xe2, 0x0e, 0xfc, 0x00, 0x77, + 0xe3, 0x16, 0xd8, 0x00, 0x77, 0xe4, 0x47, 0x1d, + 0x00, 0x77, 0xe5, 0x0b, 0x8c, 0x00, 0x77, 0xe6, + 0x3a, 0x23, 0x00, 0x77, 0xe7, 0x0d, 0x20, 0x00, + 0x77, 0xe9, 0x06, 0xe3, 0x00, 0x77, 0xea, 0x47, + 0x1e, 0x00, 0x77, 0xec, 0x47, 0x1f, 0x00, 0x77, + 0xed, 0x0b, 0x79, 0x00, 0x77, 0xee, 0x16, 0xd9, + 0x00, 0x77, 0xef, 0x06, 0xb2, 0x00, 0x77, 0xf0, + 0x3a, 0x24, 0x00, 0x77, 0xf1, 0x4c, 0x91, 0x00, + 0x77, 0xf3, 0x0a, 0x74, 0x00, 0x77, 0xf4, 0x3a, + 0x25, 0x00, 0x77, 0xf8, 0x56, 0x36, 0x00, 0x77, + 0xfb, 0x47, 0x20, 0x00, 0x77, 0xfc, 0x16, 0xda, + 0x00, 0x78, 0x02, 0x08, 0x2d, 0x00, 0x78, 0x05, + 0x47, 0x22, 0x00, 0x78, 0x06, 0x3a, 0x26, 0x00, + 0x78, 0x09, 0x47, 0x23, 0x00, 0x78, 0x0c, 0x16, + 0xdb, 0x00, 0x78, 0x0d, 0x47, 0x24, 0x00, 0x78, + 0x0e, 0x56, 0x37, 0x00, 0x78, 0x11, 0x56, 0x38, + 0x00, 0x78, 0x12, 0x16, 0xdc, 0x00, 0x78, 0x14, + 0x07, 0x5a, 0x00, 0x78, 0x15, 0x08, 0x45, 0x00, + 0x78, 0x19, 0x47, 0x25, 0x00, 0x78, 0x1d, 0x56, + 0x39, 0x00, 0x78, 0x20, 0x16, 0xde, 0x00, 0x78, + 0x21, 0x21, 0x7e, 0x00, 0x78, 0x22, 0x3a, 0x27, + 0x00, 0x78, 0x23, 0x56, 0x3a, 0x00, 0x78, 0x25, + 0x0c, 0x50, 0x00, 0x78, 0x26, 0x08, 0x46, 0x00, + 0x78, 0x27, 0x06, 0x68, 0x00, 0x78, 0x2c, 0x47, + 0x26, 0x00, 0x78, 0x2d, 0x3a, 0x28, 0x00, 0x78, + 0x2e, 0x3a, 0x29, 0x00, 0x78, 0x30, 0x3a, 0x2a, + 0x00, 0x78, 0x32, 0x0e, 0x52, 0x00, 0x78, 0x34, + 0x0d, 0x01, 0x00, 0x78, 0x35, 0x3a, 0x2b, 0x00, + 0x78, 0x37, 0x4c, 0x92, 0x00, 0x78, 0x3a, 0x0c, + 0x51, 0x00, 0x78, 0x3f, 0x07, 0xee, 0x00, 0x78, + 0x43, 0x42, 0x6e, 0x00, 0x78, 0x44, 0x56, 0x3b, + 0x00, 0x78, 0x45, 0x16, 0xe0, 0x00, 0x78, 0x47, + 0x47, 0x27, 0x00, 0x78, 0x48, 0x56, 0x3c, 0x00, + 0x78, 0x4c, 0x56, 0x3d, 0x00, 0x78, 0x4e, 0x21, + 0x7f, 0x00, 0x78, 0x4f, 0x34, 0x1e, 0x00, 0x78, + 0x51, 0x3c, 0x3c, 0x00, 0x78, 0x52, 0x56, 0x3e, + 0x00, 0x78, 0x5c, 0x4c, 0x93, 0x00, 0x78, 0x5d, + 0x09, 0xb3, 0x00, 0x78, 0x5e, 0x56, 0x3f, 0x00, + 0x78, 0x60, 0x56, 0x40, 0x00, 0x78, 0x61, 0x56, + 0x41, 0x00, 0x78, 0x63, 0x56, 0x42, 0x00, 0x78, + 0x64, 0x21, 0x80, 0x00, 0x78, 0x68, 0x3a, 0x2c, + 0x00, 0x78, 0x6a, 0x47, 0x28, 0x00, 0x78, 0x6b, + 0x0f, 0x7a, 0x00, 0x78, 0x6c, 0x07, 0xd7, 0x00, + 0x78, 0x6e, 0x42, 0x6f, 0x00, 0x78, 0x6f, 0x07, + 0x5b, 0x00, 0x78, 0x72, 0x0d, 0x37, 0x00, 0x78, + 0x74, 0x16, 0xe2, 0x00, 0x78, 0x7a, 0x21, 0x81, + 0x00, 0x78, 0x7c, 0x16, 0xe4, 0x00, 0x78, 0x7e, + 0x4c, 0x94, 0x00, 0x78, 0x81, 0x07, 0x9f, 0x00, + 0x78, 0x86, 0x16, 0xe3, 0x00, 0x78, 0x87, 0x0c, + 0x12, 0x00, 0x78, 0x8a, 0x47, 0x2a, 0x00, 0x78, + 0x8c, 0x16, 0xe6, 0x00, 0x78, 0x8d, 0x05, 0x95, + 0x00, 0x78, 0x8e, 0x16, 0xe1, 0x00, 0x78, 0x8f, + 0x56, 0x43, 0x00, 0x78, 0x91, 0x34, 0x43, 0x00, + 0x78, 0x93, 0x04, 0xd2, 0x00, 0x78, 0x94, 0x47, + 0x2b, 0x00, 0x78, 0x95, 0x08, 0x5c, 0x00, 0x78, + 0x97, 0x0f, 0xf8, 0x00, 0x78, 0x98, 0x4c, 0x95, + 0x00, 0x78, 0x9a, 0x16, 0xe5, 0x00, 0x78, 0x9d, + 0x47, 0x2d, 0x00, 0x78, 0x9e, 0x3a, 0x2d, 0x00, + 0x78, 0x9f, 0x47, 0x2e, 0x00, 0x78, 0xa1, 0x4c, + 0x96, 0x00, 0x78, 0xa3, 0x16, 0xe7, 0x00, 0x78, + 0xa4, 0x47, 0x2c, 0x00, 0x78, 0xa7, 0x0e, 0x1b, + 0x00, 0x78, 0xa8, 0x56, 0x44, 0x00, 0x78, 0xa9, + 0x0a, 0x7d, 0x00, 0x78, 0xaa, 0x16, 0xe9, 0x00, + 0x78, 0xac, 0x56, 0x45, 0x00, 0x78, 0xad, 0x42, + 0x72, 0x00, 0x78, 0xaf, 0x16, 0xea, 0x00, 0x78, + 0xb0, 0x42, 0x70, 0x00, 0x78, 0xb1, 0x4c, 0x97, + 0x00, 0x78, 0xb2, 0x56, 0x46, 0x00, 0x78, 0xb3, + 0x4c, 0x98, 0x00, 0x78, 0xb5, 0x16, 0xe8, 0x00, + 0x78, 0xba, 0x05, 0xac, 0x00, 0x78, 0xbb, 0x47, + 0x2f, 0x00, 0x78, 0xbc, 0x16, 0xf0, 0x00, 0x78, + 0xbd, 0x56, 0x47, 0x00, 0x78, 0xbe, 0x16, 0xef, + 0x00, 0x78, 0xbf, 0x56, 0x48, 0x00, 0x78, 0xc1, + 0x08, 0xd3, 0x00, 0x78, 0xc5, 0x16, 0xf1, 0x00, + 0x78, 0xc6, 0x16, 0xec, 0x00, 0x78, 0xc7, 0x56, + 0x49, 0x00, 0x78, 0xc8, 0x3a, 0x2e, 0x00, 0x78, + 0xc9, 0x4c, 0x99, 0x00, 0x78, 0xca, 0x16, 0xf2, + 0x00, 0x78, 0xcb, 0x16, 0xed, 0x00, 0x78, 0xcc, + 0x3a, 0x2f, 0x00, 0x78, 0xce, 0x3a, 0x30, 0x00, + 0x78, 0xd0, 0x0d, 0x6c, 0x00, 0x78, 0xd1, 0x16, + 0xeb, 0x00, 0x78, 0xd2, 0x56, 0x4a, 0x00, 0x78, + 0xd3, 0x4c, 0x9a, 0x00, 0x78, 0xd4, 0x16, 0xee, + 0x00, 0x78, 0xd5, 0x47, 0x30, 0x00, 0x78, 0xd6, + 0x56, 0x4b, 0x00, 0x78, 0xda, 0x16, 0xf5, 0x00, + 0x78, 0xdb, 0x56, 0x4c, 0x00, 0x78, 0xdf, 0x56, + 0x4d, 0x00, 0x78, 0xe0, 0x3a, 0x32, 0x00, 0x78, + 0xe1, 0x3a, 0x33, 0x00, 0x78, 0xe4, 0x3a, 0x31, + 0x00, 0x78, 0xe6, 0x47, 0x31, 0x00, 0x78, 0xe7, + 0x16, 0xf4, 0x00, 0x78, 0xe8, 0x0e, 0x8f, 0x00, + 0x78, 0xea, 0x56, 0x4e, 0x00, 0x78, 0xec, 0x16, + 0xf3, 0x00, 0x78, 0xef, 0x04, 0xaf, 0x00, 0x78, + 0xf2, 0x3a, 0x34, 0x00, 0x78, 0xf3, 0x56, 0x4f, + 0x00, 0x78, 0xf4, 0x16, 0xf7, 0x00, 0x78, 0xf6, + 0x56, 0x50, 0x00, 0x78, 0xf7, 0x3a, 0x35, 0x00, + 0x78, 0xf9, 0x47, 0x32, 0x00, 0x78, 0xfa, 0x47, + 0x33, 0x00, 0x78, 0xfb, 0x3a, 0x36, 0x00, 0x78, + 0xfd, 0x16, 0xf6, 0x00, 0x78, 0xfe, 0x47, 0x34, + 0x00, 0x78, 0xff, 0x56, 0x51, 0x00, 0x79, 0x00, + 0x42, 0x73, 0x00, 0x79, 0x01, 0x09, 0xb4, 0x00, + 0x79, 0x06, 0x56, 0x52, 0x00, 0x79, 0x07, 0x16, + 0xf8, 0x00, 0x79, 0x0c, 0x4c, 0x9b, 0x00, 0x79, + 0x0e, 0x0a, 0xc5, 0x00, 0x79, 0x10, 0x47, 0x36, + 0x00, 0x79, 0x11, 0x16, 0xfa, 0x00, 0x79, 0x12, + 0x16, 0xf9, 0x00, 0x79, 0x19, 0x16, 0xfb, 0x00, + 0x79, 0x1a, 0x56, 0x53, 0x00, 0x79, 0x1b, 0x47, + 0x37, 0x00, 0x79, 0x1c, 0x42, 0x74, 0x00, 0x79, + 0x1e, 0x56, 0x54, 0x00, 0x79, 0x1f, 0x4c, 0x9c, + 0x00, 0x79, 0x20, 0x56, 0x55, 0x00, 0x79, 0x25, + 0x47, 0x38, 0x00, 0x79, 0x26, 0x16, 0xdd, 0x00, + 0x79, 0x27, 0x4c, 0x9d, 0x00, 0x79, 0x28, 0x4c, + 0x9e, 0x00, 0x79, 0x29, 0x56, 0x56, 0x00, 0x79, + 0x2a, 0x16, 0xdf, 0x00, 0x79, 0x2b, 0x16, 0xfd, + 0x00, 0x79, 0x2c, 0x16, 0xfc, 0x00, 0x79, 0x2d, + 0x56, 0x57, 0x00, 0x79, 0x2e, 0x42, 0x75, 0x00, + 0x79, 0x30, 0x21, 0x82, 0x00, 0x79, 0x31, 0x3a, + 0x37, 0x00, 0x79, 0x34, 0x42, 0x76, 0x00, 0x79, + 0x35, 0x56, 0x58, 0x00, 0x79, 0x3a, 0x4a, 0xba, + 0x00, 0x79, 0x3b, 0x3a, 0x39, 0x00, 0x79, 0x3c, + 0x0f, 0xb1, 0x00, 0x79, 0x3d, 0x3a, 0x3a, 0x00, + 0x79, 0x3e, 0x08, 0xfe, 0x00, 0x79, 0x3f, 0x4c, + 0x9f, 0x00, 0x79, 0x40, 0x16, 0xfe, 0x00, 0x79, + 0x41, 0x07, 0x0d, 0x00, 0x79, 0x42, 0x4c, 0xa0, + 0x00, 0x79, 0x44, 0x56, 0x59, 0x00, 0x79, 0x45, + 0x3a, 0x3b, 0x00, 0x79, 0x46, 0x42, 0x77, 0x00, + 0x79, 0x47, 0x06, 0x5a, 0x00, 0x79, 0x48, 0x34, + 0x17, 0x00, 0x79, 0x49, 0x08, 0xb1, 0x00, 0x79, + 0x4a, 0x47, 0x39, 0x00, 0x79, 0x4b, 0x56, 0x5a, + 0x00, 0x79, 0x4f, 0x56, 0x5b, 0x00, 0x79, 0x50, + 0x34, 0x4f, 0x00, 0x79, 0x51, 0x56, 0x5c, 0x00, + 0x79, 0x53, 0x17, 0x04, 0x00, 0x79, 0x54, 0x4c, + 0xa1, 0x00, 0x79, 0x55, 0x17, 0x03, 0x00, 0x79, + 0x56, 0x0a, 0xc6, 0x00, 0x79, 0x57, 0x17, 0x00, + 0x00, 0x79, 0x58, 0x47, 0x3a, 0x00, 0x79, 0x5a, + 0x17, 0x02, 0x00, 0x79, 0x5b, 0x3a, 0x3c, 0x00, + 0x79, 0x5c, 0x3a, 0x3d, 0x00, 0x79, 0x5d, 0x34, + 0x27, 0x00, 0x79, 0x5e, 0x21, 0x84, 0x00, 0x79, + 0x5f, 0x17, 0x01, 0x00, 0x79, 0x60, 0x16, 0xff, + 0x00, 0x79, 0x62, 0x0c, 0xe0, 0x00, 0x79, 0x65, + 0x21, 0x85, 0x00, 0x79, 0x67, 0x47, 0x3c, 0x00, + 0x79, 0x68, 0x0d, 0xae, 0x00, 0x79, 0x69, 0x56, + 0x5d, 0x00, 0x79, 0x6b, 0x4c, 0xa2, 0x00, 0x79, + 0x6d, 0x08, 0x47, 0x00, 0x79, 0x72, 0x47, 0x3d, + 0x00, 0x79, 0x77, 0x0c, 0x72, 0x00, 0x79, 0x79, + 0x42, 0x78, 0x00, 0x79, 0x7a, 0x17, 0x05, 0x00, + 0x79, 0x7b, 0x56, 0x5e, 0x00, 0x79, 0x7c, 0x4c, + 0xa3, 0x00, 0x79, 0x7e, 0x56, 0x5f, 0x00, 0x79, + 0x7f, 0x17, 0x06, 0x00, 0x79, 0x80, 0x17, 0x1c, + 0x00, 0x79, 0x81, 0x06, 0xd0, 0x00, 0x79, 0x84, + 0x0f, 0xe3, 0x00, 0x79, 0x85, 0x0a, 0xb7, 0x00, + 0x79, 0x8a, 0x17, 0x07, 0x00, 0x79, 0x8b, 0x3a, + 0x3e, 0x00, 0x79, 0x8c, 0x56, 0x60, 0x00, 0x79, + 0x8d, 0x34, 0x0d, 0x00, 0x79, 0x8e, 0x0c, 0x13, + 0x00, 0x79, 0x8f, 0x0d, 0xf1, 0x00, 0x79, 0x91, + 0x56, 0x61, 0x00, 0x79, 0x93, 0x56, 0x62, 0x00, + 0x79, 0x94, 0x21, 0x86, 0x00, 0x79, 0x95, 0x47, + 0x3e, 0x00, 0x79, 0x96, 0x3a, 0x3f, 0x00, 0x79, + 0x98, 0x3a, 0x40, 0x00, 0x79, 0x9b, 0x21, 0x88, + 0x00, 0x79, 0x9c, 0x56, 0x63, 0x00, 0x79, 0x9d, + 0x17, 0x08, 0x00, 0x79, 0xa1, 0x47, 0x3f, 0x00, + 0x79, 0xa6, 0x06, 0x94, 0x00, 0x79, 0xa7, 0x17, + 0x09, 0x00, 0x79, 0xa8, 0x56, 0x64, 0x00, 0x79, + 0xa9, 0x47, 0x40, 0x00, 0x79, 0xaa, 0x17, 0x0b, + 0x00, 0x79, 0xab, 0x4c, 0xa4, 0x00, 0x79, 0xae, + 0x17, 0x0c, 0x00, 0x79, 0xaf, 0x56, 0x65, 0x00, + 0x79, 0xb0, 0x0c, 0xdf, 0x00, 0x79, 0xb1, 0x1e, + 0x4e, 0x00, 0x79, 0xb3, 0x17, 0x0d, 0x00, 0x79, + 0xb4, 0x47, 0x41, 0x00, 0x79, 0xb8, 0x3a, 0x41, + 0x00, 0x79, 0xb9, 0x17, 0x0e, 0x00, 0x79, 0xba, + 0x17, 0x0f, 0x00, 0x79, 0xbb, 0x3a, 0x42, 0x00, + 0x79, 0xbd, 0x06, 0xd1, 0x00, 0x79, 0xbe, 0x05, + 0x53, 0x00, 0x79, 0xbf, 0x0c, 0x9d, 0x00, 0x79, + 0xc0, 0x09, 0x32, 0x00, 0x79, 0xc1, 0x08, 0xb2, + 0x00, 0x79, 0xc2, 0x47, 0x42, 0x00, 0x79, 0xc4, + 0x4c, 0xa5, 0x00, 0x79, 0xc7, 0x47, 0x43, 0x00, + 0x79, 0xc8, 0x42, 0x79, 0x00, 0x79, 0xc9, 0x17, + 0x10, 0x00, 0x79, 0xca, 0x3a, 0x43, 0x00, 0x79, + 0xcb, 0x09, 0x33, 0x00, 0x79, 0xcc, 0x47, 0x44, + 0x00, 0x79, 0xcd, 0x47, 0x45, 0x00, 0x79, 0xcf, + 0x56, 0x66, 0x00, 0x79, 0xd1, 0x05, 0x4a, 0x00, + 0x79, 0xd2, 0x0d, 0xb5, 0x00, 0x79, 0xd4, 0x42, + 0x7b, 0x00, 0x79, 0xd5, 0x17, 0x11, 0x00, 0x79, + 0xd6, 0x47, 0x46, 0x00, 0x79, 0xd8, 0x0d, 0x7f, + 0x00, 0x79, 0xda, 0x3a, 0x44, 0x00, 0x79, 0xdd, + 0x56, 0x67, 0x00, 0x79, 0xde, 0x42, 0x7c, 0x00, + 0x79, 0xdf, 0x0a, 0xc7, 0x00, 0x79, 0xe0, 0x56, + 0x68, 0x00, 0x79, 0xe1, 0x17, 0x14, 0x00, 0x79, + 0xe2, 0x56, 0x69, 0x00, 0x79, 0xe3, 0x17, 0x15, + 0x00, 0x79, 0xe4, 0x0d, 0x1f, 0x00, 0x79, 0xe5, + 0x56, 0x6a, 0x00, 0x79, 0xe6, 0x0a, 0x07, 0x00, + 0x79, 0xe7, 0x17, 0x12, 0x00, 0x79, 0xe9, 0x0b, + 0x9f, 0x00, 0x79, 0xea, 0x4c, 0xa6, 0x00, 0x79, + 0xeb, 0x42, 0x7d, 0x00, 0x79, 0xec, 0x17, 0x13, + 0x00, 0x79, 0xed, 0x42, 0x7e, 0x00, 0x79, 0xf0, + 0x09, 0xb6, 0x00, 0x79, 0xf1, 0x56, 0x6b, 0x00, + 0x79, 0xf8, 0x56, 0x6c, 0x00, 0x79, 0xfb, 0x04, + 0xa0, 0x00, 0x79, 0xfc, 0x56, 0x6d, 0x00, 0x7a, + 0x00, 0x06, 0x43, 0x00, 0x7a, 0x02, 0x4c, 0xa7, + 0x00, 0x7a, 0x03, 0x3a, 0x45, 0x00, 0x7a, 0x05, + 0x36, 0x33, 0x00, 0x7a, 0x07, 0x56, 0x6e, 0x00, + 0x7a, 0x08, 0x17, 0x16, 0x00, 0x7a, 0x09, 0x3a, + 0x46, 0x00, 0x7a, 0x0a, 0x47, 0x4b, 0x00, 0x7a, + 0x0b, 0x0c, 0x14, 0x00, 0x7a, 0x0c, 0x4c, 0xa8, + 0x00, 0x7a, 0x0d, 0x17, 0x17, 0x00, 0x7a, 0x0e, + 0x0a, 0x6b, 0x00, 0x7a, 0x11, 0x3a, 0x47, 0x00, + 0x7a, 0x14, 0x0e, 0xb9, 0x00, 0x7a, 0x15, 0x47, + 0x4c, 0x00, 0x7a, 0x17, 0x0d, 0x95, 0x00, 0x7a, + 0x18, 0x17, 0x18, 0x00, 0x7a, 0x19, 0x17, 0x19, + 0x00, 0x7a, 0x1a, 0x0b, 0x93, 0x00, 0x7a, 0x1b, + 0x47, 0x4d, 0x00, 0x7a, 0x1c, 0x0f, 0x8f, 0x00, + 0x7a, 0x1e, 0x3a, 0x48, 0x00, 0x7a, 0x1f, 0x17, + 0x1b, 0x00, 0x7a, 0x20, 0x17, 0x1a, 0x00, 0x7a, + 0x21, 0x56, 0x6f, 0x00, 0x7a, 0x27, 0x56, 0x70, + 0x00, 0x7a, 0x2b, 0x56, 0x71, 0x00, 0x7a, 0x2d, + 0x3a, 0x49, 0x00, 0x7a, 0x2e, 0x09, 0x1b, 0x00, + 0x7a, 0x2f, 0x56, 0x72, 0x00, 0x7a, 0x30, 0x4c, + 0xa9, 0x00, 0x7a, 0x31, 0x17, 0x1d, 0x00, 0x7a, + 0x32, 0x04, 0xb4, 0x00, 0x7a, 0x34, 0x56, 0x73, + 0x00, 0x7a, 0x35, 0x56, 0x74, 0x00, 0x7a, 0x37, + 0x17, 0x20, 0x00, 0x7a, 0x38, 0x47, 0x4f, 0x00, + 0x7a, 0x39, 0x3a, 0x4a, 0x00, 0x7a, 0x3a, 0x4c, + 0xaa, 0x00, 0x7a, 0x3b, 0x17, 0x1e, 0x00, 0x7a, + 0x3c, 0x05, 0x54, 0x00, 0x7a, 0x3d, 0x07, 0x24, + 0x00, 0x7a, 0x3e, 0x17, 0x1f, 0x00, 0x7a, 0x3f, + 0x07, 0xd8, 0x00, 0x7a, 0x40, 0x34, 0x1f, 0x00, + 0x7a, 0x42, 0x0e, 0x36, 0x00, 0x7a, 0x43, 0x17, + 0x21, 0x00, 0x7a, 0x44, 0x4c, 0xab, 0x00, 0x7a, + 0x45, 0x3a, 0x4b, 0x00, 0x7a, 0x46, 0x0e, 0x82, + 0x00, 0x7a, 0x47, 0x47, 0x50, 0x00, 0x7a, 0x48, + 0x56, 0x75, 0x00, 0x7a, 0x49, 0x17, 0x23, 0x00, + 0x7a, 0x4c, 0x3a, 0x4c, 0x00, 0x7a, 0x4d, 0x0a, + 0x75, 0x00, 0x7a, 0x4e, 0x04, 0xf1, 0x00, 0x7a, + 0x4f, 0x05, 0x3a, 0x00, 0x7a, 0x50, 0x04, 0x70, + 0x00, 0x7a, 0x55, 0x56, 0x76, 0x00, 0x7a, 0x56, + 0x47, 0x51, 0x00, 0x7a, 0x57, 0x17, 0x22, 0x00, + 0x7a, 0x59, 0x47, 0x52, 0x00, 0x7a, 0x5c, 0x47, + 0x53, 0x00, 0x7a, 0x5d, 0x3a, 0x4d, 0x00, 0x7a, + 0x5f, 0x47, 0x54, 0x00, 0x7a, 0x60, 0x4f, 0x56, + 0x00, 0x7a, 0x61, 0x17, 0x24, 0x00, 0x7a, 0x62, + 0x17, 0x25, 0x00, 0x7a, 0x63, 0x09, 0xdf, 0x00, + 0x7a, 0x65, 0x56, 0x77, 0x00, 0x7a, 0x67, 0x47, + 0x55, 0x00, 0x7a, 0x69, 0x17, 0x26, 0x00, 0x7a, + 0x6a, 0x47, 0x56, 0x00, 0x7a, 0x6b, 0x05, 0xad, + 0x00, 0x7a, 0x6d, 0x3a, 0x4f, 0x00, 0x7a, 0x70, + 0x17, 0x28, 0x00, 0x7a, 0x74, 0x07, 0x40, 0x00, + 0x7a, 0x75, 0x47, 0x57, 0x00, 0x7a, 0x76, 0x06, + 0x80, 0x00, 0x7a, 0x78, 0x3a, 0x50, 0x00, 0x7a, + 0x79, 0x17, 0x29, 0x00, 0x7a, 0x7a, 0x06, 0xed, + 0x00, 0x7a, 0x7d, 0x17, 0x2a, 0x00, 0x7a, 0x7e, + 0x56, 0x78, 0x00, 0x7a, 0x7f, 0x0a, 0xa0, 0x00, + 0x7a, 0x80, 0x4c, 0xac, 0x00, 0x7a, 0x81, 0x0c, + 0xa5, 0x00, 0x7a, 0x82, 0x47, 0x58, 0x00, 0x7a, + 0x83, 0x0a, 0x84, 0x00, 0x7a, 0x84, 0x08, 0x65, + 0x00, 0x7a, 0x85, 0x42, 0x7f, 0x00, 0x7a, 0x86, + 0x4c, 0xad, 0x00, 0x7a, 0x88, 0x17, 0x2b, 0x00, + 0x7a, 0x8a, 0x47, 0x59, 0x00, 0x7a, 0x8b, 0x56, + 0x79, 0x00, 0x7a, 0x90, 0x47, 0x5a, 0x00, 0x7a, + 0x91, 0x56, 0x7a, 0x00, 0x7a, 0x92, 0x0b, 0xa0, + 0x00, 0x7a, 0x93, 0x0a, 0xed, 0x00, 0x7a, 0x94, + 0x4c, 0xae, 0x00, 0x7a, 0x95, 0x17, 0x2d, 0x00, + 0x7a, 0x96, 0x17, 0x2f, 0x00, 0x7a, 0x97, 0x17, + 0x2c, 0x00, 0x7a, 0x98, 0x17, 0x2e, 0x00, 0x7a, + 0x9e, 0x56, 0x7b, 0x00, 0x7a, 0x9f, 0x06, 0xf8, + 0x00, 0x7a, 0xa0, 0x3a, 0x51, 0x00, 0x7a, 0xa3, + 0x3a, 0x52, 0x00, 0x7a, 0xa9, 0x17, 0x30, 0x00, + 0x7a, 0xaa, 0x06, 0xfc, 0x00, 0x7a, 0xac, 0x47, + 0x5b, 0x00, 0x7a, 0xae, 0x06, 0x81, 0x00, 0x7a, + 0xaf, 0x0f, 0x3c, 0x00, 0x7a, 0xb0, 0x17, 0x32, + 0x00, 0x7a, 0xb3, 0x3a, 0x53, 0x00, 0x7a, 0xb5, + 0x4c, 0xaf, 0x00, 0x7a, 0xb6, 0x17, 0x33, 0x00, + 0x7a, 0xb9, 0x47, 0x5e, 0x00, 0x7a, 0xba, 0x04, + 0xd0, 0x00, 0x7a, 0xbb, 0x3a, 0x54, 0x00, 0x7a, + 0xbc, 0x3a, 0x55, 0x00, 0x7a, 0xbd, 0x4c, 0xb0, + 0x00, 0x7a, 0xbe, 0x47, 0x5f, 0x00, 0x7a, 0xbf, + 0x17, 0x36, 0x00, 0x7a, 0xc3, 0x05, 0xd4, 0x00, + 0x7a, 0xc4, 0x17, 0x35, 0x00, 0x7a, 0xc5, 0x17, + 0x34, 0x00, 0x7a, 0xc6, 0x3a, 0x56, 0x00, 0x7a, + 0xc7, 0x17, 0x38, 0x00, 0x7a, 0xc8, 0x17, 0x31, + 0x00, 0x7a, 0xc9, 0x56, 0x7c, 0x00, 0x7a, 0xca, + 0x17, 0x39, 0x00, 0x7a, 0xcb, 0x0f, 0x71, 0x00, + 0x7a, 0xcc, 0x47, 0x61, 0x00, 0x7a, 0xcd, 0x17, + 0x3a, 0x00, 0x7a, 0xce, 0x42, 0x81, 0x00, 0x7a, + 0xcf, 0x17, 0x3b, 0x00, 0x7a, 0xd1, 0x21, 0x89, + 0x00, 0x7a, 0xd2, 0x11, 0xc5, 0x00, 0x7a, 0xd3, + 0x17, 0x3d, 0x00, 0x7a, 0xd5, 0x17, 0x3c, 0x00, + 0x7a, 0xd9, 0x17, 0x3e, 0x00, 0x7a, 0xda, 0x17, + 0x3f, 0x00, 0x7a, 0xdb, 0x56, 0x7d, 0x00, 0x7a, + 0xdc, 0x0f, 0x7d, 0x00, 0x7a, 0xdd, 0x17, 0x40, + 0x00, 0x7a, 0xdf, 0x1c, 0x08, 0x00, 0x7a, 0xe0, + 0x09, 0xb7, 0x00, 0x7a, 0xe1, 0x17, 0x41, 0x00, + 0x7a, 0xe2, 0x17, 0x42, 0x00, 0x7a, 0xe3, 0x09, + 0x61, 0x00, 0x7a, 0xe5, 0x0c, 0x90, 0x00, 0x7a, + 0xe6, 0x17, 0x43, 0x00, 0x7a, 0xe7, 0x21, 0x8a, + 0x00, 0x7a, 0xe8, 0x47, 0x62, 0x00, 0x7a, 0xe9, + 0x56, 0x7e, 0x00, 0x7a, 0xea, 0x0b, 0x66, 0x00, + 0x7a, 0xeb, 0x21, 0x8c, 0x00, 0x7a, 0xec, 0x56, + 0x7f, 0x00, 0x7a, 0xed, 0x17, 0x44, 0x00, 0x7a, + 0xef, 0x0b, 0x7a, 0x00, 0x7a, 0xf0, 0x17, 0x45, + 0x00, 0x7a, 0xf1, 0x56, 0x80, 0x00, 0x7a, 0xf4, + 0x47, 0x63, 0x00, 0x7a, 0xf6, 0x06, 0x9d, 0x00, + 0x7a, 0xf8, 0x10, 0x76, 0x00, 0x7a, 0xf9, 0x0b, + 0x9b, 0x00, 0x7a, 0xfa, 0x08, 0xdf, 0x00, 0x7a, + 0xfb, 0x56, 0x81, 0x00, 0x7a, 0xfd, 0x42, 0x82, + 0x00, 0x7a, 0xfe, 0x4c, 0xb1, 0x00, 0x7a, 0xff, + 0x06, 0x04, 0x00, 0x7b, 0x02, 0x17, 0x46, 0x00, + 0x7b, 0x04, 0x17, 0x53, 0x00, 0x7b, 0x06, 0x17, + 0x49, 0x00, 0x7b, 0x07, 0x3a, 0x57, 0x00, 0x7b, + 0x08, 0x06, 0x82, 0x00, 0x7b, 0x0a, 0x17, 0x48, + 0x00, 0x7b, 0x0b, 0x17, 0x55, 0x00, 0x7b, 0x0f, + 0x17, 0x47, 0x00, 0x7b, 0x11, 0x09, 0xb8, 0x00, + 0x7b, 0x12, 0x42, 0x83, 0x00, 0x7b, 0x14, 0x3a, + 0x58, 0x00, 0x7b, 0x18, 0x17, 0x4b, 0x00, 0x7b, + 0x19, 0x17, 0x4c, 0x00, 0x7b, 0x1b, 0x0c, 0x25, + 0x00, 0x7b, 0x1e, 0x17, 0x4d, 0x00, 0x7b, 0x1f, + 0x56, 0x82, 0x00, 0x7b, 0x20, 0x05, 0xbc, 0x00, + 0x7b, 0x23, 0x56, 0x83, 0x00, 0x7b, 0x25, 0x0a, + 0x20, 0x00, 0x7b, 0x26, 0x0d, 0xd6, 0x00, 0x7b, + 0x27, 0x3a, 0x59, 0x00, 0x7b, 0x28, 0x17, 0x4f, + 0x00, 0x7b, 0x29, 0x56, 0x84, 0x00, 0x7b, 0x2a, + 0x47, 0x68, 0x00, 0x7b, 0x2b, 0x4c, 0xb2, 0x00, + 0x7b, 0x2c, 0x0b, 0x48, 0x00, 0x7b, 0x2d, 0x42, + 0x84, 0x00, 0x7b, 0x2e, 0x47, 0x69, 0x00, 0x7b, + 0x2f, 0x47, 0x6a, 0x00, 0x7b, 0x30, 0x56, 0x85, + 0x00, 0x7b, 0x31, 0x3a, 0x5a, 0x00, 0x7b, 0x33, + 0x17, 0x4a, 0x00, 0x7b, 0x34, 0x56, 0x86, 0x00, + 0x7b, 0x35, 0x17, 0x4e, 0x00, 0x7b, 0x36, 0x17, + 0x50, 0x00, 0x7b, 0x39, 0x08, 0x6b, 0x00, 0x7b, + 0x3b, 0x42, 0x85, 0x00, 0x7b, 0x3d, 0x47, 0x67, + 0x00, 0x7b, 0x3f, 0x56, 0x87, 0x00, 0x7b, 0x40, + 0x56, 0x88, 0x00, 0x7b, 0x41, 0x47, 0x6e, 0x00, + 0x7b, 0x45, 0x17, 0x57, 0x00, 0x7b, 0x46, 0x0d, + 0xa0, 0x00, 0x7b, 0x47, 0x3a, 0x5b, 0x00, 0x7b, + 0x48, 0x0d, 0x3a, 0x00, 0x7b, 0x49, 0x0c, 0x73, + 0x00, 0x7b, 0x4b, 0x06, 0xd2, 0x00, 0x7b, 0x4c, + 0x17, 0x56, 0x00, 0x7b, 0x4d, 0x17, 0x54, 0x00, + 0x7b, 0x4e, 0x3a, 0x5c, 0x00, 0x7b, 0x4f, 0x0d, + 0x49, 0x00, 0x7b, 0x50, 0x17, 0x51, 0x00, 0x7b, + 0x51, 0x0b, 0x9c, 0x00, 0x7b, 0x52, 0x0c, 0x75, + 0x00, 0x7b, 0x53, 0x37, 0x5d, 0x00, 0x7b, 0x54, + 0x0c, 0x74, 0x00, 0x7b, 0x55, 0x47, 0x70, 0x00, + 0x7b, 0x56, 0x08, 0x66, 0x00, 0x7b, 0x5d, 0x17, + 0x69, 0x00, 0x7b, 0x60, 0x3a, 0x5d, 0x00, 0x7b, + 0x64, 0x47, 0x72, 0x00, 0x7b, 0x65, 0x17, 0x59, + 0x00, 0x7b, 0x66, 0x47, 0x73, 0x00, 0x7b, 0x67, + 0x17, 0x5b, 0x00, 0x7b, 0x69, 0x3a, 0x5e, 0x00, + 0x7b, 0x6a, 0x56, 0x89, 0x00, 0x7b, 0x6c, 0x17, + 0x5e, 0x00, 0x7b, 0x6d, 0x3a, 0x5f, 0x00, 0x7b, + 0x6e, 0x17, 0x5f, 0x00, 0x7b, 0x6f, 0x42, 0x86, + 0x00, 0x7b, 0x70, 0x17, 0x5c, 0x00, 0x7b, 0x71, + 0x17, 0x5d, 0x00, 0x7b, 0x72, 0x3a, 0x60, 0x00, + 0x7b, 0x73, 0x47, 0x74, 0x00, 0x7b, 0x74, 0x17, + 0x5a, 0x00, 0x7b, 0x75, 0x17, 0x58, 0x00, 0x7b, + 0x77, 0x4c, 0xb3, 0x00, 0x7b, 0x79, 0x47, 0x71, + 0x00, 0x7b, 0x7a, 0x17, 0x52, 0x00, 0x7b, 0x7f, + 0x47, 0x6d, 0x00, 0x7b, 0x84, 0x56, 0x8a, 0x00, + 0x7b, 0x86, 0x0e, 0x1f, 0x00, 0x7b, 0x87, 0x05, + 0x55, 0x00, 0x7b, 0x89, 0x56, 0x8b, 0x00, 0x7b, + 0x8b, 0x17, 0x66, 0x00, 0x7b, 0x8d, 0x17, 0x63, + 0x00, 0x7b, 0x8e, 0x56, 0x8c, 0x00, 0x7b, 0x8f, + 0x17, 0x68, 0x00, 0x7b, 0x90, 0x47, 0x77, 0x00, + 0x7b, 0x91, 0x3a, 0x61, 0x00, 0x7b, 0x92, 0x17, + 0x67, 0x00, 0x7b, 0x94, 0x0d, 0x29, 0x00, 0x7b, + 0x95, 0x0e, 0xb3, 0x00, 0x7b, 0x96, 0x56, 0x8d, + 0x00, 0x7b, 0x97, 0x08, 0x89, 0x00, 0x7b, 0x98, + 0x17, 0x61, 0x00, 0x7b, 0x99, 0x17, 0x6a, 0x00, + 0x7b, 0x9a, 0x17, 0x65, 0x00, 0x7b, 0x9b, 0x47, + 0x78, 0x00, 0x7b, 0x9c, 0x17, 0x64, 0x00, 0x7b, + 0x9d, 0x17, 0x60, 0x00, 0x7b, 0x9e, 0x21, 0x8d, + 0x00, 0x7b, 0x9f, 0x17, 0x62, 0x00, 0x7b, 0xa0, + 0x4c, 0xb4, 0x00, 0x7b, 0xa1, 0x06, 0x05, 0x00, + 0x7b, 0xa5, 0x56, 0x8e, 0x00, 0x7b, 0xaa, 0x0b, + 0x7b, 0x00, 0x7b, 0xac, 0x4c, 0xb5, 0x00, 0x7b, + 0xad, 0x0a, 0xa1, 0x00, 0x7b, 0xaf, 0x3a, 0x62, + 0x00, 0x7b, 0xb0, 0x4c, 0xb6, 0x00, 0x7b, 0xb1, + 0x0d, 0x36, 0x00, 0x7b, 0xb2, 0x56, 0x8f, 0x00, + 0x7b, 0xb4, 0x17, 0x6f, 0x00, 0x7b, 0xb5, 0x47, + 0x7a, 0x00, 0x7b, 0xb6, 0x56, 0x90, 0x00, 0x7b, + 0xb8, 0x0d, 0x38, 0x00, 0x7b, 0xba, 0x56, 0x91, + 0x00, 0x7b, 0xbb, 0x56, 0x92, 0x00, 0x7b, 0xbc, + 0x47, 0x7b, 0x00, 0x7b, 0xbd, 0x56, 0x93, 0x00, + 0x7b, 0xc0, 0x0a, 0x85, 0x00, 0x7b, 0xc1, 0x17, + 0x6c, 0x00, 0x7b, 0xc2, 0x56, 0x94, 0x00, 0x7b, + 0xc4, 0x0d, 0x63, 0x00, 0x7b, 0xc5, 0x47, 0x7c, + 0x00, 0x7b, 0xc6, 0x17, 0x70, 0x00, 0x7b, 0xc7, + 0x0e, 0x23, 0x00, 0x7b, 0xc8, 0x56, 0x95, 0x00, + 0x7b, 0xc9, 0x0b, 0x99, 0x00, 0x7b, 0xca, 0x47, + 0x7d, 0x00, 0x7b, 0xcb, 0x17, 0x6b, 0x00, 0x7b, + 0xcc, 0x17, 0x6d, 0x00, 0x7b, 0xcf, 0x17, 0x6e, + 0x00, 0x7b, 0xd4, 0x47, 0x80, 0x00, 0x7b, 0xd6, + 0x47, 0x81, 0x00, 0x7b, 0xd7, 0x3a, 0x63, 0x00, + 0x7b, 0xd9, 0x3a, 0x64, 0x00, 0x7b, 0xda, 0x47, + 0x82, 0x00, 0x7b, 0xdb, 0x56, 0x96, 0x00, 0x7b, + 0xdd, 0x17, 0x71, 0x00, 0x7b, 0xe0, 0x08, 0xf0, + 0x00, 0x7b, 0xe4, 0x0c, 0x9e, 0x00, 0x7b, 0xe5, + 0x17, 0x76, 0x00, 0x7b, 0xe6, 0x17, 0x75, 0x00, + 0x7b, 0xe8, 0x4c, 0xb7, 0x00, 0x7b, 0xe9, 0x17, + 0x72, 0x00, 0x7b, 0xea, 0x47, 0x83, 0x00, 0x7b, + 0xed, 0x0f, 0xdc, 0x00, 0x7b, 0xf0, 0x47, 0x84, + 0x00, 0x7b, 0xf2, 0x4c, 0xb8, 0x00, 0x7b, 0xf3, + 0x17, 0x7b, 0x00, 0x7b, 0xf4, 0x56, 0x97, 0x00, + 0x7b, 0xf5, 0x56, 0x98, 0x00, 0x7b, 0xf6, 0x17, + 0x7f, 0x00, 0x7b, 0xf7, 0x17, 0x7c, 0x00, 0x7b, + 0xf8, 0x4c, 0xb9, 0x00, 0x7b, 0xf9, 0x56, 0x99, + 0x00, 0x7b, 0xfa, 0x56, 0x9a, 0x00, 0x7b, 0xfc, + 0x4c, 0xba, 0x00, 0x7b, 0xfe, 0x4c, 0xbb, 0x00, + 0x7c, 0x00, 0x17, 0x78, 0x00, 0x7c, 0x01, 0x42, + 0x87, 0x00, 0x7c, 0x02, 0x56, 0x9b, 0x00, 0x7c, + 0x03, 0x47, 0x85, 0x00, 0x7c, 0x04, 0x56, 0x9c, + 0x00, 0x7c, 0x06, 0x56, 0x9d, 0x00, 0x7c, 0x07, + 0x17, 0x79, 0x00, 0x7c, 0x09, 0x4c, 0xbc, 0x00, + 0x7c, 0x0b, 0x3a, 0x65, 0x00, 0x7c, 0x0c, 0x56, + 0x9e, 0x00, 0x7c, 0x0d, 0x17, 0x7e, 0x00, 0x7c, + 0x0e, 0x47, 0x86, 0x00, 0x7c, 0x0f, 0x3a, 0x66, + 0x00, 0x7c, 0x11, 0x17, 0x73, 0x00, 0x7c, 0x12, + 0x10, 0xea, 0x00, 0x7c, 0x13, 0x17, 0x7a, 0x00, + 0x7c, 0x14, 0x17, 0x74, 0x00, 0x7c, 0x17, 0x17, + 0x7d, 0x00, 0x7c, 0x19, 0x56, 0x9f, 0x00, 0x7c, + 0x1b, 0x56, 0xa0, 0x00, 0x7c, 0x1e, 0x1e, 0x3b, + 0x00, 0x7c, 0x1f, 0x17, 0x83, 0x00, 0x7c, 0x20, + 0x3a, 0x67, 0x00, 0x7c, 0x21, 0x06, 0x06, 0x00, + 0x7c, 0x23, 0x17, 0x80, 0x00, 0x7c, 0x25, 0x56, + 0xa1, 0x00, 0x7c, 0x26, 0x3a, 0x68, 0x00, 0x7c, + 0x27, 0x17, 0x81, 0x00, 0x7c, 0x28, 0x4c, 0xbd, + 0x00, 0x7c, 0x2a, 0x17, 0x82, 0x00, 0x7c, 0x2b, + 0x17, 0x85, 0x00, 0x7c, 0x2c, 0x56, 0xa2, 0x00, + 0x7c, 0x2f, 0x4c, 0xbe, 0x00, 0x7c, 0x31, 0x3a, + 0x69, 0x00, 0x7c, 0x33, 0x42, 0x88, 0x00, 0x7c, + 0x34, 0x56, 0xa3, 0x00, 0x7c, 0x36, 0x3a, 0x6a, + 0x00, 0x7c, 0x37, 0x17, 0x84, 0x00, 0x7c, 0x38, + 0x0d, 0x8a, 0x00, 0x7c, 0x39, 0x56, 0xa4, 0x00, + 0x7c, 0x3a, 0x56, 0xa5, 0x00, 0x7c, 0x3d, 0x17, + 0x86, 0x00, 0x7c, 0x3e, 0x0f, 0xc4, 0x00, 0x7c, + 0x3f, 0x0e, 0x3d, 0x00, 0x7c, 0x40, 0x17, 0x8b, + 0x00, 0x7c, 0x42, 0x4c, 0xbf, 0x00, 0x7c, 0x43, + 0x17, 0x88, 0x00, 0x7c, 0x45, 0x47, 0x87, 0x00, + 0x7c, 0x46, 0x56, 0xa6, 0x00, 0x7c, 0x4a, 0x47, + 0x88, 0x00, 0x7c, 0x4c, 0x17, 0x87, 0x00, 0x7c, + 0x4d, 0x0a, 0x76, 0x00, 0x7c, 0x4f, 0x17, 0x8a, + 0x00, 0x7c, 0x50, 0x17, 0x8c, 0x00, 0x7c, 0x51, + 0x3a, 0x6b, 0x00, 0x7c, 0x52, 0x4c, 0xc0, 0x00, + 0x7c, 0x53, 0x4c, 0xc1, 0x00, 0x7c, 0x54, 0x17, + 0x89, 0x00, 0x7c, 0x55, 0x56, 0xa7, 0x00, 0x7c, + 0x56, 0x17, 0x90, 0x00, 0x7c, 0x57, 0x47, 0x89, + 0x00, 0x7c, 0x58, 0x17, 0x8d, 0x00, 0x7c, 0x59, + 0x3a, 0x6c, 0x00, 0x7c, 0x5a, 0x56, 0xa8, 0x00, + 0x7c, 0x5b, 0x4c, 0xc2, 0x00, 0x7c, 0x5c, 0x4c, + 0xc3, 0x00, 0x7c, 0x5d, 0x4c, 0xc4, 0x00, 0x7c, + 0x5e, 0x47, 0x8a, 0x00, 0x7c, 0x5f, 0x17, 0x8e, + 0x00, 0x7c, 0x60, 0x17, 0x77, 0x00, 0x7c, 0x61, + 0x47, 0x8b, 0x00, 0x7c, 0x63, 0x56, 0xa9, 0x00, + 0x7c, 0x64, 0x17, 0x8f, 0x00, 0x7c, 0x65, 0x17, + 0x91, 0x00, 0x7c, 0x67, 0x3a, 0x6d, 0x00, 0x7c, + 0x69, 0x47, 0x8c, 0x00, 0x7c, 0x6c, 0x17, 0x92, + 0x00, 0x7c, 0x6d, 0x42, 0x8a, 0x00, 0x7c, 0x6e, + 0x3a, 0x6e, 0x00, 0x7c, 0x6f, 0x47, 0x8d, 0x00, + 0x7c, 0x70, 0x3a, 0x6f, 0x00, 0x7c, 0x72, 0x4c, + 0xc5, 0x00, 0x7c, 0x73, 0x0e, 0x16, 0x00, 0x7c, + 0x75, 0x17, 0x93, 0x00, 0x7c, 0x79, 0x42, 0x8b, + 0x00, 0x7c, 0x7b, 0x37, 0x0e, 0x00, 0x7c, 0x7c, + 0x56, 0xab, 0x00, 0x7c, 0x7d, 0x4c, 0xc6, 0x00, + 0x7c, 0x7e, 0x0e, 0xee, 0x00, 0x7c, 0x81, 0x06, + 0xc6, 0x00, 0x7c, 0x82, 0x06, 0xff, 0x00, 0x7c, + 0x83, 0x17, 0x94, 0x00, 0x7c, 0x86, 0x56, 0xac, + 0x00, 0x7c, 0x87, 0x4c, 0xc7, 0x00, 0x7c, 0x89, + 0x0e, 0x04, 0x00, 0x7c, 0x8b, 0x0a, 0x2e, 0x00, + 0x7c, 0x8d, 0x0e, 0xbc, 0x00, 0x7c, 0x8f, 0x42, + 0x8c, 0x00, 0x7c, 0x90, 0x17, 0x95, 0x00, 0x7c, + 0x92, 0x0f, 0x7b, 0x00, 0x7c, 0x94, 0x42, 0x8d, + 0x00, 0x7c, 0x95, 0x0d, 0x2a, 0x00, 0x7c, 0x97, + 0x0a, 0xc8, 0x00, 0x7c, 0x98, 0x0c, 0xea, 0x00, + 0x7c, 0x9b, 0x09, 0x57, 0x00, 0x7c, 0x9e, 0x4c, + 0xc8, 0x00, 0x7c, 0x9f, 0x04, 0x84, 0x00, 0x7c, + 0xa0, 0x42, 0x8e, 0x00, 0x7c, 0xa1, 0x17, 0x9a, + 0x00, 0x7c, 0xa2, 0x17, 0x98, 0x00, 0x7c, 0xa4, + 0x17, 0x96, 0x00, 0x7c, 0xa5, 0x05, 0xdd, 0x00, + 0x7c, 0xa6, 0x47, 0x91, 0x00, 0x7c, 0xa7, 0x09, + 0xb9, 0x00, 0x7c, 0xa8, 0x17, 0x9b, 0x00, 0x7c, + 0xab, 0x17, 0x99, 0x00, 0x7c, 0xad, 0x17, 0x97, + 0x00, 0x7c, 0xae, 0x17, 0x9f, 0x00, 0x7c, 0xb0, + 0x56, 0xad, 0x00, 0x7c, 0xb1, 0x17, 0x9e, 0x00, + 0x7c, 0xb2, 0x17, 0x9d, 0x00, 0x7c, 0xb3, 0x17, + 0x9c, 0x00, 0x7c, 0xb6, 0x47, 0x93, 0x00, 0x7c, + 0xb7, 0x47, 0x94, 0x00, 0x7c, 0xb9, 0x17, 0xa0, + 0x00, 0x7c, 0xba, 0x4c, 0xc9, 0x00, 0x7c, 0xbb, + 0x56, 0xae, 0x00, 0x7c, 0xbc, 0x3a, 0x70, 0x00, + 0x7c, 0xbd, 0x17, 0xa1, 0x00, 0x7c, 0xbe, 0x21, + 0x8e, 0x00, 0x7c, 0xbf, 0x3a, 0x71, 0x00, 0x7c, + 0xc0, 0x17, 0xa2, 0x00, 0x7c, 0xc2, 0x17, 0xa4, + 0x00, 0x7c, 0xc4, 0x47, 0x96, 0x00, 0x7c, 0xc5, + 0x17, 0xa3, 0x00, 0x7c, 0xc7, 0x4c, 0xca, 0x00, + 0x7c, 0xc8, 0x3a, 0x72, 0x00, 0x7c, 0xc9, 0x3a, + 0x73, 0x00, 0x7c, 0xca, 0x07, 0x86, 0x00, 0x7c, + 0xcd, 0x47, 0x98, 0x00, 0x7c, 0xce, 0x0a, 0xba, + 0x00, 0x7c, 0xcf, 0x56, 0xaf, 0x00, 0x7c, 0xd2, + 0x17, 0xa6, 0x00, 0x7c, 0xd3, 0x4c, 0xcb, 0x00, + 0x7c, 0xd4, 0x56, 0xb0, 0x00, 0x7c, 0xd5, 0x42, + 0x8f, 0x00, 0x7c, 0xd6, 0x36, 0x84, 0x00, 0x7c, + 0xd7, 0x3a, 0x74, 0x00, 0x7c, 0xd8, 0x17, 0xa5, + 0x00, 0x7c, 0xd9, 0x3a, 0x75, 0x00, 0x7c, 0xda, + 0x4c, 0xcc, 0x00, 0x7c, 0xdc, 0x17, 0xa7, 0x00, + 0x7c, 0xdd, 0x3a, 0x76, 0x00, 0x7c, 0xde, 0x0e, + 0x05, 0x00, 0x7c, 0xdf, 0x0a, 0xee, 0x00, 0x7c, + 0xe0, 0x07, 0xd9, 0x00, 0x7c, 0xe2, 0x17, 0xa8, + 0x00, 0x7c, 0xe6, 0x47, 0x9b, 0x00, 0x7c, 0xe7, + 0x0f, 0x90, 0x00, 0x7c, 0xe9, 0x56, 0xb1, 0x00, + 0x7c, 0xeb, 0x3a, 0x77, 0x00, 0x7c, 0xef, 0x17, + 0xaa, 0x00, 0x7c, 0xf2, 0x17, 0xab, 0x00, 0x7c, + 0xf4, 0x17, 0xac, 0x00, 0x7c, 0xf5, 0x47, 0x9d, + 0x00, 0x7c, 0xf6, 0x17, 0xad, 0x00, 0x7c, 0xf8, + 0x08, 0xb3, 0x00, 0x7c, 0xfa, 0x17, 0xae, 0x00, + 0x7c, 0xfb, 0x07, 0x25, 0x00, 0x7c, 0xfe, 0x06, + 0x84, 0x00, 0x7d, 0x00, 0x06, 0x44, 0x00, 0x7d, + 0x02, 0x17, 0xb0, 0x00, 0x7d, 0x03, 0x47, 0x9e, + 0x00, 0x7d, 0x04, 0x0e, 0xff, 0x00, 0x7d, 0x05, + 0x07, 0xda, 0x00, 0x7d, 0x06, 0x17, 0xaf, 0x00, + 0x7d, 0x07, 0x3a, 0x78, 0x00, 0x7d, 0x08, 0x3a, + 0x79, 0x00, 0x7d, 0x09, 0x3a, 0x7a, 0x00, 0x7d, + 0x0a, 0x17, 0xb3, 0x00, 0x7d, 0x0b, 0x0e, 0xf2, + 0x00, 0x7d, 0x0d, 0x0c, 0xf2, 0x00, 0x7d, 0x0f, + 0x56, 0xb2, 0x00, 0x7d, 0x10, 0x0d, 0xa5, 0x00, + 0x7d, 0x11, 0x56, 0xb3, 0x00, 0x7d, 0x12, 0x47, + 0xa0, 0x00, 0x7d, 0x13, 0x3a, 0x7b, 0x00, 0x7d, + 0x14, 0x09, 0x6d, 0x00, 0x7d, 0x15, 0x17, 0xb2, + 0x00, 0x7d, 0x16, 0x56, 0xb4, 0x00, 0x7d, 0x17, + 0x08, 0xff, 0x00, 0x7d, 0x18, 0x07, 0xdb, 0x00, + 0x7d, 0x19, 0x08, 0xb4, 0x00, 0x7d, 0x1a, 0x06, + 0x83, 0x00, 0x7d, 0x1b, 0x0e, 0x06, 0x00, 0x7d, + 0x1c, 0x17, 0xb1, 0x00, 0x7d, 0x1d, 0x3a, 0x7c, + 0x00, 0x7d, 0x1e, 0x47, 0xa1, 0x00, 0x7d, 0x20, + 0x0a, 0xc9, 0x00, 0x7d, 0x21, 0x0e, 0x70, 0x00, + 0x7d, 0x22, 0x08, 0x67, 0x00, 0x7d, 0x23, 0x3a, + 0x7d, 0x00, 0x7d, 0x26, 0x56, 0xb5, 0x00, 0x7d, + 0x2a, 0x56, 0xb6, 0x00, 0x7d, 0x2b, 0x08, 0xb5, + 0x00, 0x7d, 0x2c, 0x0b, 0xf9, 0x00, 0x7d, 0x2d, + 0x56, 0xb7, 0x00, 0x7d, 0x2e, 0x17, 0xb6, 0x00, + 0x7d, 0x2f, 0x0f, 0xa7, 0x00, 0x7d, 0x30, 0x08, + 0x49, 0x00, 0x7d, 0x31, 0x42, 0x90, 0x00, 0x7d, + 0x32, 0x17, 0xb7, 0x00, 0x7d, 0x33, 0x0a, 0x08, + 0x00, 0x7d, 0x35, 0x17, 0xb9, 0x00, 0x7d, 0x39, + 0x09, 0xba, 0x00, 0x7d, 0x3a, 0x08, 0x20, 0x00, + 0x7d, 0x3c, 0x4c, 0xcd, 0x00, 0x7d, 0x3d, 0x47, + 0xa4, 0x00, 0x7d, 0x3e, 0x47, 0xa5, 0x00, 0x7d, + 0x3f, 0x17, 0xb8, 0x00, 0x7d, 0x40, 0x47, 0xa6, + 0x00, 0x7d, 0x41, 0x3a, 0x7e, 0x00, 0x7d, 0x42, + 0x09, 0x34, 0x00, 0x7d, 0x43, 0x07, 0x72, 0x00, + 0x7d, 0x44, 0x0a, 0xca, 0x00, 0x7d, 0x45, 0x17, + 0xb4, 0x00, 0x7d, 0x46, 0x17, 0xba, 0x00, 0x7d, + 0x47, 0x47, 0xa7, 0x00, 0x7d, 0x48, 0x21, 0x8f, + 0x00, 0x7d, 0x4b, 0x17, 0xb5, 0x00, 0x7d, 0x4c, + 0x07, 0x26, 0x00, 0x7d, 0x4d, 0x4c, 0xce, 0x00, + 0x7d, 0x4e, 0x17, 0xbd, 0x00, 0x7d, 0x4f, 0x17, + 0xc1, 0x00, 0x7d, 0x50, 0x07, 0x41, 0x00, 0x7d, + 0x51, 0x56, 0xb8, 0x00, 0x7d, 0x53, 0x3a, 0x7f, + 0x00, 0x7d, 0x55, 0x36, 0x3a, 0x00, 0x7d, 0x56, + 0x17, 0xbc, 0x00, 0x7d, 0x57, 0x56, 0xb9, 0x00, + 0x7d, 0x59, 0x3a, 0x80, 0x00, 0x7d, 0x5a, 0x47, + 0xab, 0x00, 0x7d, 0x5b, 0x17, 0xc5, 0x00, 0x7d, + 0x5c, 0x42, 0x91, 0x00, 0x7d, 0x5d, 0x3a, 0x81, + 0x00, 0x7d, 0x5e, 0x07, 0xdc, 0x00, 0x7d, 0x61, + 0x0f, 0x57, 0x00, 0x7d, 0x62, 0x04, 0x80, 0x00, + 0x7d, 0x63, 0x17, 0xc2, 0x00, 0x7d, 0x65, 0x56, + 0xba, 0x00, 0x7d, 0x66, 0x06, 0x85, 0x00, 0x7d, + 0x67, 0x56, 0xbb, 0x00, 0x7d, 0x68, 0x17, 0xbf, + 0x00, 0x7d, 0x6a, 0x47, 0xac, 0x00, 0x7d, 0x6e, + 0x17, 0xc0, 0x00, 0x7d, 0x70, 0x47, 0xad, 0x00, + 0x7d, 0x71, 0x0c, 0x77, 0x00, 0x7d, 0x72, 0x17, + 0xbe, 0x00, 0x7d, 0x73, 0x17, 0xbb, 0x00, 0x7d, + 0x75, 0x05, 0x86, 0x00, 0x7d, 0x76, 0x0a, 0x88, + 0x00, 0x7d, 0x78, 0x56, 0xbc, 0x00, 0x7d, 0x79, + 0x07, 0x5c, 0x00, 0x7d, 0x7a, 0x3a, 0x82, 0x00, + 0x7d, 0x7b, 0x56, 0xbd, 0x00, 0x7d, 0x7d, 0x17, + 0xc7, 0x00, 0x7d, 0x7f, 0x47, 0xaf, 0x00, 0x7d, + 0x81, 0x56, 0xbe, 0x00, 0x7d, 0x82, 0x4c, 0xcf, + 0x00, 0x7d, 0x83, 0x42, 0x92, 0x00, 0x7d, 0x85, + 0x4c, 0xd0, 0x00, 0x7d, 0x86, 0x3a, 0x83, 0x00, + 0x7d, 0x88, 0x47, 0xb1, 0x00, 0x7d, 0x89, 0x17, + 0xc4, 0x00, 0x7d, 0x8b, 0x3a, 0x84, 0x00, 0x7d, + 0x8c, 0x3a, 0x85, 0x00, 0x7d, 0x8d, 0x4c, 0xd1, + 0x00, 0x7d, 0x8f, 0x17, 0xc6, 0x00, 0x7d, 0x91, + 0x4c, 0xd2, 0x00, 0x7d, 0x93, 0x17, 0xc3, 0x00, + 0x7d, 0x96, 0x56, 0xbf, 0x00, 0x7d, 0x97, 0x47, + 0xb2, 0x00, 0x7d, 0x99, 0x07, 0x27, 0x00, 0x7d, + 0x9a, 0x0b, 0x13, 0x00, 0x7d, 0x9b, 0x17, 0xc8, + 0x00, 0x7d, 0x9c, 0x0a, 0xf0, 0x00, 0x7d, 0x9d, + 0x47, 0xb4, 0x00, 0x7d, 0x9e, 0x4c, 0xd3, 0x00, + 0x7d, 0x9f, 0x17, 0xd5, 0x00, 0x7d, 0xa0, 0x21, + 0x92, 0x00, 0x7d, 0xa2, 0x17, 0xd1, 0x00, 0x7d, + 0xa3, 0x17, 0xcb, 0x00, 0x7d, 0xa6, 0x42, 0x93, + 0x00, 0x7d, 0xa7, 0x47, 0xb5, 0x00, 0x7d, 0xaa, + 0x47, 0xb6, 0x00, 0x7d, 0xab, 0x17, 0xcf, 0x00, + 0x7d, 0xac, 0x09, 0x26, 0x00, 0x7d, 0xad, 0x04, + 0xa1, 0x00, 0x7d, 0xae, 0x17, 0xca, 0x00, 0x7d, + 0xaf, 0x17, 0xd2, 0x00, 0x7d, 0xb0, 0x17, 0xd6, + 0x00, 0x7d, 0xb1, 0x07, 0xdd, 0x00, 0x7d, 0xb2, + 0x0e, 0xe2, 0x00, 0x7d, 0xb3, 0x4c, 0xd4, 0x00, + 0x7d, 0xb4, 0x0b, 0xf2, 0x00, 0x7d, 0xb5, 0x17, + 0xcc, 0x00, 0x7d, 0xb6, 0x47, 0xb7, 0x00, 0x7d, + 0xb7, 0x21, 0x91, 0x00, 0x7d, 0xb8, 0x17, 0xd4, + 0x00, 0x7d, 0xb9, 0x4c, 0xd5, 0x00, 0x7d, 0xba, + 0x17, 0xc9, 0x00, 0x7d, 0xbb, 0x0b, 0x7c, 0x00, + 0x7d, 0xbd, 0x17, 0xce, 0x00, 0x7d, 0xbe, 0x04, + 0x81, 0x00, 0x7d, 0xbf, 0x0e, 0xd6, 0x00, 0x7d, + 0xc0, 0x47, 0xb8, 0x00, 0x7d, 0xc2, 0x42, 0x94, + 0x00, 0x7d, 0xc3, 0x56, 0xc0, 0x00, 0x7d, 0xc4, + 0x56, 0xc1, 0x00, 0x7d, 0xc5, 0x56, 0xc2, 0x00, + 0x7d, 0xc6, 0x56, 0xc3, 0x00, 0x7d, 0xc7, 0x17, + 0xcd, 0x00, 0x7d, 0xca, 0x06, 0xd3, 0x00, 0x7d, + 0xcb, 0x0d, 0x80, 0x00, 0x7d, 0xcc, 0x3a, 0x86, + 0x00, 0x7d, 0xcd, 0x56, 0xc4, 0x00, 0x7d, 0xce, + 0x56, 0xc5, 0x00, 0x7d, 0xcf, 0x0a, 0xef, 0x00, + 0x7d, 0xd0, 0x4c, 0xd6, 0x00, 0x7d, 0xd1, 0x0f, + 0x98, 0x00, 0x7d, 0xd2, 0x09, 0x79, 0x00, 0x7d, + 0xd5, 0x17, 0xfd, 0x00, 0x7d, 0xd6, 0x21, 0x93, + 0x00, 0x7d, 0xd7, 0x47, 0xb9, 0x00, 0x7d, 0xd8, + 0x17, 0xd7, 0x00, 0x7d, 0xd9, 0x47, 0xba, 0x00, + 0x7d, 0xda, 0x0a, 0xa2, 0x00, 0x7d, 0xdc, 0x17, + 0xd3, 0x00, 0x7d, 0xdd, 0x17, 0xd8, 0x00, 0x7d, + 0xde, 0x17, 0xda, 0x00, 0x7d, 0xe0, 0x0c, 0x15, + 0x00, 0x7d, 0xe1, 0x17, 0xdd, 0x00, 0x7d, 0xe2, + 0x56, 0xc7, 0x00, 0x7d, 0xe3, 0x34, 0x0a, 0x00, + 0x7d, 0xe4, 0x17, 0xd9, 0x00, 0x7d, 0xe5, 0x4c, + 0xd7, 0x00, 0x7d, 0xe6, 0x47, 0xbb, 0x00, 0x7d, + 0xe8, 0x0e, 0x24, 0x00, 0x7d, 0xe9, 0x06, 0x07, + 0x00, 0x7d, 0xea, 0x56, 0xc8, 0x00, 0x7d, 0xeb, + 0x3a, 0x87, 0x00, 0x7d, 0xec, 0x0e, 0xd7, 0x00, + 0x7d, 0xed, 0x56, 0xc9, 0x00, 0x7d, 0xef, 0x04, + 0xa2, 0x00, 0x7d, 0xf1, 0x3a, 0x88, 0x00, 0x7d, + 0xf2, 0x17, 0xdc, 0x00, 0x7d, 0xf4, 0x34, 0x57, + 0x00, 0x7d, 0xf5, 0x4c, 0xd8, 0x00, 0x7d, 0xf6, + 0x4c, 0xd9, 0x00, 0x7d, 0xf9, 0x3a, 0x89, 0x00, + 0x7d, 0xfa, 0x56, 0xca, 0x00, 0x7d, 0xfb, 0x17, + 0xdb, 0x00, 0x7e, 0x00, 0x56, 0xc6, 0x00, 0x7e, + 0x01, 0x05, 0x11, 0x00, 0x7e, 0x04, 0x0c, 0xc4, + 0x00, 0x7e, 0x05, 0x17, 0xde, 0x00, 0x7e, 0x08, + 0x3a, 0x8a, 0x00, 0x7e, 0x09, 0x17, 0xe5, 0x00, + 0x7e, 0x0a, 0x17, 0xdf, 0x00, 0x7e, 0x0b, 0x17, + 0xe6, 0x00, 0x7e, 0x10, 0x47, 0xbf, 0x00, 0x7e, + 0x11, 0x3a, 0x8b, 0x00, 0x7e, 0x12, 0x17, 0xe2, + 0x00, 0x7e, 0x15, 0x3a, 0x8c, 0x00, 0x7e, 0x17, + 0x47, 0xc0, 0x00, 0x7e, 0x1b, 0x0d, 0x31, 0x00, + 0x7e, 0x1c, 0x56, 0xcb, 0x00, 0x7e, 0x1d, 0x47, + 0xc1, 0x00, 0x7e, 0x1e, 0x08, 0xf6, 0x00, 0x7e, + 0x1f, 0x17, 0xe4, 0x00, 0x7e, 0x20, 0x3a, 0x8d, + 0x00, 0x7e, 0x21, 0x17, 0xe1, 0x00, 0x7e, 0x22, + 0x17, 0xe7, 0x00, 0x7e, 0x23, 0x17, 0xe0, 0x00, + 0x7e, 0x26, 0x09, 0x4e, 0x00, 0x7e, 0x27, 0x47, + 0xc2, 0x00, 0x7e, 0x28, 0x42, 0x95, 0x00, 0x7e, + 0x2b, 0x0e, 0x53, 0x00, 0x7e, 0x2c, 0x47, 0xc3, + 0x00, 0x7e, 0x2d, 0x56, 0xcc, 0x00, 0x7e, 0x2e, + 0x09, 0x56, 0x00, 0x7e, 0x2f, 0x4c, 0xda, 0x00, + 0x7e, 0x31, 0x17, 0xe3, 0x00, 0x7e, 0x32, 0x17, + 0xef, 0x00, 0x7e, 0x33, 0x56, 0xcd, 0x00, 0x7e, + 0x35, 0x17, 0xeb, 0x00, 0x7e, 0x36, 0x4c, 0xdb, + 0x00, 0x7e, 0x37, 0x17, 0xee, 0x00, 0x7e, 0x39, + 0x17, 0xec, 0x00, 0x7e, 0x3a, 0x17, 0xf0, 0x00, + 0x7e, 0x3b, 0x17, 0xea, 0x00, 0x7e, 0x3d, 0x17, + 0xd0, 0x00, 0x7e, 0x3e, 0x0a, 0x77, 0x00, 0x7e, + 0x3f, 0x56, 0xce, 0x00, 0x7e, 0x41, 0x0d, 0x5f, + 0x00, 0x7e, 0x43, 0x17, 0xed, 0x00, 0x7e, 0x44, + 0x4c, 0xdc, 0x00, 0x7e, 0x45, 0x47, 0xc4, 0x00, + 0x7e, 0x46, 0x17, 0xe8, 0x00, 0x7e, 0x47, 0x3a, + 0x8e, 0x00, 0x7e, 0x48, 0x37, 0x67, 0x00, 0x7e, + 0x4a, 0x0a, 0xa3, 0x00, 0x7e, 0x4b, 0x07, 0x28, + 0x00, 0x7e, 0x4d, 0x09, 0x35, 0x00, 0x7e, 0x4e, + 0x56, 0xcf, 0x00, 0x7e, 0x50, 0x56, 0xd0, 0x00, + 0x7e, 0x52, 0x21, 0x94, 0x00, 0x7e, 0x54, 0x09, + 0xeb, 0x00, 0x7e, 0x55, 0x0a, 0xb8, 0x00, 0x7e, + 0x56, 0x17, 0xf3, 0x00, 0x7e, 0x58, 0x56, 0xd1, + 0x00, 0x7e, 0x59, 0x17, 0xf5, 0x00, 0x7e, 0x5a, + 0x17, 0xf6, 0x00, 0x7e, 0x5d, 0x17, 0xf2, 0x00, + 0x7e, 0x5e, 0x17, 0xf4, 0x00, 0x7e, 0x5f, 0x56, + 0xd2, 0x00, 0x7e, 0x61, 0x1e, 0x11, 0x00, 0x7e, + 0x62, 0x3a, 0x8f, 0x00, 0x7e, 0x65, 0x56, 0xd3, + 0x00, 0x7e, 0x66, 0x17, 0xe9, 0x00, 0x7e, 0x67, + 0x17, 0xf1, 0x00, 0x7e, 0x69, 0x17, 0xf9, 0x00, + 0x7e, 0x6a, 0x17, 0xf8, 0x00, 0x7e, 0x6b, 0x1d, + 0xf7, 0x00, 0x7e, 0x6d, 0x0e, 0xa8, 0x00, 0x7e, + 0x6e, 0x3a, 0x90, 0x00, 0x7e, 0x6f, 0x4c, 0xdd, + 0x00, 0x7e, 0x70, 0x07, 0x01, 0x00, 0x7e, 0x73, + 0x3a, 0x91, 0x00, 0x7e, 0x75, 0x47, 0xc5, 0x00, + 0x7e, 0x78, 0x4c, 0xde, 0x00, 0x7e, 0x79, 0x17, + 0xf7, 0x00, 0x7e, 0x7b, 0x17, 0xfb, 0x00, 0x7e, + 0x7c, 0x17, 0xfa, 0x00, 0x7e, 0x7d, 0x17, 0xfe, + 0x00, 0x7e, 0x7e, 0x47, 0xc6, 0x00, 0x7e, 0x7f, + 0x18, 0x00, 0x00, 0x7e, 0x81, 0x4c, 0xdf, 0x00, + 0x7e, 0x82, 0x08, 0x8a, 0x00, 0x7e, 0x83, 0x17, + 0xfc, 0x00, 0x7e, 0x86, 0x47, 0xc7, 0x00, 0x7e, + 0x87, 0x47, 0xc8, 0x00, 0x7e, 0x88, 0x18, 0x01, + 0x00, 0x7e, 0x89, 0x18, 0x02, 0x00, 0x7e, 0x8a, + 0x20, 0xa7, 0x00, 0x7e, 0x8c, 0x18, 0x03, 0x00, + 0x7e, 0x8d, 0x3a, 0x92, 0x00, 0x7e, 0x8e, 0x18, + 0x09, 0x00, 0x7e, 0x8f, 0x0c, 0x35, 0x00, 0x7e, + 0x90, 0x18, 0x05, 0x00, 0x7e, 0x91, 0x3a, 0x93, + 0x00, 0x7e, 0x92, 0x18, 0x04, 0x00, 0x7e, 0x93, + 0x18, 0x06, 0x00, 0x7e, 0x94, 0x18, 0x07, 0x00, + 0x7e, 0x95, 0x56, 0xd4, 0x00, 0x7e, 0x96, 0x18, + 0x08, 0x00, 0x7e, 0x98, 0x3a, 0x94, 0x00, 0x7e, + 0x9a, 0x47, 0xca, 0x00, 0x7e, 0x9b, 0x18, 0x0a, + 0x00, 0x7e, 0x9c, 0x18, 0x0b, 0x00, 0x7e, 0x9d, + 0x56, 0xd5, 0x00, 0x7e, 0x9e, 0x56, 0xd6, 0x00, + 0x7f, 0x36, 0x06, 0x08, 0x00, 0x7f, 0x38, 0x18, + 0x0c, 0x00, 0x7f, 0x3a, 0x18, 0x0d, 0x00, 0x7f, + 0x3b, 0x47, 0xcd, 0x00, 0x7f, 0x3c, 0x47, 0xcc, + 0x00, 0x7f, 0x3d, 0x4c, 0xe0, 0x00, 0x7f, 0x3e, + 0x47, 0xce, 0x00, 0x7f, 0x3f, 0x56, 0xd7, 0x00, + 0x7f, 0x43, 0x47, 0xcf, 0x00, 0x7f, 0x44, 0x3a, + 0x95, 0x00, 0x7f, 0x45, 0x18, 0x0e, 0x00, 0x7f, + 0x47, 0x21, 0x95, 0x00, 0x7f, 0x4c, 0x18, 0x0f, + 0x00, 0x7f, 0x4d, 0x18, 0x10, 0x00, 0x7f, 0x4e, + 0x18, 0x11, 0x00, 0x7f, 0x4f, 0x3a, 0x96, 0x00, + 0x7f, 0x50, 0x18, 0x12, 0x00, 0x7f, 0x51, 0x18, + 0x13, 0x00, 0x7f, 0x52, 0x3a, 0x97, 0x00, 0x7f, + 0x53, 0x3a, 0x98, 0x00, 0x7f, 0x54, 0x18, 0x15, + 0x00, 0x7f, 0x55, 0x18, 0x14, 0x00, 0x7f, 0x58, + 0x18, 0x16, 0x00, 0x7f, 0x5b, 0x4c, 0xe1, 0x00, + 0x7f, 0x5c, 0x56, 0xd8, 0x00, 0x7f, 0x5d, 0x4c, + 0xe2, 0x00, 0x7f, 0x5f, 0x18, 0x17, 0x00, 0x7f, + 0x60, 0x18, 0x18, 0x00, 0x7f, 0x61, 0x3a, 0x99, + 0x00, 0x7f, 0x63, 0x47, 0xd3, 0x00, 0x7f, 0x64, + 0x47, 0xd4, 0x00, 0x7f, 0x65, 0x4c, 0xe3, 0x00, + 0x7f, 0x66, 0x56, 0xd9, 0x00, 0x7f, 0x67, 0x18, + 0x1b, 0x00, 0x7f, 0x68, 0x18, 0x19, 0x00, 0x7f, + 0x69, 0x18, 0x1a, 0x00, 0x7f, 0x6a, 0x08, 0x51, + 0x00, 0x7f, 0x6b, 0x07, 0x29, 0x00, 0x7f, 0x6d, + 0x47, 0xd5, 0x00, 0x7f, 0x6e, 0x0b, 0x94, 0x00, + 0x7f, 0x70, 0x0d, 0x47, 0x00, 0x7f, 0x71, 0x4c, + 0xe4, 0x00, 0x7f, 0x72, 0x34, 0x29, 0x00, 0x7f, + 0x75, 0x0d, 0x03, 0x00, 0x7f, 0x77, 0x0d, 0x81, + 0x00, 0x7f, 0x78, 0x18, 0x1c, 0x00, 0x7f, 0x79, + 0x13, 0x36, 0x00, 0x7f, 0x7d, 0x47, 0xd6, 0x00, + 0x7f, 0x7e, 0x47, 0xd7, 0x00, 0x7f, 0x7f, 0x4c, + 0xe5, 0x00, 0x7f, 0x80, 0x4c, 0xe6, 0x00, 0x7f, + 0x82, 0x18, 0x1d, 0x00, 0x7f, 0x83, 0x18, 0x1f, + 0x00, 0x7f, 0x85, 0x0f, 0x4f, 0x00, 0x7f, 0x86, + 0x18, 0x1e, 0x00, 0x7f, 0x87, 0x18, 0x21, 0x00, + 0x7f, 0x88, 0x18, 0x20, 0x00, 0x7f, 0x8a, 0x36, + 0xfe, 0x00, 0x7f, 0x8b, 0x4c, 0xe7, 0x00, 0x7f, + 0x8c, 0x18, 0x22, 0x00, 0x7f, 0x8d, 0x56, 0xdb, + 0x00, 0x7f, 0x8e, 0x0d, 0x92, 0x00, 0x7f, 0x8f, + 0x56, 0xdc, 0x00, 0x7f, 0x90, 0x47, 0xd8, 0x00, + 0x7f, 0x91, 0x3a, 0x9a, 0x00, 0x7f, 0x94, 0x18, + 0x23, 0x00, 0x7f, 0x96, 0x47, 0xdb, 0x00, 0x7f, + 0x97, 0x42, 0x96, 0x00, 0x7f, 0x9a, 0x18, 0x26, + 0x00, 0x7f, 0x9c, 0x47, 0xdc, 0x00, 0x7f, 0x9d, + 0x18, 0x25, 0x00, 0x7f, 0x9e, 0x18, 0x24, 0x00, + 0x7f, 0xa1, 0x21, 0x96, 0x00, 0x7f, 0xa2, 0x4c, + 0xe8, 0x00, 0x7f, 0xa3, 0x18, 0x27, 0x00, 0x7f, + 0xa4, 0x07, 0x08, 0x00, 0x7f, 0xa6, 0x56, 0xdd, + 0x00, 0x7f, 0xa8, 0x0a, 0xa4, 0x00, 0x7f, 0xa9, + 0x06, 0x5b, 0x00, 0x7f, 0xaa, 0x56, 0xde, 0x00, + 0x7f, 0xad, 0x47, 0xdd, 0x00, 0x7f, 0xae, 0x18, + 0x2b, 0x00, 0x7f, 0xaf, 0x18, 0x28, 0x00, 0x7f, + 0xb2, 0x18, 0x29, 0x00, 0x7f, 0xb4, 0x56, 0xdf, + 0x00, 0x7f, 0xb6, 0x18, 0x2c, 0x00, 0x7f, 0xb8, + 0x18, 0x2d, 0x00, 0x7f, 0xb9, 0x18, 0x2a, 0x00, + 0x7f, 0xbc, 0x56, 0xe0, 0x00, 0x7f, 0xbd, 0x21, + 0x97, 0x00, 0x7f, 0xbf, 0x3a, 0x9b, 0x00, 0x7f, + 0xc0, 0x56, 0xe1, 0x00, 0x7f, 0xc1, 0x05, 0x27, + 0x00, 0x7f, 0xc3, 0x47, 0xdf, 0x00, 0x7f, 0xc5, + 0x18, 0x2f, 0x00, 0x7f, 0xc6, 0x18, 0x30, 0x00, + 0x7f, 0xc8, 0x56, 0xe2, 0x00, 0x7f, 0xca, 0x18, + 0x31, 0x00, 0x7f, 0xcc, 0x0f, 0x4c, 0x00, 0x7f, + 0xce, 0x3a, 0x9c, 0x00, 0x7f, 0xcf, 0x47, 0xe0, + 0x00, 0x7f, 0xd2, 0x09, 0x36, 0x00, 0x7f, 0xd4, + 0x18, 0x33, 0x00, 0x7f, 0xd5, 0x18, 0x32, 0x00, + 0x7f, 0xdb, 0x42, 0x97, 0x00, 0x7f, 0xdf, 0x3a, + 0x9d, 0x00, 0x7f, 0xe0, 0x0a, 0x2f, 0x00, 0x7f, + 0xe1, 0x18, 0x34, 0x00, 0x7f, 0xe3, 0x47, 0xe1, + 0x00, 0x7f, 0xe5, 0x3a, 0x9e, 0x00, 0x7f, 0xe6, + 0x18, 0x35, 0x00, 0x7f, 0xe8, 0x56, 0xe3, 0x00, + 0x7f, 0xe9, 0x18, 0x36, 0x00, 0x7f, 0xeb, 0x06, + 0x21, 0x00, 0x7f, 0xec, 0x3a, 0x9f, 0x00, 0x7f, + 0xee, 0x3a, 0xa0, 0x00, 0x7f, 0xef, 0x3a, 0xa1, + 0x00, 0x7f, 0xf0, 0x06, 0x09, 0x00, 0x7f, 0xf2, + 0x47, 0xe2, 0x00, 0x7f, 0xf3, 0x18, 0x37, 0x00, + 0x7f, 0xf9, 0x18, 0x38, 0x00, 0x7f, 0xfa, 0x3a, + 0xa2, 0x00, 0x7f, 0xfb, 0x0e, 0x8b, 0x00, 0x7f, + 0xfc, 0x0f, 0x4d, 0x00, 0x7f, 0xfd, 0x4c, 0xe9, + 0x00, 0x7f, 0xfe, 0x4c, 0xea, 0x00, 0x7f, 0xff, + 0x4c, 0xeb, 0x00, 0x80, 0x00, 0x0f, 0x3e, 0x00, + 0x80, 0x01, 0x0f, 0xdd, 0x00, 0x80, 0x02, 0x37, + 0x13, 0x00, 0x80, 0x03, 0x07, 0xdf, 0x00, 0x80, + 0x04, 0x18, 0x3b, 0x00, 0x80, 0x05, 0x09, 0x00, + 0x00, 0x80, 0x06, 0x18, 0x3a, 0x00, 0x80, 0x07, + 0x4c, 0xec, 0x00, 0x80, 0x08, 0x47, 0xe4, 0x00, + 0x80, 0x0a, 0x47, 0xe3, 0x00, 0x80, 0x0b, 0x18, + 0x3c, 0x00, 0x80, 0x0c, 0x08, 0xd5, 0x00, 0x80, + 0x0d, 0x4c, 0xed, 0x00, 0x80, 0x0e, 0x3a, 0xa3, + 0x00, 0x80, 0x0f, 0x56, 0xe4, 0x00, 0x80, 0x10, + 0x0b, 0x31, 0x00, 0x80, 0x11, 0x3a, 0xa4, 0x00, + 0x80, 0x12, 0x18, 0x3d, 0x00, 0x80, 0x13, 0x56, + 0xe5, 0x00, 0x80, 0x14, 0x3a, 0xa5, 0x00, 0x80, + 0x15, 0x07, 0xde, 0x00, 0x80, 0x16, 0x47, 0xe5, + 0x00, 0x80, 0x17, 0x0e, 0xe3, 0x00, 0x80, 0x18, + 0x18, 0x3e, 0x00, 0x80, 0x19, 0x18, 0x3f, 0x00, + 0x80, 0x1c, 0x18, 0x40, 0x00, 0x80, 0x1d, 0x56, + 0xe6, 0x00, 0x80, 0x1e, 0x4c, 0xee, 0x00, 0x80, + 0x1f, 0x56, 0xe7, 0x00, 0x80, 0x20, 0x56, 0xe8, + 0x00, 0x80, 0x21, 0x18, 0x41, 0x00, 0x80, 0x24, + 0x3a, 0xa6, 0x00, 0x80, 0x26, 0x3a, 0xa7, 0x00, + 0x80, 0x28, 0x18, 0x42, 0x00, 0x80, 0x2c, 0x47, + 0xe6, 0x00, 0x80, 0x2e, 0x56, 0xe9, 0x00, 0x80, + 0x30, 0x47, 0xe7, 0x00, 0x80, 0x33, 0x08, 0xd6, + 0x00, 0x80, 0x34, 0x56, 0xea, 0x00, 0x80, 0x35, + 0x42, 0x98, 0x00, 0x80, 0x36, 0x0e, 0xf9, 0x00, + 0x80, 0x37, 0x42, 0x99, 0x00, 0x80, 0x39, 0x4c, + 0xef, 0x00, 0x80, 0x3a, 0x3a, 0xa8, 0x00, 0x80, + 0x3b, 0x18, 0x44, 0x00, 0x80, 0x3c, 0x3a, 0xa9, + 0x00, 0x80, 0x3d, 0x0b, 0x7d, 0x00, 0x80, 0x3e, + 0x56, 0xeb, 0x00, 0x80, 0x3f, 0x18, 0x43, 0x00, + 0x80, 0x40, 0x56, 0xec, 0x00, 0x80, 0x43, 0x47, + 0xe8, 0x00, 0x80, 0x44, 0x56, 0xed, 0x00, 0x80, + 0x46, 0x18, 0x46, 0x00, 0x80, 0x4a, 0x18, 0x45, + 0x00, 0x80, 0x52, 0x18, 0x47, 0x00, 0x80, 0x56, + 0x0a, 0x5f, 0x00, 0x80, 0x58, 0x18, 0x48, 0x00, + 0x80, 0x5a, 0x18, 0x49, 0x00, 0x80, 0x5e, 0x0e, + 0x09, 0x00, 0x80, 0x5f, 0x18, 0x4a, 0x00, 0x80, + 0x60, 0x3a, 0xaa, 0x00, 0x80, 0x61, 0x0a, 0xf1, + 0x00, 0x80, 0x62, 0x18, 0x4b, 0x00, 0x80, 0x64, + 0x56, 0xee, 0x00, 0x80, 0x66, 0x47, 0xe9, 0x00, + 0x80, 0x68, 0x18, 0x4c, 0x00, 0x80, 0x6d, 0x56, + 0xef, 0x00, 0x80, 0x6f, 0x0f, 0xc6, 0x00, 0x80, + 0x70, 0x18, 0x4f, 0x00, 0x80, 0x71, 0x3a, 0xab, + 0x00, 0x80, 0x72, 0x18, 0x4e, 0x00, 0x80, 0x73, + 0x18, 0x4d, 0x00, 0x80, 0x74, 0x0b, 0xcc, 0x00, + 0x80, 0x75, 0x3a, 0xac, 0x00, 0x80, 0x76, 0x18, + 0x50, 0x00, 0x80, 0x77, 0x09, 0xec, 0x00, 0x80, + 0x79, 0x18, 0x51, 0x00, 0x80, 0x7b, 0x47, 0xea, + 0x00, 0x80, 0x7d, 0x18, 0x52, 0x00, 0x80, 0x7e, + 0x0f, 0xde, 0x00, 0x80, 0x7f, 0x18, 0x53, 0x00, + 0x80, 0x81, 0x56, 0xf0, 0x00, 0x80, 0x84, 0x18, + 0x54, 0x00, 0x80, 0x85, 0x18, 0x56, 0x00, 0x80, + 0x86, 0x18, 0x55, 0x00, 0x80, 0x87, 0x0d, 0x39, + 0x00, 0x80, 0x88, 0x4c, 0xf0, 0x00, 0x80, 0x89, + 0x0c, 0xd1, 0x00, 0x80, 0x8b, 0x0f, 0xe4, 0x00, + 0x80, 0x8c, 0x0d, 0x3d, 0x00, 0x80, 0x8e, 0x4c, + 0xf1, 0x00, 0x80, 0x93, 0x18, 0x58, 0x00, 0x80, + 0x96, 0x09, 0xbb, 0x00, 0x80, 0x98, 0x0d, 0x9c, + 0x00, 0x80, 0x99, 0x47, 0xeb, 0x00, 0x80, 0x9a, + 0x18, 0x59, 0x00, 0x80, 0x9b, 0x18, 0x57, 0x00, + 0x80, 0x9c, 0x47, 0xec, 0x00, 0x80, 0x9d, 0x06, + 0x0a, 0x00, 0x80, 0x9e, 0x3a, 0xad, 0x00, 0x80, + 0xa1, 0x07, 0x88, 0x00, 0x80, 0xa2, 0x08, 0xb6, + 0x00, 0x80, 0xa4, 0x47, 0xed, 0x00, 0x80, 0xa5, + 0x0d, 0x82, 0x00, 0x80, 0xa6, 0x3a, 0xae, 0x00, + 0x80, 0xa7, 0x47, 0xee, 0x00, 0x80, 0xa9, 0x07, + 0x5e, 0x00, 0x80, 0xaa, 0x0e, 0x71, 0x00, 0x80, + 0xab, 0x3a, 0xaf, 0x00, 0x80, 0xac, 0x18, 0x5c, + 0x00, 0x80, 0xad, 0x18, 0x5a, 0x00, 0x80, 0xaf, + 0x07, 0xe0, 0x00, 0x80, 0xb1, 0x07, 0xe1, 0x00, + 0x80, 0xb2, 0x04, 0xad, 0x00, 0x80, 0xb4, 0x08, + 0x58, 0x00, 0x80, 0xb8, 0x47, 0xef, 0x00, 0x80, + 0xb9, 0x56, 0xf1, 0x00, 0x80, 0xba, 0x0d, 0x0f, + 0x00, 0x80, 0xc3, 0x04, 0xa3, 0x00, 0x80, 0xc4, + 0x18, 0x61, 0x00, 0x80, 0xc5, 0x47, 0xf1, 0x00, + 0x80, 0xc6, 0x0b, 0x7e, 0x00, 0x80, 0xc8, 0x56, + 0xf2, 0x00, 0x80, 0xca, 0x42, 0x9a, 0x00, 0x80, + 0xcc, 0x0d, 0x0e, 0x00, 0x80, 0xcd, 0x56, 0xf3, + 0x00, 0x80, 0xce, 0x0b, 0x3b, 0x00, 0x80, 0xcf, + 0x4c, 0xf2, 0x00, 0x80, 0xd2, 0x56, 0xf4, 0x00, + 0x80, 0xd4, 0x4c, 0xf3, 0x00, 0x80, 0xd5, 0x47, + 0xf2, 0x00, 0x80, 0xd6, 0x18, 0x63, 0x00, 0x80, + 0xd7, 0x3a, 0xb0, 0x00, 0x80, 0xd8, 0x3a, 0xb1, + 0x00, 0x80, 0xd9, 0x18, 0x5f, 0x00, 0x80, 0xda, + 0x18, 0x62, 0x00, 0x80, 0xdb, 0x18, 0x5d, 0x00, + 0x80, 0xdd, 0x18, 0x60, 0x00, 0x80, 0xde, 0x0e, + 0x54, 0x00, 0x80, 0xe0, 0x42, 0x9b, 0x00, 0x80, + 0xe1, 0x07, 0x89, 0x00, 0x80, 0xe4, 0x04, 0xc1, + 0x00, 0x80, 0xe5, 0x18, 0x5e, 0x00, 0x80, 0xe6, + 0x47, 0xf3, 0x00, 0x80, 0xed, 0x4c, 0xf4, 0x00, + 0x80, 0xee, 0x56, 0xf5, 0x00, 0x80, 0xef, 0x18, + 0x65, 0x00, 0x80, 0xf0, 0x4c, 0xf5, 0x00, 0x80, + 0xf1, 0x18, 0x66, 0x00, 0x80, 0xf2, 0x56, 0xf6, + 0x00, 0x80, 0xf3, 0x42, 0x9c, 0x00, 0x80, 0xf4, + 0x0c, 0x91, 0x00, 0x80, 0xf5, 0x47, 0xf5, 0x00, + 0x80, 0xf6, 0x56, 0xf7, 0x00, 0x80, 0xf7, 0x4c, + 0xf6, 0x00, 0x80, 0xf8, 0x06, 0xb3, 0x00, 0x80, + 0xf9, 0x56, 0xf8, 0x00, 0x80, 0xfa, 0x4c, 0xf7, + 0x00, 0x80, 0xfb, 0x47, 0xf6, 0x00, 0x80, 0xfc, + 0x18, 0x71, 0x00, 0x80, 0xfd, 0x0c, 0xf3, 0x00, + 0x80, 0xfe, 0x4c, 0xf8, 0x00, 0x81, 0x02, 0x08, + 0xb7, 0x00, 0x81, 0x03, 0x4c, 0xf9, 0x00, 0x81, + 0x05, 0x06, 0xb4, 0x00, 0x81, 0x06, 0x0a, 0x6c, + 0x00, 0x81, 0x07, 0x0f, 0xec, 0x00, 0x81, 0x08, + 0x0e, 0xba, 0x00, 0x81, 0x09, 0x18, 0x64, 0x00, + 0x81, 0x0a, 0x0a, 0x78, 0x00, 0x81, 0x0b, 0x56, + 0xf9, 0x00, 0x81, 0x0d, 0x47, 0xf4, 0x00, 0x81, + 0x16, 0x3a, 0xb2, 0x00, 0x81, 0x17, 0x4c, 0xfa, + 0x00, 0x81, 0x18, 0x3a, 0xb3, 0x00, 0x81, 0x1a, + 0x06, 0x6d, 0x00, 0x81, 0x1b, 0x18, 0x67, 0x00, + 0x81, 0x1c, 0x56, 0xfa, 0x00, 0x81, 0x1e, 0x47, + 0xf9, 0x00, 0x81, 0x20, 0x56, 0xfb, 0x00, 0x81, + 0x23, 0x18, 0x69, 0x00, 0x81, 0x24, 0x47, 0xfb, + 0x00, 0x81, 0x27, 0x47, 0xfc, 0x00, 0x81, 0x29, + 0x18, 0x68, 0x00, 0x81, 0x2b, 0x36, 0x59, 0x00, + 0x81, 0x2c, 0x47, 0xfd, 0x00, 0x81, 0x2f, 0x18, + 0x6a, 0x00, 0x81, 0x30, 0x4c, 0xfb, 0x00, 0x81, + 0x31, 0x0b, 0x64, 0x00, 0x81, 0x33, 0x0c, 0xf4, + 0x00, 0x81, 0x35, 0x47, 0xf8, 0x00, 0x81, 0x39, + 0x0b, 0xcd, 0x00, 0x81, 0x3a, 0x3a, 0xb4, 0x00, + 0x81, 0x3c, 0x56, 0xfc, 0x00, 0x81, 0x3d, 0x47, + 0xff, 0x00, 0x81, 0x3e, 0x18, 0x6e, 0x00, 0x81, + 0x41, 0x37, 0x72, 0x00, 0x81, 0x45, 0x56, 0xfd, + 0x00, 0x81, 0x46, 0x18, 0x6d, 0x00, 0x81, 0x47, + 0x56, 0xfe, 0x00, 0x81, 0x4a, 0x3a, 0xb5, 0x00, + 0x81, 0x4b, 0x18, 0x6b, 0x00, 0x81, 0x4c, 0x3a, + 0xb6, 0x00, 0x81, 0x4e, 0x0a, 0x1b, 0x00, 0x81, + 0x50, 0x0d, 0xd7, 0x00, 0x81, 0x51, 0x18, 0x70, + 0x00, 0x81, 0x52, 0x56, 0xff, 0x00, 0x81, 0x53, + 0x18, 0x6f, 0x00, 0x81, 0x54, 0x07, 0xe2, 0x00, + 0x81, 0x55, 0x0f, 0xf9, 0x00, 0x81, 0x57, 0x4c, + 0xfc, 0x00, 0x81, 0x5f, 0x18, 0x80, 0x00, 0x81, + 0x60, 0x42, 0x9d, 0x00, 0x81, 0x61, 0x57, 0x00, + 0x00, 0x81, 0x65, 0x18, 0x74, 0x00, 0x81, 0x66, + 0x18, 0x75, 0x00, 0x81, 0x67, 0x42, 0x9e, 0x00, + 0x81, 0x68, 0x42, 0x9f, 0x00, 0x81, 0x69, 0x48, + 0x01, 0x00, 0x81, 0x6b, 0x09, 0x1c, 0x00, 0x81, + 0x6d, 0x42, 0xa0, 0x00, 0x81, 0x6e, 0x18, 0x73, + 0x00, 0x81, 0x6f, 0x4c, 0xfd, 0x00, 0x81, 0x70, + 0x08, 0x0a, 0x00, 0x81, 0x71, 0x18, 0x72, 0x00, + 0x81, 0x73, 0x4c, 0xfe, 0x00, 0x81, 0x74, 0x18, + 0x76, 0x00, 0x81, 0x77, 0x57, 0x01, 0x00, 0x81, + 0x78, 0x0b, 0xce, 0x00, 0x81, 0x79, 0x0d, 0xf2, + 0x00, 0x81, 0x7a, 0x0a, 0xa5, 0x00, 0x81, 0x7f, + 0x0b, 0x3c, 0x00, 0x81, 0x80, 0x18, 0x7a, 0x00, + 0x81, 0x81, 0x3a, 0xb7, 0x00, 0x81, 0x82, 0x18, + 0x7b, 0x00, 0x81, 0x83, 0x18, 0x77, 0x00, 0x81, + 0x84, 0x3a, 0xb8, 0x00, 0x81, 0x85, 0x48, 0x04, + 0x00, 0x81, 0x86, 0x57, 0x02, 0x00, 0x81, 0x88, + 0x18, 0x78, 0x00, 0x81, 0x8a, 0x18, 0x79, 0x00, + 0x81, 0x8b, 0x4c, 0xff, 0x00, 0x81, 0x8e, 0x57, + 0x03, 0x00, 0x81, 0x8f, 0x07, 0xe3, 0x00, 0x81, + 0x90, 0x4d, 0x00, 0x00, 0x81, 0x93, 0x18, 0x81, + 0x00, 0x81, 0x95, 0x18, 0x7d, 0x00, 0x81, 0x96, + 0x57, 0x04, 0x00, 0x81, 0x98, 0x48, 0x06, 0x00, + 0x81, 0x9a, 0x0d, 0xd8, 0x00, 0x81, 0x9b, 0x4d, + 0x01, 0x00, 0x81, 0x9c, 0x0e, 0x9a, 0x00, 0x81, + 0x9d, 0x0d, 0x9a, 0x00, 0x81, 0x9e, 0x4d, 0x02, + 0x00, 0x81, 0xa0, 0x18, 0x7c, 0x00, 0x81, 0xa2, + 0x57, 0x05, 0x00, 0x81, 0xa3, 0x18, 0x7f, 0x00, + 0x81, 0xa4, 0x18, 0x7e, 0x00, 0x81, 0xa8, 0x0e, + 0x72, 0x00, 0x81, 0xa9, 0x18, 0x82, 0x00, 0x81, + 0xae, 0x57, 0x06, 0x00, 0x81, 0xb0, 0x18, 0x83, + 0x00, 0x81, 0xb2, 0x48, 0x07, 0x00, 0x81, 0xb3, + 0x0a, 0xb9, 0x00, 0x81, 0xb4, 0x3a, 0xb9, 0x00, + 0x81, 0xb5, 0x18, 0x84, 0x00, 0x81, 0xb8, 0x18, + 0x86, 0x00, 0x81, 0xba, 0x18, 0x8a, 0x00, 0x81, + 0xbb, 0x42, 0xa1, 0x00, 0x81, 0xbd, 0x18, 0x87, + 0x00, 0x81, 0xbe, 0x18, 0x85, 0x00, 0x81, 0xbf, + 0x0c, 0xf5, 0x00, 0x81, 0xc0, 0x18, 0x88, 0x00, + 0x81, 0xc1, 0x48, 0x08, 0x00, 0x81, 0xc2, 0x18, + 0x89, 0x00, 0x81, 0xc3, 0x48, 0x09, 0x00, 0x81, + 0xc5, 0x57, 0x07, 0x00, 0x81, 0xc6, 0x05, 0x32, + 0x00, 0x81, 0xc8, 0x18, 0x90, 0x00, 0x81, 0xc9, + 0x18, 0x8b, 0x00, 0x81, 0xca, 0x42, 0xa2, 0x00, + 0x81, 0xcb, 0x4d, 0x03, 0x00, 0x81, 0xcd, 0x18, + 0x8c, 0x00, 0x81, 0xce, 0x57, 0x08, 0x00, 0x81, + 0xcf, 0x3a, 0xba, 0x00, 0x81, 0xd1, 0x18, 0x8d, + 0x00, 0x81, 0xd3, 0x0b, 0x01, 0x00, 0x81, 0xd5, + 0x4d, 0x04, 0x00, 0x81, 0xd6, 0x48, 0x0a, 0x00, + 0x81, 0xd7, 0x42, 0xa3, 0x00, 0x81, 0xd8, 0x18, + 0x8f, 0x00, 0x81, 0xd9, 0x18, 0x8e, 0x00, 0x81, + 0xda, 0x18, 0x91, 0x00, 0x81, 0xdb, 0x48, 0x0b, + 0x00, 0x81, 0xdd, 0x4d, 0x05, 0x00, 0x81, 0xde, + 0x4d, 0x06, 0x00, 0x81, 0xdf, 0x18, 0x92, 0x00, + 0x81, 0xe0, 0x18, 0x93, 0x00, 0x81, 0xe1, 0x4d, + 0x07, 0x00, 0x81, 0xe3, 0x0a, 0x09, 0x00, 0x81, + 0xe4, 0x48, 0x0d, 0x00, 0x81, 0xe5, 0x05, 0x69, + 0x00, 0x81, 0xe7, 0x18, 0x94, 0x00, 0x81, 0xe8, + 0x0f, 0x9f, 0x00, 0x81, 0xea, 0x08, 0xd7, 0x00, + 0x81, 0xeb, 0x57, 0x09, 0x00, 0x81, 0xec, 0x48, + 0x0f, 0x00, 0x81, 0xed, 0x09, 0x37, 0x00, 0x81, + 0xef, 0x4d, 0x08, 0x00, 0x81, 0xf0, 0x57, 0x0a, + 0x00, 0x81, 0xf1, 0x57, 0x0b, 0x00, 0x81, 0xf2, + 0x57, 0x0c, 0x00, 0x81, 0xf3, 0x08, 0xb8, 0x00, + 0x81, 0xf4, 0x0b, 0x95, 0x00, 0x81, 0xf5, 0x57, + 0x0d, 0x00, 0x81, 0xf6, 0x4d, 0x09, 0x00, 0x81, + 0xf8, 0x57, 0x0e, 0x00, 0x81, 0xf9, 0x3a, 0xbb, + 0x00, 0x81, 0xfa, 0x18, 0x95, 0x00, 0x81, 0xfb, + 0x18, 0x96, 0x00, 0x81, 0xfc, 0x04, 0xd3, 0x00, + 0x81, 0xfd, 0x48, 0x10, 0x00, 0x81, 0xfe, 0x18, + 0x97, 0x00, 0x81, 0xff, 0x48, 0x11, 0x00, 0x82, + 0x00, 0x4d, 0x0a, 0x00, 0x82, 0x01, 0x18, 0x98, + 0x00, 0x82, 0x02, 0x18, 0x99, 0x00, 0x82, 0x03, + 0x3a, 0xbc, 0x00, 0x82, 0x04, 0x48, 0x13, 0x00, + 0x82, 0x05, 0x18, 0x9a, 0x00, 0x82, 0x07, 0x18, + 0x9b, 0x00, 0x82, 0x08, 0x06, 0xb5, 0x00, 0x82, + 0x09, 0x13, 0xaf, 0x00, 0x82, 0x0a, 0x18, 0x9c, + 0x00, 0x82, 0x0b, 0x4d, 0x0b, 0x00, 0x82, 0x0c, + 0x0a, 0x89, 0x00, 0x82, 0x0d, 0x18, 0x9d, 0x00, + 0x82, 0x0e, 0x08, 0xf7, 0x00, 0x82, 0x0f, 0x57, + 0x10, 0x00, 0x82, 0x10, 0x18, 0x9e, 0x00, 0x82, + 0x12, 0x10, 0x09, 0x00, 0x82, 0x13, 0x4d, 0x0c, + 0x00, 0x82, 0x14, 0x4d, 0x0d, 0x00, 0x82, 0x16, + 0x18, 0x9f, 0x00, 0x82, 0x17, 0x0e, 0x2e, 0x00, + 0x82, 0x18, 0x06, 0x18, 0x00, 0x82, 0x19, 0x48, + 0x15, 0x00, 0x82, 0x1a, 0x4d, 0x0e, 0x00, 0x82, + 0x1b, 0x0a, 0xa6, 0x00, 0x82, 0x1c, 0x09, 0x62, + 0x00, 0x82, 0x1d, 0x57, 0x11, 0x00, 0x82, 0x1e, + 0x0d, 0xe3, 0x00, 0x82, 0x1f, 0x09, 0x38, 0x00, + 0x82, 0x21, 0x3a, 0xbd, 0x00, 0x82, 0x22, 0x48, + 0x16, 0x00, 0x82, 0x28, 0x57, 0x12, 0x00, 0x82, + 0x29, 0x18, 0xa0, 0x00, 0x82, 0x2a, 0x07, 0xe4, + 0x00, 0x82, 0x2b, 0x18, 0xa1, 0x00, 0x82, 0x2c, + 0x0d, 0x60, 0x00, 0x82, 0x2e, 0x18, 0xaf, 0x00, + 0x82, 0x32, 0x3a, 0xbe, 0x00, 0x82, 0x33, 0x18, + 0xa3, 0x00, 0x82, 0x34, 0x3a, 0xbf, 0x00, 0x82, + 0x35, 0x0b, 0x29, 0x00, 0x82, 0x36, 0x0d, 0x2b, + 0x00, 0x82, 0x37, 0x07, 0x73, 0x00, 0x82, 0x38, + 0x18, 0xa2, 0x00, 0x82, 0x39, 0x0a, 0xa7, 0x00, + 0x82, 0x3a, 0x4d, 0x0f, 0x00, 0x82, 0x3c, 0x48, + 0x18, 0x00, 0x82, 0x40, 0x18, 0xa4, 0x00, 0x82, + 0x43, 0x57, 0x13, 0x00, 0x82, 0x44, 0x4d, 0x10, + 0x00, 0x82, 0x45, 0x48, 0x1a, 0x00, 0x82, 0x46, + 0x3a, 0xc0, 0x00, 0x82, 0x47, 0x0c, 0x16, 0x00, + 0x82, 0x49, 0x48, 0x19, 0x00, 0x82, 0x4b, 0x3a, + 0xc1, 0x00, 0x82, 0x4e, 0x57, 0x14, 0x00, 0x82, + 0x4f, 0x3a, 0xc2, 0x00, 0x82, 0x51, 0x57, 0x15, + 0x00, 0x82, 0x56, 0x57, 0x16, 0x00, 0x82, 0x57, + 0x48, 0x1e, 0x00, 0x82, 0x58, 0x18, 0xa6, 0x00, + 0x82, 0x59, 0x18, 0xa5, 0x00, 0x82, 0x5a, 0x18, + 0xa8, 0x00, 0x82, 0x5c, 0x48, 0x20, 0x00, 0x82, + 0x5d, 0x18, 0xa7, 0x00, 0x82, 0x5f, 0x18, 0xa9, + 0x00, 0x82, 0x60, 0x42, 0xa5, 0x00, 0x82, 0x62, + 0x18, 0xab, 0x00, 0x82, 0x63, 0x48, 0x21, 0x00, + 0x82, 0x64, 0x18, 0xaa, 0x00, 0x82, 0x66, 0x06, + 0x0b, 0x00, 0x82, 0x67, 0x57, 0x17, 0x00, 0x82, + 0x68, 0x18, 0xac, 0x00, 0x82, 0x6a, 0x18, 0xad, + 0x00, 0x82, 0x6b, 0x18, 0xae, 0x00, 0x82, 0x6d, + 0x4d, 0x11, 0x00, 0x82, 0x6e, 0x08, 0x21, 0x00, + 0x82, 0x6f, 0x0f, 0x91, 0x00, 0x82, 0x71, 0x18, + 0xb0, 0x00, 0x82, 0x72, 0x09, 0xed, 0x00, 0x82, + 0x74, 0x42, 0xa6, 0x00, 0x82, 0x76, 0x05, 0x12, + 0x00, 0x82, 0x77, 0x18, 0xb1, 0x00, 0x82, 0x78, + 0x18, 0xb2, 0x00, 0x82, 0x79, 0x37, 0x75, 0x00, + 0x82, 0x7b, 0x57, 0x18, 0x00, 0x82, 0x7d, 0x48, + 0x24, 0x00, 0x82, 0x7e, 0x18, 0xb3, 0x00, 0x82, + 0x7f, 0x48, 0x25, 0x00, 0x82, 0x80, 0x57, 0x19, + 0x00, 0x82, 0x81, 0x57, 0x1a, 0x00, 0x82, 0x83, + 0x48, 0x26, 0x00, 0x82, 0x84, 0x4d, 0x12, 0x00, + 0x82, 0x87, 0x57, 0x1b, 0x00, 0x82, 0x89, 0x4d, + 0x13, 0x00, 0x82, 0x8a, 0x48, 0x27, 0x00, 0x82, + 0x8b, 0x04, 0xb6, 0x00, 0x82, 0x8d, 0x18, 0xb4, + 0x00, 0x82, 0x8e, 0x3a, 0xc3, 0x00, 0x82, 0x91, + 0x4d, 0x14, 0x00, 0x82, 0x92, 0x18, 0xb5, 0x00, + 0x82, 0x93, 0x48, 0x28, 0x00, 0x82, 0x94, 0x57, + 0x1c, 0x00, 0x82, 0x96, 0x57, 0x1d, 0x00, 0x82, + 0x98, 0x57, 0x1e, 0x00, 0x82, 0x99, 0x0d, 0xd9, + 0x00, 0x82, 0x9a, 0x57, 0x1f, 0x00, 0x82, 0x9b, + 0x57, 0x20, 0x00, 0x82, 0x9d, 0x08, 0xf3, 0x00, + 0x82, 0x9f, 0x18, 0xb7, 0x00, 0x82, 0xa0, 0x57, + 0x21, 0x00, 0x82, 0xa1, 0x42, 0xa8, 0x00, 0x82, + 0xa3, 0x42, 0xa9, 0x00, 0x82, 0xa4, 0x42, 0xaa, + 0x00, 0x82, 0xa5, 0x05, 0x87, 0x00, 0x82, 0xa6, + 0x04, 0x76, 0x00, 0x82, 0xa7, 0x48, 0x29, 0x00, + 0x82, 0xa8, 0x48, 0x2a, 0x00, 0x82, 0xa9, 0x42, + 0xab, 0x00, 0x82, 0xaa, 0x4d, 0x15, 0x00, 0x82, + 0xab, 0x18, 0xb6, 0x00, 0x82, 0xac, 0x18, 0xb9, + 0x00, 0x82, 0xad, 0x0d, 0x04, 0x00, 0x82, 0xae, + 0x3a, 0xc4, 0x00, 0x82, 0xaf, 0x0a, 0x0a, 0x00, + 0x82, 0xb0, 0x4d, 0x16, 0x00, 0x82, 0xb1, 0x05, + 0x56, 0x00, 0x82, 0xb2, 0x48, 0x2b, 0x00, 0x82, + 0xb3, 0x0e, 0x55, 0x00, 0x82, 0xb4, 0x48, 0x2c, + 0x00, 0x82, 0xb7, 0x3a, 0xc5, 0x00, 0x82, 0xb8, + 0x07, 0x33, 0x00, 0x82, 0xb9, 0x06, 0xd4, 0x00, + 0x82, 0xba, 0x48, 0x2d, 0x00, 0x82, 0xbb, 0x18, + 0xb8, 0x00, 0x82, 0xbc, 0x48, 0x2e, 0x00, 0x82, + 0xbd, 0x35, 0x66, 0x00, 0x82, 0xbe, 0x3a, 0xc6, + 0x00, 0x82, 0xbf, 0x42, 0xac, 0x00, 0x82, 0xc5, + 0x05, 0xdf, 0x00, 0x82, 0xc6, 0x3a, 0xc7, 0x00, + 0x82, 0xd0, 0x4d, 0x17, 0x00, 0x82, 0xd1, 0x05, + 0x13, 0x00, 0x82, 0xd2, 0x18, 0xbd, 0x00, 0x82, + 0xd3, 0x0f, 0xb2, 0x00, 0x82, 0xd4, 0x0b, 0x3d, + 0x00, 0x82, 0xd5, 0x42, 0xad, 0x00, 0x82, 0xd7, + 0x0d, 0xb6, 0x00, 0x82, 0xd9, 0x18, 0xc9, 0x00, + 0x82, 0xda, 0x57, 0x22, 0x00, 0x82, 0xdb, 0x05, + 0x57, 0x00, 0x82, 0xdc, 0x18, 0xc7, 0x00, 0x82, + 0xde, 0x18, 0xc5, 0x00, 0x82, 0xdf, 0x18, 0xbc, + 0x00, 0x82, 0xe0, 0x57, 0x23, 0x00, 0x82, 0xe1, + 0x18, 0xba, 0x00, 0x82, 0xe2, 0x48, 0x2f, 0x00, + 0x82, 0xe3, 0x18, 0xbb, 0x00, 0x82, 0xe4, 0x57, + 0x24, 0x00, 0x82, 0xe5, 0x09, 0x0f, 0x00, 0x82, + 0xe6, 0x06, 0xe4, 0x00, 0x82, 0xe7, 0x0b, 0xb5, + 0x00, 0x82, 0xe8, 0x48, 0x30, 0x00, 0x82, 0xea, + 0x4d, 0x18, 0x00, 0x82, 0xeb, 0x0c, 0xa9, 0x00, + 0x82, 0xed, 0x57, 0x25, 0x00, 0x82, 0xef, 0x4d, + 0x19, 0x00, 0x82, 0xf1, 0x04, 0xf3, 0x00, 0x82, + 0xf3, 0x18, 0xbf, 0x00, 0x82, 0xf4, 0x18, 0xbe, + 0x00, 0x82, 0xf6, 0x4d, 0x1a, 0x00, 0x82, 0xf7, + 0x48, 0x31, 0x00, 0x82, 0xf9, 0x18, 0xc4, 0x00, + 0x82, 0xfa, 0x18, 0xc0, 0x00, 0x82, 0xfb, 0x18, + 0xc3, 0x00, 0x82, 0xfd, 0x42, 0xae, 0x00, 0x82, + 0xfe, 0x3a, 0xc8, 0x00, 0x83, 0x00, 0x42, 0xaf, + 0x00, 0x83, 0x01, 0x21, 0x98, 0x00, 0x83, 0x02, + 0x0e, 0xdc, 0x00, 0x83, 0x03, 0x18, 0xc2, 0x00, + 0x83, 0x04, 0x05, 0x58, 0x00, 0x83, 0x05, 0x05, + 0xdb, 0x00, 0x83, 0x06, 0x18, 0xc6, 0x00, 0x83, + 0x07, 0x48, 0x32, 0x00, 0x83, 0x08, 0x48, 0x33, + 0x00, 0x83, 0x09, 0x18, 0xc8, 0x00, 0x83, 0x0a, + 0x57, 0x26, 0x00, 0x83, 0x0b, 0x57, 0x27, 0x00, + 0x83, 0x0c, 0x48, 0x34, 0x00, 0x83, 0x0e, 0x07, + 0x2a, 0x00, 0x83, 0x16, 0x18, 0xcc, 0x00, 0x83, + 0x17, 0x18, 0xd5, 0x00, 0x83, 0x18, 0x18, 0xd6, + 0x00, 0x83, 0x1b, 0x48, 0x36, 0x00, 0x83, 0x1c, + 0x04, 0x6f, 0x00, 0x83, 0x1d, 0x48, 0x37, 0x00, + 0x83, 0x1e, 0x57, 0x28, 0x00, 0x83, 0x1f, 0x57, + 0x29, 0x00, 0x83, 0x21, 0x57, 0x2a, 0x00, 0x83, + 0x22, 0x42, 0xb0, 0x00, 0x83, 0x23, 0x18, 0xdd, + 0x00, 0x83, 0x28, 0x04, 0xb5, 0x00, 0x83, 0x2b, + 0x18, 0xd4, 0x00, 0x83, 0x2c, 0x57, 0x2b, 0x00, + 0x83, 0x2d, 0x42, 0xb1, 0x00, 0x83, 0x2e, 0x57, + 0x2c, 0x00, 0x83, 0x2f, 0x18, 0xd3, 0x00, 0x83, + 0x30, 0x48, 0x38, 0x00, 0x83, 0x31, 0x18, 0xce, + 0x00, 0x83, 0x32, 0x18, 0xcd, 0x00, 0x83, 0x33, + 0x57, 0x2d, 0x00, 0x83, 0x34, 0x18, 0xcb, 0x00, + 0x83, 0x35, 0x18, 0xca, 0x00, 0x83, 0x36, 0x0b, + 0xa1, 0x00, 0x83, 0x37, 0x57, 0x2e, 0x00, 0x83, + 0x38, 0x0b, 0x5b, 0x00, 0x83, 0x39, 0x18, 0xd0, + 0x00, 0x83, 0x3a, 0x42, 0xb2, 0x00, 0x83, 0x3c, + 0x48, 0x39, 0x00, 0x83, 0x3d, 0x57, 0x2f, 0x00, + 0x83, 0x40, 0x18, 0xcf, 0x00, 0x83, 0x42, 0x57, + 0x30, 0x00, 0x83, 0x43, 0x3a, 0xc9, 0x00, 0x83, + 0x44, 0x48, 0x3a, 0x00, 0x83, 0x45, 0x18, 0xd2, + 0x00, 0x83, 0x46, 0x1d, 0xf8, 0x00, 0x83, 0x47, + 0x42, 0xb3, 0x00, 0x83, 0x49, 0x0a, 0xf2, 0x00, + 0x83, 0x4a, 0x07, 0x2b, 0x00, 0x83, 0x4d, 0x57, + 0x31, 0x00, 0x83, 0x4e, 0x57, 0x32, 0x00, 0x83, + 0x4f, 0x04, 0xe3, 0x00, 0x83, 0x50, 0x18, 0xd1, + 0x00, 0x83, 0x51, 0x3a, 0xca, 0x00, 0x83, 0x52, + 0x07, 0xe5, 0x00, 0x83, 0x53, 0x57, 0x3c, 0x00, + 0x83, 0x54, 0x48, 0x35, 0x00, 0x83, 0x55, 0x3a, + 0xcb, 0x00, 0x83, 0x56, 0x4d, 0x1b, 0x00, 0x83, + 0x57, 0x48, 0x3b, 0x00, 0x83, 0x58, 0x0a, 0xf3, + 0x00, 0x83, 0x5a, 0x37, 0x7a, 0x00, 0x83, 0x62, + 0x21, 0x99, 0x00, 0x83, 0x63, 0x45, 0x6f, 0x00, + 0x83, 0x70, 0x57, 0x33, 0x00, 0x83, 0x73, 0x18, + 0xe3, 0x00, 0x83, 0x75, 0x18, 0xe4, 0x00, 0x83, + 0x77, 0x05, 0x59, 0x00, 0x83, 0x78, 0x4d, 0x1c, + 0x00, 0x83, 0x7b, 0x05, 0x2e, 0x00, 0x83, 0x7c, + 0x18, 0xe1, 0x00, 0x83, 0x7d, 0x42, 0xb4, 0x00, + 0x83, 0x7f, 0x21, 0x9a, 0x00, 0x83, 0x80, 0x57, + 0x34, 0x00, 0x83, 0x82, 0x57, 0x35, 0x00, 0x83, + 0x84, 0x57, 0x36, 0x00, 0x83, 0x85, 0x18, 0xd7, + 0x00, 0x83, 0x86, 0x3a, 0xcc, 0x00, 0x83, 0x87, + 0x18, 0xdf, 0x00, 0x83, 0x89, 0x18, 0xe6, 0x00, + 0x83, 0x8a, 0x18, 0xe0, 0x00, 0x83, 0x8d, 0x3a, + 0xcd, 0x00, 0x83, 0x8e, 0x18, 0xde, 0x00, 0x83, + 0x92, 0x3a, 0xce, 0x00, 0x83, 0x93, 0x18, 0xc1, + 0x00, 0x83, 0x94, 0x48, 0x3f, 0x00, 0x83, 0x95, + 0x48, 0x40, 0x00, 0x83, 0x96, 0x18, 0xdc, 0x00, + 0x83, 0x98, 0x3a, 0xcf, 0x00, 0x83, 0x99, 0x57, + 0x37, 0x00, 0x83, 0x9a, 0x18, 0xd8, 0x00, 0x83, + 0x9b, 0x48, 0x41, 0x00, 0x83, 0x9c, 0x57, 0x38, + 0x00, 0x83, 0x9d, 0x48, 0x42, 0x00, 0x83, 0x9e, + 0x06, 0x0c, 0x00, 0x83, 0x9f, 0x18, 0xda, 0x00, + 0x83, 0xa0, 0x18, 0xe5, 0x00, 0x83, 0xa2, 0x18, + 0xdb, 0x00, 0x83, 0xa6, 0x57, 0x39, 0x00, 0x83, + 0xa7, 0x42, 0xb5, 0x00, 0x83, 0xa8, 0x18, 0xe7, + 0x00, 0x83, 0xa9, 0x3a, 0xd0, 0x00, 0x83, 0xaa, + 0x18, 0xd9, 0x00, 0x83, 0xab, 0x0d, 0x32, 0x00, + 0x83, 0xac, 0x57, 0x3a, 0x00, 0x83, 0xad, 0x57, + 0x3f, 0x00, 0x83, 0xb1, 0x0f, 0x53, 0x00, 0x83, + 0xb5, 0x18, 0xe2, 0x00, 0x83, 0xbd, 0x18, 0xf8, + 0x00, 0x83, 0xbe, 0x57, 0x3b, 0x00, 0x83, 0xbf, + 0x3a, 0xd1, 0x00, 0x83, 0xc0, 0x3a, 0xd2, 0x00, + 0x83, 0xc1, 0x18, 0xf0, 0x00, 0x83, 0xc5, 0x0a, + 0x41, 0x00, 0x83, 0xc7, 0x21, 0x9b, 0x00, 0x83, + 0xc9, 0x48, 0x43, 0x00, 0x83, 0xca, 0x06, 0x60, + 0x00, 0x83, 0xcc, 0x06, 0xd5, 0x00, 0x83, 0xce, + 0x18, 0xeb, 0x00, 0x83, 0xcf, 0x42, 0xb6, 0x00, + 0x83, 0xd0, 0x48, 0x44, 0x00, 0x83, 0xd1, 0x42, + 0xb7, 0x00, 0x83, 0xd3, 0x05, 0x5b, 0x00, 0x83, + 0xd4, 0x48, 0x45, 0x00, 0x83, 0xd6, 0x09, 0xbc, + 0x00, 0x83, 0xd8, 0x18, 0xee, 0x00, 0x83, 0xdc, + 0x08, 0x4a, 0x00, 0x83, 0xdd, 0x48, 0x46, 0x00, + 0x83, 0xdf, 0x0c, 0x4b, 0x00, 0x83, 0xe0, 0x18, + 0xf3, 0x00, 0x83, 0xe1, 0x42, 0xb8, 0x00, 0x83, + 0xe5, 0x48, 0x47, 0x00, 0x83, 0xe8, 0x57, 0x3d, + 0x00, 0x83, 0xe9, 0x0e, 0x3e, 0x00, 0x83, 0xea, + 0x3a, 0xd3, 0x00, 0x83, 0xeb, 0x18, 0xea, 0x00, + 0x83, 0xef, 0x05, 0x5a, 0x00, 0x83, 0xf0, 0x07, + 0x8a, 0x00, 0x83, 0xf1, 0x0d, 0x9b, 0x00, 0x83, + 0xf2, 0x18, 0xf4, 0x00, 0x83, 0xf4, 0x18, 0xe8, + 0x00, 0x83, 0xf6, 0x21, 0x9c, 0x00, 0x83, 0xf7, + 0x18, 0xf1, 0x00, 0x83, 0xf8, 0x4d, 0x1d, 0x00, + 0x83, 0xf9, 0x48, 0x48, 0x00, 0x83, 0xfb, 0x18, + 0xfb, 0x00, 0x83, 0xfc, 0x4d, 0x1e, 0x00, 0x83, + 0xfd, 0x18, 0xec, 0x00, 0x84, 0x01, 0x42, 0xb9, + 0x00, 0x84, 0x03, 0x18, 0xed, 0x00, 0x84, 0x04, + 0x0c, 0x92, 0x00, 0x84, 0x06, 0x42, 0xba, 0x00, + 0x84, 0x07, 0x18, 0xf2, 0x00, 0x84, 0x0a, 0x1e, + 0x7f, 0x00, 0x84, 0x0b, 0x18, 0xef, 0x00, 0x84, + 0x0c, 0x0e, 0x56, 0x00, 0x84, 0x0d, 0x18, 0xf5, + 0x00, 0x84, 0x0e, 0x04, 0xa4, 0x00, 0x84, 0x0f, + 0x3a, 0xd4, 0x00, 0x84, 0x11, 0x3a, 0xd5, 0x00, + 0x84, 0x13, 0x18, 0xe9, 0x00, 0x84, 0x15, 0x48, + 0x49, 0x00, 0x84, 0x17, 0x48, 0x4b, 0x00, 0x84, + 0x19, 0x57, 0x3e, 0x00, 0x84, 0x20, 0x18, 0xf7, + 0x00, 0x84, 0x22, 0x18, 0xf6, 0x00, 0x84, 0x29, + 0x0d, 0x21, 0x00, 0x84, 0x2a, 0x18, 0xfd, 0x00, + 0x84, 0x2c, 0x19, 0x08, 0x00, 0x84, 0x2f, 0x57, + 0x40, 0x00, 0x84, 0x31, 0x05, 0xdc, 0x00, 0x84, + 0x35, 0x19, 0x0b, 0x00, 0x84, 0x38, 0x18, 0xf9, + 0x00, 0x84, 0x39, 0x48, 0x4c, 0x00, 0x84, 0x3c, + 0x18, 0xfe, 0x00, 0x84, 0x3d, 0x0f, 0x58, 0x00, + 0x84, 0x45, 0x57, 0x41, 0x00, 0x84, 0x46, 0x19, + 0x07, 0x00, 0x84, 0x47, 0x57, 0x42, 0x00, 0x84, + 0x48, 0x21, 0x9d, 0x00, 0x84, 0x49, 0x0f, 0x3f, + 0x00, 0x84, 0x4a, 0x3a, 0xd6, 0x00, 0x84, 0x4d, + 0x57, 0x43, 0x00, 0x84, 0x4e, 0x0f, 0x72, 0x00, + 0x84, 0x4f, 0x48, 0x4d, 0x00, 0x84, 0x51, 0x48, + 0x4e, 0x00, 0x84, 0x52, 0x48, 0x4f, 0x00, 0x84, + 0x56, 0x57, 0x44, 0x00, 0x84, 0x57, 0x0b, 0xb6, + 0x00, 0x84, 0x58, 0x4d, 0x1f, 0x00, 0x84, 0x59, + 0x48, 0x50, 0x00, 0x84, 0x5a, 0x48, 0x51, 0x00, + 0x84, 0x5b, 0x05, 0xc9, 0x00, 0x84, 0x5c, 0x48, + 0x52, 0x00, 0x84, 0x5f, 0x42, 0xbb, 0x00, 0x84, + 0x60, 0x57, 0x46, 0x00, 0x84, 0x61, 0x0d, 0xe4, + 0x00, 0x84, 0x62, 0x19, 0x0d, 0x00, 0x84, 0x63, + 0x0c, 0x79, 0x00, 0x84, 0x64, 0x57, 0x47, 0x00, + 0x84, 0x65, 0x48, 0x54, 0x00, 0x84, 0x66, 0x04, + 0x75, 0x00, 0x84, 0x67, 0x57, 0x48, 0x00, 0x84, + 0x69, 0x19, 0x06, 0x00, 0x84, 0x6a, 0x57, 0x49, + 0x00, 0x84, 0x6b, 0x19, 0x02, 0x00, 0x84, 0x6c, + 0x0a, 0xf4, 0x00, 0x84, 0x6d, 0x18, 0xfc, 0x00, + 0x84, 0x6e, 0x19, 0x04, 0x00, 0x84, 0x6f, 0x19, + 0x09, 0x00, 0x84, 0x70, 0x42, 0xbc, 0x00, 0x84, + 0x71, 0x0c, 0xe2, 0x00, 0x84, 0x73, 0x42, 0xbd, + 0x00, 0x84, 0x74, 0x57, 0x4a, 0x00, 0x84, 0x75, + 0x04, 0x6e, 0x00, 0x84, 0x76, 0x3a, 0xd7, 0x00, + 0x84, 0x77, 0x19, 0x01, 0x00, 0x84, 0x78, 0x48, + 0x55, 0x00, 0x84, 0x79, 0x19, 0x0a, 0x00, 0x84, + 0x7a, 0x0d, 0xea, 0x00, 0x84, 0x7c, 0x48, 0x56, + 0x00, 0x84, 0x7d, 0x57, 0x4b, 0x00, 0x84, 0x81, + 0x48, 0x57, 0x00, 0x84, 0x82, 0x19, 0x05, 0x00, + 0x84, 0x84, 0x19, 0x00, 0x00, 0x84, 0x85, 0x42, + 0xbe, 0x00, 0x84, 0x8b, 0x09, 0xbd, 0x00, 0x84, + 0x90, 0x09, 0x39, 0x00, 0x84, 0x92, 0x57, 0x4c, + 0x00, 0x84, 0x93, 0x4d, 0x20, 0x00, 0x84, 0x94, + 0x08, 0xd8, 0x00, 0x84, 0x95, 0x57, 0x4d, 0x00, + 0x84, 0x97, 0x48, 0x59, 0x00, 0x84, 0x99, 0x0e, + 0xe4, 0x00, 0x84, 0x9c, 0x0d, 0xb9, 0x00, 0x84, + 0x9e, 0x42, 0xbf, 0x00, 0x84, 0x9f, 0x19, 0x10, + 0x00, 0x84, 0xa1, 0x19, 0x19, 0x00, 0x84, 0xa6, + 0x48, 0x5a, 0x00, 0x84, 0xa8, 0x3a, 0xd8, 0x00, + 0x84, 0xa9, 0x57, 0x4e, 0x00, 0x84, 0xaa, 0x57, + 0x4f, 0x00, 0x84, 0xad, 0x19, 0x03, 0x00, 0x84, + 0xaf, 0x3a, 0xd9, 0x00, 0x84, 0xb1, 0x4d, 0x21, + 0x00, 0x84, 0xb2, 0x05, 0xd5, 0x00, 0x84, 0xb4, + 0x21, 0x9e, 0x00, 0x84, 0xb8, 0x09, 0xe0, 0x00, + 0x84, 0xb9, 0x19, 0x0e, 0x00, 0x84, 0xba, 0x42, + 0xc0, 0x00, 0x84, 0xbb, 0x19, 0x13, 0x00, 0x84, + 0xbc, 0x0a, 0xf5, 0x00, 0x84, 0xbd, 0x4d, 0x22, + 0x00, 0x84, 0xbe, 0x48, 0x5b, 0x00, 0x84, 0xbf, + 0x19, 0x0f, 0x00, 0x84, 0xc0, 0x3a, 0xda, 0x00, + 0x84, 0xc1, 0x19, 0x16, 0x00, 0x84, 0xc2, 0x3a, + 0xdb, 0x00, 0x84, 0xc4, 0x0b, 0x9d, 0x00, 0x84, + 0xc6, 0x19, 0x17, 0x00, 0x84, 0xc7, 0x57, 0x50, + 0x00, 0x84, 0xc8, 0x57, 0x51, 0x00, 0x84, 0xc9, + 0x0f, 0x40, 0x00, 0x84, 0xca, 0x19, 0x0c, 0x00, + 0x84, 0xcb, 0x05, 0x96, 0x00, 0x84, 0xcc, 0x57, + 0x52, 0x00, 0x84, 0xcd, 0x19, 0x12, 0x00, 0x84, + 0xce, 0x48, 0x5d, 0x00, 0x84, 0xcf, 0x48, 0x5e, + 0x00, 0x84, 0xd0, 0x19, 0x15, 0x00, 0x84, 0xd1, + 0x0e, 0xb8, 0x00, 0x84, 0xd3, 0x48, 0x5f, 0x00, + 0x84, 0xd6, 0x19, 0x18, 0x00, 0x84, 0xd9, 0x19, + 0x11, 0x00, 0x84, 0xda, 0x19, 0x14, 0x00, 0x84, + 0xdc, 0x20, 0xab, 0x00, 0x84, 0xe7, 0x48, 0x61, + 0x00, 0x84, 0xea, 0x48, 0x62, 0x00, 0x84, 0xec, + 0x0e, 0x57, 0x00, 0x84, 0xee, 0x1e, 0x83, 0x00, + 0x84, 0xef, 0x48, 0x63, 0x00, 0x84, 0xf0, 0x3a, + 0xdc, 0x00, 0x84, 0xf1, 0x48, 0x64, 0x00, 0x84, + 0xf2, 0x57, 0x53, 0x00, 0x84, 0xf4, 0x19, 0x1c, + 0x00, 0x84, 0xf7, 0x57, 0x54, 0x00, 0x84, 0xfa, + 0x48, 0x65, 0x00, 0x84, 0xfb, 0x4d, 0x23, 0x00, + 0x84, 0xfc, 0x19, 0x23, 0x00, 0x84, 0xfd, 0x3a, + 0xdd, 0x00, 0x84, 0xff, 0x19, 0x1b, 0x00, 0x85, + 0x00, 0x08, 0xef, 0x00, 0x85, 0x02, 0x57, 0x55, + 0x00, 0x85, 0x03, 0x57, 0x56, 0x00, 0x85, 0x06, + 0x18, 0xfa, 0x00, 0x85, 0x07, 0x57, 0x57, 0x00, + 0x85, 0x0c, 0x3a, 0xde, 0x00, 0x85, 0x0e, 0x57, + 0x58, 0x00, 0x85, 0x10, 0x57, 0x59, 0x00, 0x85, + 0x11, 0x0e, 0x1e, 0x00, 0x85, 0x13, 0x0e, 0xae, + 0x00, 0x85, 0x14, 0x19, 0x22, 0x00, 0x85, 0x15, + 0x19, 0x21, 0x00, 0x85, 0x17, 0x19, 0x1d, 0x00, + 0x85, 0x18, 0x19, 0x1e, 0x00, 0x85, 0x1a, 0x04, + 0xd8, 0x00, 0x85, 0x1b, 0x48, 0x66, 0x00, 0x85, + 0x1c, 0x57, 0x5a, 0x00, 0x85, 0x1e, 0x42, 0xc3, + 0x00, 0x85, 0x1f, 0x19, 0x20, 0x00, 0x85, 0x21, + 0x19, 0x1a, 0x00, 0x85, 0x22, 0x57, 0x5b, 0x00, + 0x85, 0x23, 0x1e, 0x1a, 0x00, 0x85, 0x24, 0x48, + 0x67, 0x00, 0x85, 0x25, 0x48, 0x68, 0x00, 0x85, + 0x26, 0x0b, 0xf1, 0x00, 0x85, 0x27, 0x57, 0x5c, + 0x00, 0x85, 0x2a, 0x57, 0x5d, 0x00, 0x85, 0x2b, + 0x48, 0x69, 0x00, 0x85, 0x2c, 0x19, 0x1f, 0x00, + 0x85, 0x2d, 0x04, 0xc2, 0x00, 0x85, 0x2f, 0x42, + 0xc4, 0x00, 0x85, 0x32, 0x42, 0xc2, 0x00, 0x85, + 0x33, 0x57, 0x5e, 0x00, 0x85, 0x34, 0x3a, 0xdf, + 0x00, 0x85, 0x35, 0x0b, 0x02, 0x00, 0x85, 0x36, + 0x57, 0x5f, 0x00, 0x85, 0x3d, 0x0e, 0x13, 0x00, + 0x85, 0x3e, 0x1e, 0xb5, 0x00, 0x85, 0x3f, 0x57, + 0x60, 0x00, 0x85, 0x40, 0x19, 0x24, 0x00, 0x85, + 0x41, 0x19, 0x28, 0x00, 0x85, 0x43, 0x0d, 0x6d, + 0x00, 0x85, 0x46, 0x4d, 0x24, 0x00, 0x85, 0x48, + 0x19, 0x27, 0x00, 0x85, 0x49, 0x09, 0xbe, 0x00, + 0x85, 0x4a, 0x08, 0xf5, 0x00, 0x85, 0x4b, 0x19, + 0x2a, 0x00, 0x85, 0x4e, 0x06, 0xb6, 0x00, 0x85, + 0x4f, 0x48, 0x6a, 0x00, 0x85, 0x50, 0x57, 0x61, + 0x00, 0x85, 0x51, 0x48, 0x6d, 0x00, 0x85, 0x52, + 0x57, 0x62, 0x00, 0x85, 0x53, 0x21, 0x9f, 0x00, + 0x85, 0x55, 0x19, 0x2b, 0x00, 0x85, 0x56, 0x4d, + 0x25, 0x00, 0x85, 0x57, 0x0d, 0xeb, 0x00, 0x85, + 0x58, 0x19, 0x26, 0x00, 0x85, 0x59, 0x21, 0xa0, + 0x00, 0x85, 0x5a, 0x18, 0xff, 0x00, 0x85, 0x5c, + 0x57, 0x63, 0x00, 0x85, 0x5d, 0x4d, 0x26, 0x00, + 0x85, 0x5e, 0x3a, 0xe0, 0x00, 0x85, 0x5f, 0x57, + 0x65, 0x00, 0x85, 0x60, 0x57, 0x66, 0x00, 0x85, + 0x61, 0x48, 0x6e, 0x00, 0x85, 0x62, 0x48, 0x6f, + 0x00, 0x85, 0x63, 0x19, 0x25, 0x00, 0x85, 0x64, + 0x42, 0xc5, 0x00, 0x85, 0x68, 0x0f, 0xf5, 0x00, + 0x85, 0x69, 0x0c, 0x7a, 0x00, 0x85, 0x6a, 0x0d, + 0xe5, 0x00, 0x85, 0x6b, 0x21, 0xa1, 0x00, 0x85, + 0x6d, 0x19, 0x32, 0x00, 0x85, 0x6f, 0x48, 0x6b, + 0x00, 0x85, 0x77, 0x19, 0x38, 0x00, 0x85, 0x79, + 0x57, 0x67, 0x00, 0x85, 0x7a, 0x42, 0xc6, 0x00, + 0x85, 0x7b, 0x48, 0x71, 0x00, 0x85, 0x7d, 0x48, + 0x72, 0x00, 0x85, 0x7e, 0x19, 0x39, 0x00, 0x85, + 0x7f, 0x48, 0x73, 0x00, 0x85, 0x80, 0x19, 0x2c, + 0x00, 0x85, 0x81, 0x48, 0x74, 0x00, 0x85, 0x84, + 0x0d, 0x2c, 0x00, 0x85, 0x85, 0x4d, 0x27, 0x00, + 0x85, 0x86, 0x48, 0x75, 0x00, 0x85, 0x87, 0x19, + 0x36, 0x00, 0x85, 0x88, 0x19, 0x2e, 0x00, 0x85, + 0x89, 0x57, 0x68, 0x00, 0x85, 0x8a, 0x19, 0x30, + 0x00, 0x85, 0x8b, 0x57, 0x69, 0x00, 0x85, 0x8c, + 0x42, 0xc7, 0x00, 0x85, 0x8f, 0x3a, 0xe1, 0x00, + 0x85, 0x90, 0x19, 0x3a, 0x00, 0x85, 0x91, 0x19, + 0x2f, 0x00, 0x85, 0x93, 0x48, 0x76, 0x00, 0x85, + 0x94, 0x19, 0x33, 0x00, 0x85, 0x97, 0x05, 0x14, + 0x00, 0x85, 0x98, 0x4d, 0x28, 0x00, 0x85, 0x99, + 0x0c, 0xbd, 0x00, 0x85, 0x9b, 0x19, 0x34, 0x00, + 0x85, 0x9c, 0x19, 0x37, 0x00, 0x85, 0x9d, 0x48, + 0x77, 0x00, 0x85, 0x9f, 0x48, 0x78, 0x00, 0x85, + 0xa0, 0x57, 0x6a, 0x00, 0x85, 0xa2, 0x42, 0xc8, + 0x00, 0x85, 0xa4, 0x19, 0x2d, 0x00, 0x85, 0xa5, + 0x57, 0x6b, 0x00, 0x85, 0xa6, 0x0a, 0xa8, 0x00, + 0x85, 0xa7, 0x57, 0x6c, 0x00, 0x85, 0xa8, 0x19, + 0x31, 0x00, 0x85, 0xa9, 0x08, 0x75, 0x00, 0x85, + 0xaa, 0x0a, 0x0b, 0x00, 0x85, 0xab, 0x07, 0x06, + 0x00, 0x85, 0xac, 0x0f, 0x00, 0x00, 0x85, 0xad, + 0x3a, 0xe4, 0x00, 0x85, 0xae, 0x0f, 0x05, 0x00, + 0x85, 0xaf, 0x09, 0x7c, 0x00, 0x85, 0xb0, 0x21, + 0xa3, 0x00, 0x85, 0xb4, 0x57, 0x6d, 0x00, 0x85, + 0xb6, 0x57, 0x6e, 0x00, 0x85, 0xb7, 0x3a, 0xe2, + 0x00, 0x85, 0xb8, 0x57, 0x6f, 0x00, 0x85, 0xb9, + 0x19, 0x3e, 0x00, 0x85, 0xba, 0x19, 0x3c, 0x00, + 0x85, 0xbc, 0x48, 0x7c, 0x00, 0x85, 0xbd, 0x57, + 0x70, 0x00, 0x85, 0xbe, 0x57, 0x71, 0x00, 0x85, + 0xbf, 0x57, 0x72, 0x00, 0x85, 0xc1, 0x0f, 0xf4, + 0x00, 0x85, 0xc2, 0x57, 0x73, 0x00, 0x85, 0xc7, + 0x48, 0x7d, 0x00, 0x85, 0xc9, 0x19, 0x3b, 0x00, + 0x85, 0xca, 0x48, 0x7e, 0x00, 0x85, 0xcb, 0x42, + 0xc9, 0x00, 0x85, 0xcd, 0x0f, 0x5f, 0x00, 0x85, + 0xce, 0x3a, 0xe3, 0x00, 0x85, 0xcf, 0x19, 0x3d, + 0x00, 0x85, 0xd0, 0x19, 0x3f, 0x00, 0x85, 0xd5, + 0x19, 0x40, 0x00, 0x85, 0xd8, 0x48, 0x7f, 0x00, + 0x85, 0xd9, 0x48, 0x80, 0x00, 0x85, 0xda, 0x57, + 0x74, 0x00, 0x85, 0xdc, 0x19, 0x43, 0x00, 0x85, + 0xdd, 0x19, 0x41, 0x00, 0x85, 0xdf, 0x48, 0x81, + 0x00, 0x85, 0xe0, 0x57, 0x75, 0x00, 0x85, 0xe1, + 0x48, 0x82, 0x00, 0x85, 0xe4, 0x0c, 0x7b, 0x00, + 0x85, 0xe5, 0x19, 0x42, 0x00, 0x85, 0xe6, 0x48, + 0x83, 0x00, 0x85, 0xe8, 0x57, 0x76, 0x00, 0x85, + 0xe9, 0x0d, 0x61, 0x00, 0x85, 0xea, 0x19, 0x35, + 0x00, 0x85, 0xed, 0x42, 0xca, 0x00, 0x85, 0xf3, + 0x57, 0x77, 0x00, 0x85, 0xf4, 0x37, 0x80, 0x00, + 0x85, 0xf6, 0x48, 0x84, 0x00, 0x85, 0xf7, 0x09, + 0x7d, 0x00, 0x85, 0xf9, 0x19, 0x44, 0x00, 0x85, + 0xfa, 0x19, 0x49, 0x00, 0x85, 0xfb, 0x0a, 0xf6, + 0x00, 0x85, 0xfc, 0x57, 0x78, 0x00, 0x85, 0xfe, + 0x19, 0x48, 0x00, 0x85, 0xff, 0x42, 0xcb, 0x00, + 0x86, 0x00, 0x48, 0x85, 0x00, 0x86, 0x02, 0x19, + 0x29, 0x00, 0x86, 0x04, 0x42, 0xcc, 0x00, 0x86, + 0x05, 0x42, 0xcd, 0x00, 0x86, 0x06, 0x19, 0x4a, + 0x00, 0x86, 0x07, 0x0a, 0xcb, 0x00, 0x86, 0x0a, + 0x19, 0x45, 0x00, 0x86, 0x0b, 0x19, 0x47, 0x00, + 0x86, 0x0d, 0x57, 0x79, 0x00, 0x86, 0x0e, 0x57, + 0x7a, 0x00, 0x86, 0x10, 0x42, 0xce, 0x00, 0x86, + 0x11, 0x48, 0x86, 0x00, 0x86, 0x12, 0x3a, 0xe5, + 0x00, 0x86, 0x13, 0x19, 0x46, 0x00, 0x86, 0x16, + 0x14, 0xd0, 0x00, 0x86, 0x17, 0x14, 0xc1, 0x00, + 0x86, 0x18, 0x42, 0xd0, 0x00, 0x86, 0x19, 0x57, + 0x7b, 0x00, 0x86, 0x1a, 0x19, 0x4c, 0x00, 0x86, + 0x1b, 0x57, 0x7c, 0x00, 0x86, 0x1e, 0x48, 0x87, + 0x00, 0x86, 0x21, 0x48, 0x88, 0x00, 0x86, 0x22, + 0x19, 0x4b, 0x00, 0x86, 0x24, 0x48, 0x89, 0x00, + 0x86, 0x27, 0x48, 0x8a, 0x00, 0x86, 0x29, 0x3a, + 0xe6, 0x00, 0x86, 0x2d, 0x0f, 0x60, 0x00, 0x86, + 0x2f, 0x16, 0xb1, 0x00, 0x86, 0x30, 0x19, 0x4d, + 0x00, 0x86, 0x36, 0x57, 0x7d, 0x00, 0x86, 0x38, + 0x42, 0xd1, 0x00, 0x86, 0x39, 0x48, 0x8c, 0x00, + 0x86, 0x3a, 0x57, 0x7e, 0x00, 0x86, 0x3c, 0x48, + 0x8d, 0x00, 0x86, 0x3d, 0x57, 0x7f, 0x00, 0x86, + 0x3f, 0x19, 0x4e, 0x00, 0x86, 0x40, 0x48, 0x8f, + 0x00, 0x86, 0x41, 0x41, 0xb8, 0x00, 0x86, 0x42, + 0x4d, 0x29, 0x00, 0x86, 0x46, 0x4d, 0x2a, 0x00, + 0x86, 0x4d, 0x19, 0x4f, 0x00, 0x86, 0x4e, 0x07, + 0x8b, 0x00, 0x86, 0x50, 0x06, 0x6e, 0x00, 0x86, + 0x52, 0x3a, 0xe7, 0x00, 0x86, 0x53, 0x48, 0x90, + 0x00, 0x86, 0x54, 0x19, 0x51, 0x00, 0x86, 0x55, + 0x10, 0x94, 0x00, 0x86, 0x56, 0x48, 0x91, 0x00, + 0x86, 0x57, 0x42, 0xd2, 0x00, 0x86, 0x58, 0x57, + 0x80, 0x00, 0x86, 0x59, 0x57, 0x81, 0x00, 0x86, + 0x5a, 0x06, 0x8f, 0x00, 0x86, 0x5b, 0x34, 0x18, + 0x00, 0x86, 0x5c, 0x34, 0x52, 0x00, 0x86, 0x5d, + 0x57, 0x82, 0x00, 0x86, 0x5e, 0x06, 0xeb, 0x00, + 0x86, 0x5f, 0x19, 0x52, 0x00, 0x86, 0x60, 0x57, + 0x83, 0x00, 0x86, 0x61, 0x57, 0x84, 0x00, 0x86, + 0x62, 0x42, 0xd3, 0x00, 0x86, 0x63, 0x3a, 0xe8, + 0x00, 0x86, 0x64, 0x57, 0x85, 0x00, 0x86, 0x67, + 0x19, 0x53, 0x00, 0x86, 0x69, 0x57, 0x86, 0x00, + 0x86, 0x6b, 0x0b, 0xac, 0x00, 0x86, 0x6c, 0x3a, + 0xe9, 0x00, 0x86, 0x6f, 0x3a, 0xea, 0x00, 0x86, + 0x71, 0x19, 0x54, 0x00, 0x86, 0x75, 0x42, 0xd5, + 0x00, 0x86, 0x76, 0x57, 0x87, 0x00, 0x86, 0x77, + 0x48, 0x92, 0x00, 0x86, 0x79, 0x0c, 0xd2, 0x00, + 0x86, 0x7a, 0x3a, 0xeb, 0x00, 0x86, 0x7b, 0x04, + 0x7e, 0x00, 0x86, 0x7d, 0x37, 0x86, 0x00, 0x86, + 0x87, 0x48, 0x93, 0x00, 0x86, 0x88, 0x57, 0x99, + 0x00, 0x86, 0x89, 0x48, 0x94, 0x00, 0x86, 0x8a, + 0x05, 0x63, 0x00, 0x86, 0x8b, 0x19, 0x59, 0x00, + 0x86, 0x8c, 0x19, 0x5a, 0x00, 0x86, 0x8d, 0x3a, + 0xec, 0x00, 0x86, 0x91, 0x3a, 0xed, 0x00, 0x86, + 0x93, 0x19, 0x55, 0x00, 0x86, 0x95, 0x08, 0x8b, + 0x00, 0x86, 0x96, 0x57, 0x88, 0x00, 0x86, 0x98, + 0x3a, 0xee, 0x00, 0x86, 0x9a, 0x57, 0x89, 0x00, + 0x86, 0x9c, 0x48, 0x95, 0x00, 0x86, 0x9d, 0x48, + 0x96, 0x00, 0x86, 0xa1, 0x57, 0x8a, 0x00, 0x86, + 0xa3, 0x19, 0x56, 0x00, 0x86, 0xa4, 0x0c, 0xf8, + 0x00, 0x86, 0xa6, 0x57, 0x8b, 0x00, 0x86, 0xa7, + 0x3a, 0xef, 0x00, 0x86, 0xa8, 0x3a, 0xf0, 0x00, + 0x86, 0xa9, 0x19, 0x57, 0x00, 0x86, 0xaa, 0x19, + 0x58, 0x00, 0x86, 0xab, 0x19, 0x62, 0x00, 0x86, + 0xad, 0x57, 0x8c, 0x00, 0x86, 0xaf, 0x19, 0x5c, + 0x00, 0x86, 0xb0, 0x19, 0x5f, 0x00, 0x86, 0xb1, + 0x48, 0x97, 0x00, 0x86, 0xb3, 0x48, 0x98, 0x00, + 0x86, 0xb4, 0x57, 0x8d, 0x00, 0x86, 0xb5, 0x57, + 0x8e, 0x00, 0x86, 0xb6, 0x19, 0x5b, 0x00, 0x86, + 0xb7, 0x57, 0x8f, 0x00, 0x86, 0xb8, 0x42, 0xd6, + 0x00, 0x86, 0xb9, 0x57, 0x90, 0x00, 0x86, 0xbf, + 0x57, 0x91, 0x00, 0x86, 0xc0, 0x4d, 0x2b, 0x00, + 0x86, 0xc1, 0x48, 0x99, 0x00, 0x86, 0xc3, 0x48, + 0x9a, 0x00, 0x86, 0xc4, 0x19, 0x5d, 0x00, 0x86, + 0xc5, 0x57, 0x92, 0x00, 0x86, 0xc6, 0x19, 0x5e, + 0x00, 0x86, 0xc7, 0x09, 0x04, 0x00, 0x86, 0xc9, + 0x19, 0x60, 0x00, 0x86, 0xcb, 0x0b, 0x7f, 0x00, + 0x86, 0xcd, 0x07, 0x2c, 0x00, 0x86, 0xce, 0x05, + 0xa0, 0x00, 0x86, 0xd1, 0x48, 0x9b, 0x00, 0x86, + 0xd2, 0x57, 0x93, 0x00, 0x86, 0xd4, 0x19, 0x63, + 0x00, 0x86, 0xd5, 0x48, 0x9c, 0x00, 0x86, 0xd7, + 0x48, 0x9d, 0x00, 0x86, 0xd9, 0x05, 0x9d, 0x00, + 0x86, 0xda, 0x57, 0x94, 0x00, 0x86, 0xdb, 0x19, + 0x68, 0x00, 0x86, 0xdc, 0x57, 0x95, 0x00, 0x86, + 0xde, 0x19, 0x64, 0x00, 0x86, 0xdf, 0x19, 0x67, + 0x00, 0x86, 0xe0, 0x57, 0x96, 0x00, 0x86, 0xe3, + 0x48, 0x9e, 0x00, 0x86, 0xe4, 0x0d, 0x4e, 0x00, + 0x86, 0xe5, 0x57, 0x97, 0x00, 0x86, 0xe6, 0x48, + 0x9f, 0x00, 0x86, 0xe7, 0x57, 0x98, 0x00, 0x86, + 0xe9, 0x19, 0x65, 0x00, 0x86, 0xec, 0x19, 0x66, + 0x00, 0x86, 0xed, 0x0d, 0xba, 0x00, 0x86, 0xee, + 0x0d, 0x6e, 0x00, 0x86, 0xef, 0x19, 0x69, 0x00, + 0x86, 0xf8, 0x0b, 0x5d, 0x00, 0x86, 0xf9, 0x19, + 0x73, 0x00, 0x86, 0xfa, 0x3a, 0xf1, 0x00, 0x86, + 0xfb, 0x19, 0x6f, 0x00, 0x86, 0xfc, 0x42, 0xd7, + 0x00, 0x86, 0xfd, 0x3a, 0xf2, 0x00, 0x86, 0xfe, + 0x05, 0x6b, 0x00, 0x87, 0x00, 0x19, 0x6d, 0x00, + 0x87, 0x02, 0x0e, 0x58, 0x00, 0x87, 0x03, 0x19, + 0x6e, 0x00, 0x87, 0x04, 0x57, 0x9a, 0x00, 0x87, + 0x05, 0x48, 0xa1, 0x00, 0x87, 0x06, 0x19, 0x6b, + 0x00, 0x87, 0x07, 0x48, 0xa2, 0x00, 0x87, 0x08, + 0x19, 0x6c, 0x00, 0x87, 0x09, 0x19, 0x71, 0x00, + 0x87, 0x0a, 0x19, 0x74, 0x00, 0x87, 0x0b, 0x3a, + 0xf3, 0x00, 0x87, 0x0d, 0x19, 0x72, 0x00, 0x87, + 0x0e, 0x48, 0xa3, 0x00, 0x87, 0x0f, 0x57, 0x9b, + 0x00, 0x87, 0x10, 0x48, 0xa4, 0x00, 0x87, 0x11, + 0x19, 0x70, 0x00, 0x87, 0x12, 0x19, 0x6a, 0x00, + 0x87, 0x13, 0x3a, 0xf4, 0x00, 0x87, 0x14, 0x4d, + 0x2c, 0x00, 0x87, 0x18, 0x0b, 0x96, 0x00, 0x87, + 0x19, 0x3a, 0xf5, 0x00, 0x87, 0x1a, 0x19, 0x7b, + 0x00, 0x87, 0x1c, 0x0e, 0xb6, 0x00, 0x87, 0x1e, + 0x3a, 0xf6, 0x00, 0x87, 0x1f, 0x48, 0xa5, 0x00, + 0x87, 0x21, 0x48, 0xa6, 0x00, 0x87, 0x22, 0x4d, + 0x2d, 0x00, 0x87, 0x23, 0x48, 0xa7, 0x00, 0x87, + 0x25, 0x19, 0x79, 0x00, 0x87, 0x28, 0x3a, 0xf7, + 0x00, 0x87, 0x29, 0x19, 0x7a, 0x00, 0x87, 0x2e, + 0x4d, 0x2e, 0x00, 0x87, 0x2f, 0x57, 0x9c, 0x00, + 0x87, 0x31, 0x48, 0xa8, 0x00, 0x87, 0x32, 0x57, + 0x9d, 0x00, 0x87, 0x34, 0x19, 0x75, 0x00, 0x87, + 0x37, 0x19, 0x77, 0x00, 0x87, 0x39, 0x4d, 0x2f, + 0x00, 0x87, 0x3a, 0x48, 0xa9, 0x00, 0x87, 0x3b, + 0x19, 0x78, 0x00, 0x87, 0x3c, 0x57, 0x9e, 0x00, + 0x87, 0x3d, 0x57, 0x9f, 0x00, 0x87, 0x3e, 0x3a, + 0xf8, 0x00, 0x87, 0x3f, 0x19, 0x76, 0x00, 0x87, + 0x40, 0x48, 0xaa, 0x00, 0x87, 0x43, 0x48, 0xab, + 0x00, 0x87, 0x45, 0x57, 0xa0, 0x00, 0x87, 0x49, + 0x0a, 0x8a, 0x00, 0x87, 0x4b, 0x0f, 0xdf, 0x00, + 0x87, 0x4c, 0x19, 0x7f, 0x00, 0x87, 0x4d, 0x57, + 0xa1, 0x00, 0x87, 0x4e, 0x19, 0x80, 0x00, 0x87, + 0x51, 0x48, 0xac, 0x00, 0x87, 0x53, 0x19, 0x86, + 0x00, 0x87, 0x55, 0x09, 0xf0, 0x00, 0x87, 0x57, + 0x19, 0x82, 0x00, 0x87, 0x58, 0x48, 0xad, 0x00, + 0x87, 0x59, 0x19, 0x85, 0x00, 0x87, 0x5d, 0x4d, + 0x30, 0x00, 0x87, 0x5f, 0x19, 0x7d, 0x00, 0x87, + 0x60, 0x19, 0x7c, 0x00, 0x87, 0x61, 0x57, 0xa2, + 0x00, 0x87, 0x63, 0x19, 0x87, 0x00, 0x87, 0x64, + 0x48, 0xae, 0x00, 0x87, 0x65, 0x48, 0xaf, 0x00, + 0x87, 0x66, 0x05, 0x5c, 0x00, 0x87, 0x68, 0x19, + 0x83, 0x00, 0x87, 0x6a, 0x19, 0x88, 0x00, 0x87, + 0x6e, 0x19, 0x84, 0x00, 0x87, 0x6f, 0x57, 0xa3, + 0x00, 0x87, 0x71, 0x3a, 0xf9, 0x00, 0x87, 0x72, + 0x48, 0xb0, 0x00, 0x87, 0x74, 0x19, 0x81, 0x00, + 0x87, 0x76, 0x0b, 0xcf, 0x00, 0x87, 0x78, 0x19, + 0x7e, 0x00, 0x87, 0x7b, 0x4d, 0x31, 0x00, 0x87, + 0x7c, 0x48, 0xb1, 0x00, 0x87, 0x7f, 0x0d, 0x1e, + 0x00, 0x87, 0x82, 0x19, 0x8c, 0x00, 0x87, 0x83, + 0x57, 0xa4, 0x00, 0x87, 0x84, 0x57, 0xa5, 0x00, + 0x87, 0x85, 0x57, 0xa6, 0x00, 0x87, 0x86, 0x57, + 0xa7, 0x00, 0x87, 0x87, 0x42, 0xd8, 0x00, 0x87, + 0x88, 0x3a, 0xfa, 0x00, 0x87, 0x89, 0x48, 0xb5, + 0x00, 0x87, 0x8b, 0x48, 0xb6, 0x00, 0x87, 0x8c, + 0x4d, 0x32, 0x00, 0x87, 0x8d, 0x0f, 0x25, 0x00, + 0x87, 0x8e, 0x4d, 0x33, 0x00, 0x87, 0x90, 0x57, + 0xa8, 0x00, 0x87, 0x93, 0x48, 0xb7, 0x00, 0x87, + 0x95, 0x57, 0xa9, 0x00, 0x87, 0x97, 0x4d, 0x34, + 0x00, 0x87, 0x98, 0x4d, 0x35, 0x00, 0x87, 0x99, + 0x3a, 0xfb, 0x00, 0x87, 0x9e, 0x4d, 0x36, 0x00, + 0x87, 0x9f, 0x19, 0x8b, 0x00, 0x87, 0xa0, 0x48, + 0xb8, 0x00, 0x87, 0xa2, 0x19, 0x8a, 0x00, 0x87, + 0xa3, 0x4d, 0x37, 0x00, 0x87, 0xa7, 0x48, 0xb4, + 0x00, 0x87, 0xab, 0x19, 0x93, 0x00, 0x87, 0xac, + 0x3a, 0xfc, 0x00, 0x87, 0xad, 0x3a, 0xfd, 0x00, + 0x87, 0xae, 0x4d, 0x38, 0x00, 0x87, 0xaf, 0x19, + 0x8d, 0x00, 0x87, 0xb1, 0x57, 0xab, 0x00, 0x87, + 0xb3, 0x19, 0x95, 0x00, 0x87, 0xb5, 0x3a, 0xfe, + 0x00, 0x87, 0xba, 0x0f, 0x50, 0x00, 0x87, 0xbb, + 0x19, 0x98, 0x00, 0x87, 0xbd, 0x19, 0x8f, 0x00, + 0x87, 0xbe, 0x48, 0xbb, 0x00, 0x87, 0xbf, 0x4d, + 0x39, 0x00, 0x87, 0xc0, 0x19, 0x90, 0x00, 0x87, + 0xc1, 0x48, 0xbd, 0x00, 0x87, 0xc4, 0x19, 0x94, + 0x00, 0x87, 0xc6, 0x19, 0x97, 0x00, 0x87, 0xc7, + 0x19, 0x96, 0x00, 0x87, 0xc8, 0x57, 0xac, 0x00, + 0x87, 0xc9, 0x4d, 0x3a, 0x00, 0x87, 0xca, 0x57, + 0xad, 0x00, 0x87, 0xcb, 0x19, 0x8e, 0x00, 0x87, + 0xce, 0x48, 0xbe, 0x00, 0x87, 0xd0, 0x19, 0x91, + 0x00, 0x87, 0xd2, 0x19, 0xa2, 0x00, 0x87, 0xd5, + 0x57, 0xae, 0x00, 0x87, 0xd6, 0x3a, 0xff, 0x00, + 0x87, 0xd9, 0x57, 0xaf, 0x00, 0x87, 0xda, 0x4d, + 0x3b, 0x00, 0x87, 0xdc, 0x57, 0xb0, 0x00, 0x87, + 0xdf, 0x48, 0xbf, 0x00, 0x87, 0xe0, 0x19, 0x9b, + 0x00, 0x87, 0xe2, 0x57, 0xb1, 0x00, 0x87, 0xe3, + 0x48, 0xc1, 0x00, 0x87, 0xe4, 0x57, 0xb2, 0x00, + 0x87, 0xe5, 0x48, 0xc2, 0x00, 0x87, 0xe6, 0x48, + 0xc3, 0x00, 0x87, 0xea, 0x48, 0xc4, 0x00, 0x87, + 0xeb, 0x3b, 0x00, 0x00, 0x87, 0xec, 0x1e, 0x23, + 0x00, 0x87, 0xed, 0x3b, 0x01, 0x00, 0x87, 0xef, + 0x19, 0x99, 0x00, 0x87, 0xf1, 0x57, 0xb3, 0x00, + 0x87, 0xf2, 0x19, 0x9a, 0x00, 0x87, 0xf3, 0x57, + 0xb4, 0x00, 0x87, 0xf5, 0x3c, 0x3d, 0x00, 0x87, + 0xf6, 0x19, 0x9f, 0x00, 0x87, 0xf7, 0x19, 0xa0, + 0x00, 0x87, 0xf8, 0x57, 0xb5, 0x00, 0x87, 0xf9, + 0x05, 0x88, 0x00, 0x87, 0xfa, 0x57, 0xb6, 0x00, + 0x87, 0xfb, 0x06, 0x5c, 0x00, 0x87, 0xfe, 0x19, + 0x9e, 0x00, 0x87, 0xff, 0x57, 0xb7, 0x00, 0x88, + 0x01, 0x3b, 0x02, 0x00, 0x88, 0x03, 0x4f, 0x58, + 0x00, 0x88, 0x05, 0x19, 0x89, 0x00, 0x88, 0x06, + 0x3b, 0x04, 0x00, 0x88, 0x07, 0x21, 0xa6, 0x00, + 0x88, 0x09, 0x57, 0xb8, 0x00, 0x88, 0x0a, 0x42, + 0xda, 0x00, 0x88, 0x0b, 0x3b, 0x05, 0x00, 0x88, + 0x0d, 0x19, 0x9d, 0x00, 0x88, 0x0e, 0x19, 0xa1, + 0x00, 0x88, 0x0f, 0x19, 0x9c, 0x00, 0x88, 0x10, + 0x42, 0xdb, 0x00, 0x88, 0x11, 0x19, 0xa3, 0x00, + 0x88, 0x12, 0x57, 0xba, 0x00, 0x88, 0x13, 0x48, + 0xc5, 0x00, 0x88, 0x14, 0x3b, 0x06, 0x00, 0x88, + 0x15, 0x19, 0xa5, 0x00, 0x88, 0x16, 0x19, 0xa4, + 0x00, 0x88, 0x18, 0x4d, 0x3c, 0x00, 0x88, 0x19, + 0x57, 0xb9, 0x00, 0x88, 0x1a, 0x57, 0xbb, 0x00, + 0x88, 0x1b, 0x4d, 0x3d, 0x00, 0x88, 0x1c, 0x3b, + 0x07, 0x00, 0x88, 0x1e, 0x57, 0xbc, 0x00, 0x88, + 0x1f, 0x1e, 0x85, 0x00, 0x88, 0x21, 0x19, 0xa7, + 0x00, 0x88, 0x22, 0x19, 0xa6, 0x00, 0x88, 0x23, + 0x19, 0x61, 0x00, 0x88, 0x27, 0x19, 0xab, 0x00, + 0x88, 0x28, 0x48, 0xc6, 0x00, 0x88, 0x2d, 0x4d, + 0x3e, 0x00, 0x88, 0x2e, 0x48, 0xc7, 0x00, 0x88, + 0x30, 0x57, 0xbd, 0x00, 0x88, 0x31, 0x19, 0xa8, + 0x00, 0x88, 0x32, 0x48, 0xc8, 0x00, 0x88, 0x35, + 0x57, 0xbe, 0x00, 0x88, 0x36, 0x19, 0xa9, 0x00, + 0x88, 0x39, 0x19, 0xaa, 0x00, 0x88, 0x3a, 0x4d, + 0x3f, 0x00, 0x88, 0x3b, 0x19, 0xac, 0x00, 0x88, + 0x3c, 0x48, 0xc9, 0x00, 0x88, 0x40, 0x07, 0x42, + 0x00, 0x88, 0x41, 0x57, 0xbf, 0x00, 0x88, 0x42, + 0x19, 0xae, 0x00, 0x88, 0x43, 0x57, 0xc0, 0x00, + 0x88, 0x44, 0x19, 0xad, 0x00, 0x88, 0x45, 0x4d, + 0x40, 0x00, 0x88, 0x46, 0x09, 0x3a, 0x00, 0x88, + 0x48, 0x57, 0xc1, 0x00, 0x88, 0x49, 0x57, 0xc2, + 0x00, 0x88, 0x4a, 0x48, 0xcb, 0x00, 0x88, 0x4b, + 0x4d, 0x41, 0x00, 0x88, 0x4c, 0x07, 0xe6, 0x00, + 0x88, 0x4d, 0x15, 0x24, 0x00, 0x88, 0x4e, 0x4d, + 0x42, 0x00, 0x88, 0x51, 0x57, 0xc4, 0x00, 0x88, + 0x52, 0x19, 0xaf, 0x00, 0x88, 0x53, 0x09, 0x5b, + 0x00, 0x88, 0x55, 0x4d, 0x43, 0x00, 0x88, 0x56, + 0x3b, 0x08, 0x00, 0x88, 0x57, 0x05, 0x97, 0x00, + 0x88, 0x58, 0x48, 0xcc, 0x00, 0x88, 0x59, 0x19, + 0xb0, 0x00, 0x88, 0x5a, 0x4d, 0x44, 0x00, 0x88, + 0x5b, 0x04, 0xf4, 0x00, 0x88, 0x5c, 0x57, 0xc5, + 0x00, 0x88, 0x5d, 0x09, 0xbf, 0x00, 0x88, 0x5e, + 0x19, 0xb1, 0x00, 0x88, 0x5f, 0x3b, 0x09, 0x00, + 0x88, 0x60, 0x57, 0xc6, 0x00, 0x88, 0x61, 0x07, + 0xe7, 0x00, 0x88, 0x62, 0x19, 0xb2, 0x00, 0x88, + 0x63, 0x04, 0xa5, 0x00, 0x88, 0x64, 0x3b, 0x0a, + 0x00, 0x88, 0x68, 0x0d, 0xaf, 0x00, 0x88, 0x69, + 0x48, 0xcf, 0x00, 0x88, 0x6b, 0x19, 0xb3, 0x00, + 0x88, 0x6e, 0x4d, 0x45, 0x00, 0x88, 0x6f, 0x48, + 0xd1, 0x00, 0x88, 0x70, 0x0a, 0x30, 0x00, 0x88, + 0x71, 0x57, 0xc7, 0x00, 0x88, 0x72, 0x19, 0xba, + 0x00, 0x88, 0x75, 0x19, 0xb7, 0x00, 0x88, 0x77, + 0x0b, 0xad, 0x00, 0x88, 0x79, 0x57, 0xc8, 0x00, + 0x88, 0x7b, 0x57, 0xc9, 0x00, 0x88, 0x7d, 0x19, + 0xb8, 0x00, 0x88, 0x7e, 0x19, 0xb5, 0x00, 0x88, + 0x7f, 0x06, 0xd6, 0x00, 0x88, 0x80, 0x57, 0xca, + 0x00, 0x88, 0x81, 0x19, 0xb4, 0x00, 0x88, 0x82, + 0x19, 0xbb, 0x00, 0x88, 0x88, 0x07, 0x0c, 0x00, + 0x88, 0x8b, 0x0b, 0x3e, 0x00, 0x88, 0x8d, 0x19, + 0xc1, 0x00, 0x88, 0x92, 0x19, 0xbd, 0x00, 0x88, + 0x96, 0x0b, 0x15, 0x00, 0x88, 0x97, 0x19, 0xbc, + 0x00, 0x88, 0x98, 0x3b, 0x0b, 0x00, 0x88, 0x99, + 0x19, 0xbf, 0x00, 0x88, 0x9a, 0x4d, 0x46, 0x00, + 0x88, 0x9b, 0x4d, 0x47, 0x00, 0x88, 0x9c, 0x4d, + 0x48, 0x00, 0x88, 0x9e, 0x19, 0xb6, 0x00, 0x88, + 0x9f, 0x57, 0xcb, 0x00, 0x88, 0xa0, 0x48, 0xd2, + 0x00, 0x88, 0xa2, 0x19, 0xc0, 0x00, 0x88, 0xa4, + 0x19, 0xc2, 0x00, 0x88, 0xa8, 0x57, 0xcc, 0x00, + 0x88, 0xaa, 0x3b, 0x0c, 0x00, 0x88, 0xab, 0x0d, + 0x83, 0x00, 0x88, 0xae, 0x19, 0xbe, 0x00, 0x88, + 0xb0, 0x19, 0xc3, 0x00, 0x88, 0xb1, 0x19, 0xc5, + 0x00, 0x88, 0xb4, 0x07, 0x87, 0x00, 0x88, 0xb5, + 0x19, 0xb9, 0x00, 0x88, 0xb7, 0x04, 0x85, 0x00, + 0x88, 0xba, 0x57, 0xcd, 0x00, 0x88, 0xbc, 0x48, + 0xd3, 0x00, 0x88, 0xbd, 0x3b, 0x0d, 0x00, 0x88, + 0xbe, 0x3b, 0x0e, 0x00, 0x88, 0xbf, 0x19, 0xc4, + 0x00, 0x88, 0xc0, 0x48, 0xd4, 0x00, 0x88, 0xc1, + 0x08, 0x4b, 0x00, 0x88, 0xc2, 0x0f, 0xbe, 0x00, + 0x88, 0xc3, 0x19, 0xc6, 0x00, 0x88, 0xc4, 0x19, + 0xc7, 0x00, 0x88, 0xc5, 0x0a, 0xf7, 0x00, 0x88, + 0xc6, 0x37, 0x89, 0x00, 0x88, 0xca, 0x3b, 0x0f, + 0x00, 0x88, 0xcb, 0x57, 0xce, 0x00, 0x88, 0xcc, + 0x57, 0xcf, 0x00, 0x88, 0xcd, 0x4d, 0x49, 0x00, + 0x88, 0xce, 0x42, 0xdc, 0x00, 0x88, 0xcf, 0x0f, + 0x6a, 0x00, 0x88, 0xd1, 0x48, 0xd6, 0x00, 0x88, + 0xd2, 0x3b, 0x10, 0x00, 0x88, 0xd3, 0x48, 0xd7, + 0x00, 0x88, 0xd4, 0x19, 0xc8, 0x00, 0x88, 0xd5, + 0x0f, 0x1f, 0x00, 0x88, 0xd8, 0x19, 0xc9, 0x00, + 0x88, 0xd9, 0x19, 0xca, 0x00, 0x88, 0xdb, 0x3b, + 0x11, 0x00, 0x88, 0xdc, 0x0e, 0x34, 0x00, 0x88, + 0xdd, 0x19, 0xcb, 0x00, 0x88, 0xde, 0x57, 0xd0, + 0x00, 0x88, 0xdf, 0x08, 0x30, 0x00, 0x88, 0xe0, + 0x4d, 0x4a, 0x00, 0x88, 0xe1, 0x0f, 0x6b, 0x00, + 0x88, 0xe7, 0x57, 0xd1, 0x00, 0x88, 0xe8, 0x19, + 0xd0, 0x00, 0x88, 0xef, 0x4d, 0x4b, 0x00, 0x88, + 0xf0, 0x3b, 0x12, 0x00, 0x88, 0xf1, 0x3b, 0x13, + 0x00, 0x88, 0xf2, 0x19, 0xd1, 0x00, 0x88, 0xf3, + 0x09, 0xc0, 0x00, 0x88, 0xf4, 0x19, 0xcf, 0x00, + 0x88, 0xf5, 0x21, 0xa7, 0x00, 0x88, 0xf7, 0x57, + 0xd2, 0x00, 0x88, 0xf8, 0x0f, 0x51, 0x00, 0x88, + 0xf9, 0x19, 0xcc, 0x00, 0x88, 0xfc, 0x19, 0xce, + 0x00, 0x88, 0xfd, 0x0a, 0x61, 0x00, 0x88, 0xfe, + 0x0a, 0x44, 0x00, 0x89, 0x01, 0x48, 0xd9, 0x00, + 0x89, 0x02, 0x19, 0xcd, 0x00, 0x89, 0x04, 0x19, + 0xd2, 0x00, 0x89, 0x06, 0x3b, 0x14, 0x00, 0x89, + 0x07, 0x0d, 0xf3, 0x00, 0x89, 0x0a, 0x19, 0xd4, + 0x00, 0x89, 0x0c, 0x19, 0xd3, 0x00, 0x89, 0x0d, + 0x57, 0xd3, 0x00, 0x89, 0x0e, 0x4d, 0x4c, 0x00, + 0x89, 0x0f, 0x4d, 0x4d, 0x00, 0x89, 0x10, 0x05, + 0xca, 0x00, 0x89, 0x12, 0x0e, 0x59, 0x00, 0x89, + 0x13, 0x19, 0xd5, 0x00, 0x89, 0x15, 0x57, 0xd4, + 0x00, 0x89, 0x16, 0x57, 0xd5, 0x00, 0x89, 0x18, + 0x3b, 0x15, 0x00, 0x89, 0x19, 0x3b, 0x16, 0x00, + 0x89, 0x1a, 0x3b, 0x17, 0x00, 0x89, 0x1c, 0x20, + 0xa8, 0x00, 0x89, 0x1d, 0x19, 0xe1, 0x00, 0x89, + 0x1e, 0x19, 0xd7, 0x00, 0x89, 0x20, 0x57, 0xd6, + 0x00, 0x89, 0x25, 0x19, 0xd8, 0x00, 0x89, 0x26, + 0x4d, 0x4e, 0x00, 0x89, 0x27, 0x3b, 0x18, 0x00, + 0x89, 0x28, 0x57, 0xd7, 0x00, 0x89, 0x2a, 0x19, + 0xd9, 0x00, 0x89, 0x2b, 0x19, 0xda, 0x00, 0x89, + 0x30, 0x3b, 0x19, 0x00, 0x89, 0x31, 0x57, 0xd8, + 0x00, 0x89, 0x32, 0x42, 0xde, 0x00, 0x89, 0x35, + 0x4d, 0x4f, 0x00, 0x89, 0x36, 0x19, 0xde, 0x00, + 0x89, 0x37, 0x48, 0xdb, 0x00, 0x89, 0x38, 0x19, + 0xdf, 0x00, 0x89, 0x39, 0x42, 0xdf, 0x00, 0x89, + 0x3a, 0x57, 0xd9, 0x00, 0x89, 0x3b, 0x19, 0xdd, + 0x00, 0x89, 0x3e, 0x3b, 0x1a, 0x00, 0x89, 0x40, + 0x42, 0xe0, 0x00, 0x89, 0x41, 0x19, 0xdb, 0x00, + 0x89, 0x42, 0x48, 0xdd, 0x00, 0x89, 0x43, 0x19, + 0xd6, 0x00, 0x89, 0x44, 0x19, 0xdc, 0x00, 0x89, + 0x45, 0x48, 0xde, 0x00, 0x89, 0x46, 0x57, 0xda, + 0x00, 0x89, 0x49, 0x48, 0xdf, 0x00, 0x89, 0x4c, + 0x19, 0xe0, 0x00, 0x89, 0x4d, 0x1b, 0xd0, 0x00, + 0x89, 0x4f, 0x57, 0xdb, 0x00, 0x89, 0x52, 0x57, + 0xdc, 0x00, 0x89, 0x56, 0x05, 0x28, 0x00, 0x89, + 0x57, 0x57, 0xdd, 0x00, 0x89, 0x5a, 0x4d, 0x50, + 0x00, 0x89, 0x5b, 0x57, 0xde, 0x00, 0x89, 0x5c, + 0x4d, 0x51, 0x00, 0x89, 0x5e, 0x19, 0xe3, 0x00, + 0x89, 0x5f, 0x06, 0xd7, 0x00, 0x89, 0x60, 0x19, + 0xe2, 0x00, 0x89, 0x61, 0x57, 0xdf, 0x00, 0x89, + 0x62, 0x48, 0xe1, 0x00, 0x89, 0x63, 0x57, 0xe0, + 0x00, 0x89, 0x64, 0x19, 0xe5, 0x00, 0x89, 0x66, + 0x19, 0xe4, 0x00, 0x89, 0x6a, 0x19, 0xe7, 0x00, + 0x89, 0x6b, 0x4d, 0x52, 0x00, 0x89, 0x6d, 0x19, + 0xe6, 0x00, 0x89, 0x6e, 0x57, 0xe1, 0x00, 0x89, + 0x6f, 0x19, 0xe8, 0x00, 0x89, 0x70, 0x4d, 0x53, + 0x00, 0x89, 0x72, 0x09, 0x3b, 0x00, 0x89, 0x73, + 0x57, 0xe2, 0x00, 0x89, 0x74, 0x19, 0xe9, 0x00, + 0x89, 0x75, 0x57, 0xe3, 0x00, 0x89, 0x77, 0x19, + 0xea, 0x00, 0x89, 0x7a, 0x57, 0xe4, 0x00, 0x89, + 0x7b, 0x3b, 0x1b, 0x00, 0x89, 0x7c, 0x4d, 0x54, + 0x00, 0x89, 0x7d, 0x57, 0xe5, 0x00, 0x89, 0x7e, + 0x19, 0xeb, 0x00, 0x89, 0x7f, 0x0a, 0x62, 0x00, + 0x89, 0x80, 0x36, 0x2e, 0x00, 0x89, 0x81, 0x0f, + 0x41, 0x00, 0x89, 0x83, 0x19, 0xec, 0x00, 0x89, + 0x86, 0x0d, 0xf4, 0x00, 0x89, 0x87, 0x0c, 0xfc, + 0x00, 0x89, 0x88, 0x19, 0xed, 0x00, 0x89, 0x89, + 0x48, 0xe2, 0x00, 0x89, 0x8a, 0x19, 0xee, 0x00, + 0x89, 0x8b, 0x07, 0x5f, 0x00, 0x89, 0x8d, 0x57, + 0xe6, 0x00, 0x89, 0x8f, 0x06, 0x46, 0x00, 0x89, + 0x90, 0x48, 0xe3, 0x00, 0x89, 0x93, 0x19, 0xef, + 0x00, 0x89, 0x94, 0x42, 0xe1, 0x00, 0x89, 0x95, + 0x57, 0xe7, 0x00, 0x89, 0x96, 0x08, 0xb9, 0x00, + 0x89, 0x97, 0x0c, 0xf7, 0x00, 0x89, 0x98, 0x19, + 0xf0, 0x00, 0x89, 0x9a, 0x05, 0xae, 0x00, 0x89, + 0x9b, 0x57, 0xe8, 0x00, 0x89, 0x9c, 0x57, 0xe9, + 0x00, 0x89, 0x9f, 0x48, 0xe4, 0x00, 0x89, 0xa0, + 0x57, 0xea, 0x00, 0x89, 0xa1, 0x19, 0xf1, 0x00, + 0x89, 0xa5, 0x4d, 0x55, 0x00, 0x89, 0xa6, 0x19, + 0xf3, 0x00, 0x89, 0xa7, 0x0f, 0x61, 0x00, 0x89, + 0xa9, 0x19, 0xf2, 0x00, 0x89, 0xaa, 0x0a, 0x0c, + 0x00, 0x89, 0xac, 0x19, 0xf4, 0x00, 0x89, 0xaf, + 0x19, 0xf5, 0x00, 0x89, 0xb0, 0x48, 0xe5, 0x00, + 0x89, 0xb2, 0x19, 0xf6, 0x00, 0x89, 0xb3, 0x06, + 0x0d, 0x00, 0x89, 0xb4, 0x57, 0xeb, 0x00, 0x89, + 0xb5, 0x4d, 0x56, 0x00, 0x89, 0xb6, 0x57, 0xec, + 0x00, 0x89, 0xb7, 0x48, 0xe6, 0x00, 0x89, 0xba, + 0x19, 0xf7, 0x00, 0x89, 0xbc, 0x4d, 0x57, 0x00, + 0x89, 0xbd, 0x19, 0xf8, 0x00, 0x89, 0xbf, 0x19, + 0xf9, 0x00, 0x89, 0xc0, 0x19, 0xfa, 0x00, 0x89, + 0xd2, 0x35, 0x72, 0x00, 0x89, 0xd4, 0x3b, 0x1c, + 0x00, 0x89, 0xd5, 0x4d, 0x58, 0x00, 0x89, 0xd6, + 0x3b, 0x1d, 0x00, 0x89, 0xd7, 0x57, 0xed, 0x00, + 0x89, 0xd8, 0x48, 0xe7, 0x00, 0x89, 0xda, 0x19, + 0xfb, 0x00, 0x89, 0xdc, 0x19, 0xfc, 0x00, 0x89, + 0xdd, 0x19, 0xfd, 0x00, 0x89, 0xe3, 0x05, 0x72, + 0x00, 0x89, 0xe5, 0x3b, 0x1e, 0x00, 0x89, 0xe6, + 0x09, 0xee, 0x00, 0x89, 0xe7, 0x19, 0xfe, 0x00, + 0x89, 0xe9, 0x57, 0xee, 0x00, 0x89, 0xeb, 0x48, + 0xe8, 0x00, 0x89, 0xed, 0x57, 0xef, 0x00, 0x89, + 0xf1, 0x3b, 0x1f, 0x00, 0x89, 0xf3, 0x48, 0xea, + 0x00, 0x89, 0xf4, 0x19, 0xff, 0x00, 0x89, 0xf6, + 0x42, 0xe2, 0x00, 0x89, 0xf8, 0x1a, 0x00, 0x00, + 0x89, 0xf9, 0x57, 0xf0, 0x00, 0x89, 0xfd, 0x48, + 0xeb, 0x00, 0x89, 0xff, 0x48, 0xec, 0x00, 0x8a, + 0x00, 0x07, 0x74, 0x00, 0x8a, 0x01, 0x35, 0xbc, + 0x00, 0x8a, 0x02, 0x0c, 0x17, 0x00, 0x8a, 0x03, + 0x1a, 0x01, 0x00, 0x8a, 0x04, 0x57, 0xf1, 0x00, + 0x8a, 0x05, 0x57, 0xf2, 0x00, 0x8a, 0x07, 0x3b, + 0x20, 0x00, 0x8a, 0x08, 0x07, 0x2d, 0x00, 0x8a, + 0x0a, 0x0a, 0x1c, 0x00, 0x8a, 0x0c, 0x1a, 0x04, + 0x00, 0x8a, 0x0e, 0x0c, 0x7c, 0x00, 0x8a, 0x0f, + 0x3b, 0x21, 0x00, 0x8a, 0x10, 0x1a, 0x03, 0x00, + 0x8a, 0x11, 0x48, 0xee, 0x00, 0x8a, 0x12, 0x21, + 0xa8, 0x00, 0x8a, 0x13, 0x07, 0x07, 0x00, 0x8a, + 0x14, 0x48, 0xef, 0x00, 0x8a, 0x15, 0x3b, 0x22, + 0x00, 0x8a, 0x16, 0x1a, 0x02, 0x00, 0x8a, 0x17, + 0x0b, 0x57, 0x00, 0x8a, 0x18, 0x06, 0x47, 0x00, + 0x8a, 0x1b, 0x1a, 0x05, 0x00, 0x8a, 0x1d, 0x1a, + 0x06, 0x00, 0x8a, 0x1e, 0x57, 0xf3, 0x00, 0x8a, + 0x1f, 0x09, 0xc1, 0x00, 0x8a, 0x20, 0x57, 0xf4, + 0x00, 0x8a, 0x21, 0x48, 0xf1, 0x00, 0x8a, 0x22, + 0x3b, 0x23, 0x00, 0x8a, 0x23, 0x07, 0x43, 0x00, + 0x8a, 0x24, 0x57, 0xf5, 0x00, 0x8a, 0x25, 0x1a, + 0x07, 0x00, 0x8a, 0x26, 0x57, 0xf6, 0x00, 0x8a, + 0x2a, 0x0e, 0x5a, 0x00, 0x8a, 0x2b, 0x57, 0xf7, + 0x00, 0x8a, 0x2c, 0x57, 0xf8, 0x00, 0x8a, 0x2d, + 0x0a, 0x83, 0x00, 0x8a, 0x2f, 0x57, 0xf9, 0x00, + 0x8a, 0x31, 0x06, 0x90, 0x00, 0x8a, 0x33, 0x0f, + 0x01, 0x00, 0x8a, 0x34, 0x0a, 0xcc, 0x00, 0x8a, + 0x35, 0x48, 0xf2, 0x00, 0x8a, 0x36, 0x1a, 0x08, + 0x00, 0x8a, 0x37, 0x21, 0xa9, 0x00, 0x8a, 0x3a, + 0x0a, 0x0d, 0x00, 0x8a, 0x3b, 0x0b, 0xae, 0x00, + 0x8a, 0x3c, 0x09, 0xc2, 0x00, 0x8a, 0x3d, 0x57, + 0xfa, 0x00, 0x8a, 0x3e, 0x48, 0xf3, 0x00, 0x8a, + 0x40, 0x57, 0xfb, 0x00, 0x8a, 0x41, 0x1a, 0x09, + 0x00, 0x8a, 0x43, 0x57, 0xfc, 0x00, 0x8a, 0x45, + 0x48, 0xf4, 0x00, 0x8a, 0x46, 0x1a, 0x0c, 0x00, + 0x8a, 0x47, 0x42, 0xe3, 0x00, 0x8a, 0x48, 0x1a, + 0x0d, 0x00, 0x8a, 0x49, 0x4d, 0x59, 0x00, 0x8a, + 0x4d, 0x48, 0xf5, 0x00, 0x8a, 0x4e, 0x3b, 0x24, + 0x00, 0x8a, 0x50, 0x08, 0x2e, 0x00, 0x8a, 0x51, + 0x0b, 0x22, 0x00, 0x8a, 0x52, 0x1a, 0x0b, 0x00, + 0x8a, 0x53, 0x57, 0xfd, 0x00, 0x8a, 0x54, 0x09, + 0xc3, 0x00, 0x8a, 0x55, 0x0d, 0xb0, 0x00, 0x8a, + 0x56, 0x57, 0xfe, 0x00, 0x8a, 0x57, 0x4d, 0x5a, + 0x00, 0x8a, 0x58, 0x48, 0xf6, 0x00, 0x8a, 0x5b, + 0x1a, 0x0a, 0x00, 0x8a, 0x5c, 0x57, 0xff, 0x00, + 0x8a, 0x5d, 0x42, 0xe4, 0x00, 0x8a, 0x5e, 0x08, + 0xba, 0x00, 0x8a, 0x60, 0x04, 0xf5, 0x00, 0x8a, + 0x61, 0x42, 0xe5, 0x00, 0x8a, 0x62, 0x1a, 0x11, + 0x00, 0x8a, 0x63, 0x07, 0x2e, 0x00, 0x8a, 0x65, + 0x58, 0x00, 0x00, 0x8a, 0x66, 0x08, 0xbc, 0x00, + 0x8a, 0x67, 0x4d, 0x5b, 0x00, 0x8a, 0x69, 0x08, + 0xbb, 0x00, 0x8a, 0x6b, 0x0f, 0xf3, 0x00, 0x8a, + 0x6c, 0x1a, 0x10, 0x00, 0x8a, 0x6d, 0x1a, 0x0f, + 0x00, 0x8a, 0x6e, 0x0a, 0xa9, 0x00, 0x8a, 0x70, + 0x06, 0x67, 0x00, 0x8a, 0x71, 0x0f, 0xe9, 0x00, + 0x8a, 0x72, 0x05, 0x98, 0x00, 0x8a, 0x73, 0x09, + 0xc4, 0x00, 0x8a, 0x75, 0x42, 0xe6, 0x00, 0x8a, + 0x76, 0x58, 0x01, 0x00, 0x8a, 0x77, 0x58, 0x02, + 0x00, 0x8a, 0x79, 0x21, 0xaa, 0x00, 0x8a, 0x7a, + 0x58, 0x03, 0x00, 0x8a, 0x7b, 0x58, 0x04, 0x00, + 0x8a, 0x7c, 0x1a, 0x0e, 0x00, 0x8a, 0x7e, 0x4d, + 0x5c, 0x00, 0x8a, 0x7f, 0x3b, 0x25, 0x00, 0x8a, + 0x80, 0x58, 0x05, 0x00, 0x8a, 0x82, 0x1a, 0x13, + 0x00, 0x8a, 0x83, 0x58, 0x06, 0x00, 0x8a, 0x84, + 0x1a, 0x14, 0x00, 0x8a, 0x85, 0x1a, 0x12, 0x00, + 0x8a, 0x86, 0x4d, 0x5d, 0x00, 0x8a, 0x87, 0x07, + 0x8c, 0x00, 0x8a, 0x89, 0x0f, 0x2a, 0x00, 0x8a, + 0x8b, 0x58, 0x07, 0x00, 0x8a, 0x8c, 0x08, 0xbd, + 0x00, 0x8a, 0x8d, 0x0c, 0xdd, 0x00, 0x8a, 0x8f, + 0x58, 0x08, 0x00, 0x8a, 0x90, 0x48, 0xf8, 0x00, + 0x8a, 0x91, 0x1a, 0x17, 0x00, 0x8a, 0x92, 0x58, + 0x09, 0x00, 0x8a, 0x93, 0x0a, 0x64, 0x00, 0x8a, + 0x95, 0x0b, 0x80, 0x00, 0x8a, 0x96, 0x4d, 0x5e, + 0x00, 0x8a, 0x97, 0x58, 0x0a, 0x00, 0x8a, 0x98, + 0x0f, 0x20, 0x00, 0x8a, 0x99, 0x58, 0x0b, 0x00, + 0x8a, 0x9a, 0x1a, 0x1a, 0x00, 0x8a, 0x9e, 0x07, + 0xa0, 0x00, 0x8a, 0x9f, 0x58, 0x0c, 0x00, 0x8a, + 0xa0, 0x0a, 0x63, 0x00, 0x8a, 0xa1, 0x1a, 0x16, + 0x00, 0x8a, 0xa3, 0x1a, 0x1b, 0x00, 0x8a, 0xa4, + 0x07, 0xa1, 0x00, 0x8a, 0xa5, 0x1a, 0x18, 0x00, + 0x8a, 0xa6, 0x1a, 0x19, 0x00, 0x8a, 0xa7, 0x21, + 0xab, 0x00, 0x8a, 0xa8, 0x1a, 0x15, 0x00, 0x8a, + 0xa9, 0x58, 0x0d, 0x00, 0x8a, 0xaa, 0x36, 0x38, + 0x00, 0x8a, 0xac, 0x0a, 0x86, 0x00, 0x8a, 0xad, + 0x0c, 0xa1, 0x00, 0x8a, 0xae, 0x48, 0xf7, 0x00, + 0x8a, 0xaf, 0x58, 0x0e, 0x00, 0x8a, 0xb0, 0x0b, + 0x6d, 0x00, 0x8a, 0xb2, 0x05, 0x5d, 0x00, 0x8a, + 0xb3, 0x58, 0x0f, 0x00, 0x8a, 0xb6, 0x4d, 0x5f, + 0x00, 0x8a, 0xb7, 0x48, 0xf9, 0x00, 0x8a, 0xb9, + 0x0d, 0x84, 0x00, 0x8a, 0xbb, 0x58, 0x10, 0x00, + 0x8a, 0xbc, 0x06, 0x5d, 0x00, 0x8a, 0xbe, 0x21, + 0xac, 0x00, 0x8a, 0xbf, 0x0b, 0xd0, 0x00, 0x8a, + 0xc2, 0x1a, 0x1e, 0x00, 0x8a, 0xc3, 0x58, 0x11, + 0x00, 0x8a, 0xc4, 0x1a, 0x1c, 0x00, 0x8a, 0xc6, + 0x58, 0x12, 0x00, 0x8a, 0xc7, 0x0b, 0x8a, 0x00, + 0x8a, 0xc8, 0x58, 0x13, 0x00, 0x8a, 0xc9, 0x4d, + 0x60, 0x00, 0x8a, 0xca, 0x58, 0x14, 0x00, 0x8a, + 0xcb, 0x0a, 0x65, 0x00, 0x8a, 0xcc, 0x06, 0x0e, + 0x00, 0x8a, 0xcd, 0x1a, 0x1d, 0x00, 0x8a, 0xcf, + 0x0a, 0x21, 0x00, 0x8a, 0xd0, 0x42, 0xe7, 0x00, + 0x8a, 0xd1, 0x4d, 0x61, 0x00, 0x8a, 0xd2, 0x0f, + 0x92, 0x00, 0x8a, 0xd3, 0x58, 0x15, 0x00, 0x8a, + 0xd4, 0x58, 0x16, 0x00, 0x8a, 0xd5, 0x58, 0x17, + 0x00, 0x8a, 0xd6, 0x0f, 0xe6, 0x00, 0x8a, 0xd7, + 0x48, 0xfa, 0x00, 0x8a, 0xda, 0x1a, 0x1f, 0x00, + 0x8a, 0xdb, 0x1a, 0x2a, 0x00, 0x8a, 0xdc, 0x0b, + 0xd1, 0x00, 0x8a, 0xdd, 0x4d, 0x62, 0x00, 0x8a, + 0xde, 0x1a, 0x29, 0x00, 0x8a, 0xdf, 0x21, 0xad, + 0x00, 0x8a, 0xe0, 0x1a, 0x26, 0x00, 0x8a, 0xe1, + 0x1a, 0x2e, 0x00, 0x8a, 0xe2, 0x1a, 0x27, 0x00, + 0x8a, 0xe4, 0x1a, 0x23, 0x00, 0x8a, 0xe6, 0x0c, + 0x18, 0x00, 0x8a, 0xe7, 0x1a, 0x22, 0x00, 0x8a, + 0xeb, 0x1a, 0x20, 0x00, 0x8a, 0xec, 0x4d, 0x63, + 0x00, 0x8a, 0xed, 0x36, 0xf4, 0x00, 0x8a, 0xee, + 0x08, 0xbe, 0x00, 0x8a, 0xf0, 0x58, 0x18, 0x00, + 0x8a, 0xf1, 0x1a, 0x24, 0x00, 0x8a, 0xf3, 0x1a, + 0x21, 0x00, 0x8a, 0xf4, 0x3b, 0x26, 0x00, 0x8a, + 0xf5, 0x4d, 0x64, 0x00, 0x8a, 0xf6, 0x21, 0xaf, + 0x00, 0x8a, 0xf7, 0x1a, 0x28, 0x00, 0x8a, 0xf8, + 0x21, 0xae, 0x00, 0x8a, 0xfa, 0x07, 0x75, 0x00, + 0x8a, 0xfc, 0x48, 0xfb, 0x00, 0x8a, 0xfe, 0x0b, + 0x5a, 0x00, 0x8a, 0xff, 0x58, 0x19, 0x00, 0x8b, + 0x00, 0x0e, 0x73, 0x00, 0x8b, 0x01, 0x34, 0x09, + 0x00, 0x8b, 0x02, 0x04, 0xa6, 0x00, 0x8b, 0x04, + 0x0c, 0x7d, 0x00, 0x8b, 0x05, 0x48, 0xfe, 0x00, + 0x8b, 0x06, 0x4d, 0x65, 0x00, 0x8b, 0x07, 0x1a, + 0x2c, 0x00, 0x8b, 0x0a, 0x48, 0xfd, 0x00, 0x8b, + 0x0b, 0x58, 0x1a, 0x00, 0x8b, 0x0c, 0x1a, 0x2b, + 0x00, 0x8b, 0x0d, 0x48, 0xff, 0x00, 0x8b, 0x0e, + 0x0c, 0xbe, 0x00, 0x8b, 0x0f, 0x4d, 0x66, 0x00, + 0x8b, 0x10, 0x1a, 0x30, 0x00, 0x8b, 0x11, 0x4d, + 0x67, 0x00, 0x8b, 0x14, 0x1a, 0x25, 0x00, 0x8b, + 0x16, 0x1a, 0x2f, 0x00, 0x8b, 0x17, 0x1a, 0x31, + 0x00, 0x8b, 0x19, 0x07, 0x60, 0x00, 0x8b, 0x1a, + 0x1a, 0x2d, 0x00, 0x8b, 0x1b, 0x07, 0xe8, 0x00, + 0x8b, 0x1c, 0x49, 0x00, 0x00, 0x8b, 0x1d, 0x09, + 0x01, 0x00, 0x8b, 0x1e, 0x58, 0x1b, 0x00, 0x8b, + 0x1f, 0x3b, 0x27, 0x00, 0x8b, 0x20, 0x1a, 0x32, + 0x00, 0x8b, 0x21, 0x0f, 0x42, 0x00, 0x8b, 0x26, + 0x1a, 0x35, 0x00, 0x8b, 0x28, 0x1a, 0x38, 0x00, + 0x8b, 0x2b, 0x1a, 0x36, 0x00, 0x8b, 0x2c, 0x0d, + 0xa7, 0x00, 0x8b, 0x2d, 0x49, 0x01, 0x00, 0x8b, + 0x30, 0x58, 0x1c, 0x00, 0x8b, 0x33, 0x1a, 0x33, + 0x00, 0x8b, 0x37, 0x3b, 0x28, 0x00, 0x8b, 0x39, + 0x34, 0x1b, 0x00, 0x8b, 0x3c, 0x58, 0x1d, 0x00, + 0x8b, 0x3e, 0x1a, 0x37, 0x00, 0x8b, 0x41, 0x1a, + 0x39, 0x00, 0x8b, 0x42, 0x58, 0x1e, 0x00, 0x8b, + 0x43, 0x3b, 0x29, 0x00, 0x8b, 0x44, 0x3b, 0x2a, + 0x00, 0x8b, 0x45, 0x4d, 0x68, 0x00, 0x8b, 0x46, + 0x42, 0xe8, 0x00, 0x8b, 0x48, 0x58, 0x1f, 0x00, + 0x8b, 0x49, 0x1a, 0x3d, 0x00, 0x8b, 0x4c, 0x1a, + 0x3a, 0x00, 0x8b, 0x4d, 0x58, 0x20, 0x00, 0x8b, + 0x4e, 0x1a, 0x3c, 0x00, 0x8b, 0x4f, 0x1a, 0x3b, + 0x00, 0x8b, 0x51, 0x49, 0x03, 0x00, 0x8b, 0x52, + 0x4d, 0x69, 0x00, 0x8b, 0x53, 0x21, 0xb0, 0x00, + 0x8b, 0x54, 0x3b, 0x2b, 0x00, 0x8b, 0x56, 0x1a, + 0x3e, 0x00, 0x8b, 0x58, 0x08, 0xdd, 0x00, 0x8b, + 0x59, 0x42, 0xe9, 0x00, 0x8b, 0x5a, 0x1a, 0x40, + 0x00, 0x8b, 0x5b, 0x1a, 0x3f, 0x00, 0x8b, 0x5c, + 0x0d, 0xda, 0x00, 0x8b, 0x5e, 0x49, 0x04, 0x00, + 0x8b, 0x5f, 0x1a, 0x42, 0x00, 0x8b, 0x63, 0x58, + 0x21, 0x00, 0x8b, 0x66, 0x07, 0x2f, 0x00, 0x8b, + 0x69, 0x42, 0xea, 0x00, 0x8b, 0x6b, 0x1a, 0x41, + 0x00, 0x8b, 0x6c, 0x1a, 0x43, 0x00, 0x8b, 0x6d, + 0x4d, 0x6a, 0x00, 0x8b, 0x6f, 0x1a, 0x44, 0x00, + 0x8b, 0x70, 0x06, 0x5e, 0x00, 0x8b, 0x71, 0x18, + 0x2e, 0x00, 0x8b, 0x72, 0x09, 0xe1, 0x00, 0x8b, + 0x74, 0x1a, 0x45, 0x00, 0x8b, 0x76, 0x49, 0x05, + 0x00, 0x8b, 0x77, 0x07, 0xa2, 0x00, 0x8b, 0x78, + 0x4d, 0x6b, 0x00, 0x8b, 0x79, 0x58, 0x22, 0x00, + 0x8b, 0x7c, 0x4d, 0x6c, 0x00, 0x8b, 0x7d, 0x1a, + 0x46, 0x00, 0x8b, 0x7e, 0x4d, 0x6d, 0x00, 0x8b, + 0x7f, 0x21, 0xb1, 0x00, 0x8b, 0x80, 0x1a, 0x47, + 0x00, 0x8b, 0x81, 0x49, 0x06, 0x00, 0x8b, 0x83, + 0x08, 0x8c, 0x00, 0x8b, 0x84, 0x58, 0x23, 0x00, + 0x8b, 0x85, 0x4d, 0x6e, 0x00, 0x8b, 0x8a, 0x13, + 0xd3, 0x00, 0x8b, 0x8b, 0x49, 0x07, 0x00, 0x8b, + 0x8c, 0x1a, 0x48, 0x00, 0x8b, 0x8d, 0x58, 0x24, + 0x00, 0x8b, 0x8e, 0x1a, 0x49, 0x00, 0x8b, 0x8f, + 0x58, 0x25, 0x00, 0x8b, 0x90, 0x09, 0x3c, 0x00, + 0x8b, 0x92, 0x1a, 0x4a, 0x00, 0x8b, 0x93, 0x1a, + 0x4b, 0x00, 0x8b, 0x94, 0x49, 0x08, 0x00, 0x8b, + 0x95, 0x49, 0x09, 0x00, 0x8b, 0x96, 0x1a, 0x4c, + 0x00, 0x8b, 0x99, 0x1a, 0x4d, 0x00, 0x8b, 0x9a, + 0x1a, 0x4e, 0x00, 0x8b, 0x9c, 0x3b, 0x2c, 0x00, + 0x8b, 0x9d, 0x42, 0xeb, 0x00, 0x8b, 0x9e, 0x3b, + 0x2d, 0x00, 0x8b, 0x9f, 0x4d, 0x6f, 0x00, 0x8c, + 0x37, 0x0b, 0x69, 0x00, 0x8c, 0x38, 0x58, 0x26, + 0x00, 0x8c, 0x39, 0x49, 0x0a, 0x00, 0x8c, 0x3a, + 0x1a, 0x4f, 0x00, 0x8c, 0x3d, 0x49, 0x0c, 0x00, + 0x8c, 0x3e, 0x58, 0x27, 0x00, 0x8c, 0x3f, 0x1a, + 0x51, 0x00, 0x8c, 0x41, 0x1a, 0x50, 0x00, 0x8c, + 0x45, 0x49, 0x0f, 0x00, 0x8c, 0x46, 0x0c, 0x7e, + 0x00, 0x8c, 0x47, 0x3b, 0x2e, 0x00, 0x8c, 0x48, + 0x1a, 0x52, 0x00, 0x8c, 0x49, 0x42, 0xec, 0x00, + 0x8c, 0x4a, 0x0e, 0x5b, 0x00, 0x8c, 0x4b, 0x4d, + 0x70, 0x00, 0x8c, 0x4c, 0x1a, 0x53, 0x00, 0x8c, + 0x4e, 0x1a, 0x54, 0x00, 0x8c, 0x4f, 0x49, 0x10, + 0x00, 0x8c, 0x50, 0x1a, 0x55, 0x00, 0x8c, 0x51, + 0x58, 0x28, 0x00, 0x8c, 0x53, 0x4d, 0x71, 0x00, + 0x8c, 0x54, 0x3b, 0x2f, 0x00, 0x8c, 0x55, 0x1a, + 0x56, 0x00, 0x8c, 0x57, 0x49, 0x11, 0x00, 0x8c, + 0x58, 0x58, 0x29, 0x00, 0x8c, 0x59, 0x58, 0x2c, + 0x00, 0x8c, 0x5a, 0x0c, 0xb2, 0x00, 0x8c, 0x5b, + 0x58, 0x2a, 0x00, 0x8c, 0x5d, 0x58, 0x2b, 0x00, + 0x8c, 0x61, 0x09, 0xc5, 0x00, 0x8c, 0x62, 0x1a, + 0x57, 0x00, 0x8c, 0x63, 0x58, 0x2d, 0x00, 0x8c, + 0x64, 0x58, 0x2e, 0x00, 0x8c, 0x66, 0x58, 0x2f, + 0x00, 0x8c, 0x68, 0x42, 0xed, 0x00, 0x8c, 0x69, + 0x49, 0x12, 0x00, 0x8c, 0x6a, 0x07, 0xfd, 0x00, + 0x8c, 0x6b, 0x10, 0x07, 0x00, 0x8c, 0x6c, 0x1a, + 0x58, 0x00, 0x8c, 0x6d, 0x49, 0x13, 0x00, 0x8c, + 0x73, 0x3b, 0x30, 0x00, 0x8c, 0x75, 0x58, 0x30, + 0x00, 0x8c, 0x76, 0x58, 0x31, 0x00, 0x8c, 0x78, + 0x1a, 0x59, 0x00, 0x8c, 0x79, 0x0d, 0xb1, 0x00, + 0x8c, 0x7a, 0x1a, 0x5a, 0x00, 0x8c, 0x7b, 0x4d, + 0x72, 0x00, 0x8c, 0x7c, 0x1a, 0x62, 0x00, 0x8c, + 0x7e, 0x58, 0x32, 0x00, 0x8c, 0x82, 0x1a, 0x5b, + 0x00, 0x8c, 0x85, 0x1a, 0x5d, 0x00, 0x8c, 0x86, + 0x58, 0x33, 0x00, 0x8c, 0x87, 0x58, 0x34, 0x00, + 0x8c, 0x89, 0x1a, 0x5c, 0x00, 0x8c, 0x8a, 0x1a, + 0x5e, 0x00, 0x8c, 0x8b, 0x58, 0x35, 0x00, 0x8c, + 0x8c, 0x0e, 0x74, 0x00, 0x8c, 0x8d, 0x1a, 0x5f, + 0x00, 0x8c, 0x8e, 0x1a, 0x60, 0x00, 0x8c, 0x90, + 0x58, 0x36, 0x00, 0x8c, 0x92, 0x49, 0x16, 0x00, + 0x8c, 0x93, 0x49, 0x15, 0x00, 0x8c, 0x94, 0x1a, + 0x61, 0x00, 0x8c, 0x98, 0x1a, 0x63, 0x00, 0x8c, + 0x99, 0x49, 0x17, 0x00, 0x8c, 0x9b, 0x49, 0x19, + 0x00, 0x8c, 0x9c, 0x58, 0x38, 0x00, 0x8c, 0x9d, + 0x05, 0x8b, 0x00, 0x8c, 0x9e, 0x0c, 0x03, 0x00, + 0x8c, 0x9f, 0x35, 0x4c, 0x00, 0x8c, 0xa0, 0x0d, + 0xdb, 0x00, 0x8c, 0xa1, 0x08, 0x52, 0x00, 0x8c, + 0xa2, 0x07, 0xe9, 0x00, 0x8c, 0xa4, 0x3b, 0x31, + 0x00, 0x8c, 0xa7, 0x0d, 0xc1, 0x00, 0x8c, 0xa8, + 0x05, 0x5f, 0x00, 0x8c, 0xa9, 0x0d, 0x62, 0x00, + 0x8c, 0xaa, 0x1a, 0x66, 0x00, 0x8c, 0xab, 0x06, + 0x0f, 0x00, 0x8c, 0xac, 0x0a, 0x79, 0x00, 0x8c, + 0xad, 0x1a, 0x65, 0x00, 0x8c, 0xae, 0x1a, 0x6a, + 0x00, 0x8c, 0xaf, 0x0b, 0xb7, 0x00, 0x8c, 0xb0, + 0x0e, 0xef, 0x00, 0x8c, 0xb2, 0x1a, 0x68, 0x00, + 0x8c, 0xb3, 0x1a, 0x69, 0x00, 0x8c, 0xb4, 0x06, + 0x48, 0x00, 0x8c, 0xb6, 0x1a, 0x6b, 0x00, 0x8c, + 0xb7, 0x0d, 0x19, 0x00, 0x8c, 0xb8, 0x0b, 0x3f, + 0x00, 0x8c, 0xb9, 0x58, 0x39, 0x00, 0x8c, 0xba, + 0x4d, 0x73, 0x00, 0x8c, 0xbb, 0x0d, 0x85, 0x00, + 0x8c, 0xbc, 0x0c, 0x37, 0x00, 0x8c, 0xbd, 0x1a, + 0x67, 0x00, 0x8c, 0xbf, 0x0e, 0x75, 0x00, 0x8c, + 0xc0, 0x05, 0x6c, 0x00, 0x8c, 0xc1, 0x1a, 0x6d, + 0x00, 0x8c, 0xc2, 0x0f, 0xce, 0x00, 0x8c, 0xc3, + 0x0b, 0xde, 0x00, 0x8c, 0xc4, 0x0f, 0xeb, 0x00, + 0x8c, 0xc5, 0x4d, 0x74, 0x00, 0x8c, 0xc6, 0x58, + 0x3a, 0x00, 0x8c, 0xc7, 0x08, 0xbf, 0x00, 0x8c, + 0xc8, 0x1a, 0x6c, 0x00, 0x8c, 0xc9, 0x4d, 0x75, + 0x00, 0x8c, 0xca, 0x0b, 0x11, 0x00, 0x8c, 0xcb, + 0x58, 0x3b, 0x00, 0x8c, 0xcd, 0x1a, 0x7d, 0x00, + 0x8c, 0xce, 0x0a, 0xaa, 0x00, 0x8c, 0xcf, 0x58, + 0x3c, 0x00, 0x8c, 0xd1, 0x0c, 0xd0, 0x00, 0x8c, + 0xd2, 0x4d, 0x76, 0x00, 0x8c, 0xd3, 0x34, 0x44, + 0x00, 0x8c, 0xd5, 0x49, 0x1b, 0x00, 0x8c, 0xd6, + 0x49, 0x1a, 0x00, 0x8c, 0xd9, 0x3b, 0x32, 0x00, + 0x8c, 0xda, 0x1a, 0x70, 0x00, 0x8c, 0xdb, 0x08, + 0x8d, 0x00, 0x8c, 0xdc, 0x08, 0xc0, 0x00, 0x8c, + 0xdd, 0x58, 0x3d, 0x00, 0x8c, 0xde, 0x09, 0xc6, + 0x00, 0x8c, 0xe0, 0x0d, 0x1b, 0x00, 0x8c, 0xe1, + 0x3b, 0x33, 0x00, 0x8c, 0xe2, 0x07, 0x61, 0x00, + 0x8c, 0xe3, 0x1a, 0x6f, 0x00, 0x8c, 0xe4, 0x1a, + 0x6e, 0x00, 0x8c, 0xe6, 0x0d, 0xdc, 0x00, 0x8c, + 0xe8, 0x58, 0x3e, 0x00, 0x8c, 0xea, 0x08, 0xed, + 0x00, 0x8c, 0xec, 0x4d, 0x77, 0x00, 0x8c, 0xed, + 0x0c, 0x4c, 0x00, 0x8c, 0xef, 0x58, 0x3f, 0x00, + 0x8c, 0xf0, 0x21, 0xb2, 0x00, 0x8c, 0xf1, 0x49, + 0x1d, 0x00, 0x8c, 0xf2, 0x58, 0x40, 0x00, 0x8c, + 0xf4, 0x21, 0xb3, 0x00, 0x8c, 0xf5, 0x4d, 0x78, + 0x00, 0x8c, 0xf7, 0x4d, 0x79, 0x00, 0x8c, 0xf8, + 0x3b, 0x34, 0x00, 0x8c, 0xfa, 0x1a, 0x72, 0x00, + 0x8c, 0xfb, 0x1a, 0x73, 0x00, 0x8c, 0xfc, 0x07, + 0xea, 0x00, 0x8c, 0xfd, 0x1a, 0x71, 0x00, 0x8c, + 0xfe, 0x3b, 0x35, 0x00, 0x8c, 0xff, 0x58, 0x41, + 0x00, 0x8d, 0x01, 0x4d, 0x7a, 0x00, 0x8d, 0x03, + 0x4d, 0x7b, 0x00, 0x8d, 0x04, 0x1a, 0x74, 0x00, + 0x8d, 0x05, 0x1a, 0x75, 0x00, 0x8d, 0x07, 0x1a, + 0x77, 0x00, 0x8d, 0x08, 0x0b, 0x03, 0x00, 0x8d, + 0x09, 0x49, 0x1f, 0x00, 0x8d, 0x0a, 0x1a, 0x76, + 0x00, 0x8d, 0x0b, 0x06, 0x22, 0x00, 0x8d, 0x0d, + 0x1a, 0x79, 0x00, 0x8d, 0x0e, 0x49, 0x20, 0x00, + 0x8d, 0x0f, 0x1a, 0x78, 0x00, 0x8d, 0x10, 0x1a, + 0x7a, 0x00, 0x8d, 0x12, 0x21, 0xb4, 0x00, 0x8d, + 0x13, 0x1a, 0x7c, 0x00, 0x8d, 0x14, 0x1a, 0x7e, + 0x00, 0x8d, 0x16, 0x1a, 0x7f, 0x00, 0x8d, 0x17, + 0x4d, 0x7c, 0x00, 0x8d, 0x1b, 0x3b, 0x36, 0x00, + 0x8d, 0x1c, 0x4d, 0x7d, 0x00, 0x8d, 0x64, 0x0a, + 0x7a, 0x00, 0x8d, 0x65, 0x58, 0x42, 0x00, 0x8d, + 0x66, 0x08, 0xfb, 0x00, 0x8d, 0x67, 0x1a, 0x80, + 0x00, 0x8d, 0x69, 0x3b, 0x37, 0x00, 0x8d, 0x6b, + 0x05, 0xb0, 0x00, 0x8d, 0x6c, 0x3b, 0x38, 0x00, + 0x8d, 0x6d, 0x1a, 0x81, 0x00, 0x8d, 0x6e, 0x4d, + 0x7e, 0x00, 0x8d, 0x70, 0x0a, 0xf8, 0x00, 0x8d, + 0x71, 0x1a, 0x82, 0x00, 0x8d, 0x73, 0x1a, 0x83, + 0x00, 0x8d, 0x74, 0x0d, 0xdd, 0x00, 0x8d, 0x76, + 0x21, 0xb5, 0x00, 0x8d, 0x77, 0x06, 0x49, 0x00, + 0x8d, 0x7f, 0x58, 0x43, 0x00, 0x8d, 0x81, 0x1a, + 0x84, 0x00, 0x8d, 0x82, 0x58, 0x44, 0x00, 0x8d, + 0x84, 0x3b, 0x39, 0x00, 0x8d, 0x85, 0x0b, 0xd2, + 0x00, 0x8d, 0x88, 0x58, 0x45, 0x00, 0x8d, 0x8a, + 0x04, 0xfd, 0x00, 0x8d, 0x8d, 0x3b, 0x3a, 0x00, + 0x8d, 0x90, 0x58, 0x46, 0x00, 0x8d, 0x91, 0x4d, + 0x7f, 0x00, 0x8d, 0x95, 0x3b, 0x3b, 0x00, 0x8d, + 0x99, 0x1a, 0x85, 0x00, 0x8d, 0x9e, 0x58, 0x47, + 0x00, 0x8d, 0x9f, 0x4d, 0x80, 0x00, 0x8d, 0xa0, + 0x58, 0x48, 0x00, 0x8d, 0xa3, 0x09, 0x1d, 0x00, + 0x8d, 0xa6, 0x3b, 0x3c, 0x00, 0x8d, 0xa8, 0x0a, + 0x3c, 0x00, 0x8d, 0xab, 0x4d, 0x81, 0x00, 0x8d, + 0xac, 0x58, 0x49, 0x00, 0x8d, 0xaf, 0x42, 0xee, + 0x00, 0x8d, 0xb2, 0x4d, 0x82, 0x00, 0x8d, 0xb3, + 0x0b, 0x0d, 0x00, 0x8d, 0xb5, 0x58, 0x4a, 0x00, + 0x8d, 0xb7, 0x58, 0x4b, 0x00, 0x8d, 0xb9, 0x58, + 0x4c, 0x00, 0x8d, 0xba, 0x1a, 0x88, 0x00, 0x8d, + 0xbb, 0x58, 0x4d, 0x00, 0x8d, 0xbc, 0x58, 0x55, + 0x00, 0x8d, 0xbe, 0x1a, 0x87, 0x00, 0x8d, 0xc0, + 0x58, 0x4e, 0x00, 0x8d, 0xc2, 0x1a, 0x86, 0x00, + 0x8d, 0xc5, 0x58, 0x4f, 0x00, 0x8d, 0xc6, 0x3b, + 0x3d, 0x00, 0x8d, 0xc7, 0x58, 0x50, 0x00, 0x8d, + 0xc8, 0x49, 0x21, 0x00, 0x8d, 0xca, 0x58, 0x51, + 0x00, 0x8d, 0xcb, 0x1a, 0x8e, 0x00, 0x8d, 0xcc, + 0x1a, 0x8c, 0x00, 0x8d, 0xce, 0x3b, 0x3e, 0x00, + 0x8d, 0xcf, 0x1a, 0x89, 0x00, 0x8d, 0xd1, 0x42, + 0xef, 0x00, 0x8d, 0xd4, 0x58, 0x52, 0x00, 0x8d, + 0xd5, 0x4d, 0x83, 0x00, 0x8d, 0xd6, 0x1a, 0x8b, + 0x00, 0x8d, 0xd7, 0x42, 0xf0, 0x00, 0x8d, 0xd9, + 0x49, 0x22, 0x00, 0x8d, 0xda, 0x1a, 0x8a, 0x00, + 0x8d, 0xdb, 0x1a, 0x8d, 0x00, 0x8d, 0xdd, 0x06, + 0x91, 0x00, 0x8d, 0xdf, 0x1a, 0x91, 0x00, 0x8d, + 0xe1, 0x0a, 0x7b, 0x00, 0x8d, 0xe3, 0x1a, 0x92, + 0x00, 0x8d, 0xe4, 0x3b, 0x3f, 0x00, 0x8d, 0xe5, + 0x58, 0x53, 0x00, 0x8d, 0xe7, 0x4d, 0x84, 0x00, + 0x8d, 0xe8, 0x07, 0x8d, 0x00, 0x8d, 0xea, 0x1a, + 0x8f, 0x00, 0x8d, 0xeb, 0x1a, 0x90, 0x00, 0x8d, + 0xec, 0x3b, 0x40, 0x00, 0x8d, 0xef, 0x0f, 0xcf, + 0x00, 0x8d, 0xf0, 0x58, 0x54, 0x00, 0x8d, 0xf1, + 0x4d, 0x85, 0x00, 0x8d, 0xf2, 0x4d, 0x86, 0x00, + 0x8d, 0xf3, 0x0b, 0xd3, 0x00, 0x8d, 0xf4, 0x4d, + 0x87, 0x00, 0x8d, 0xf5, 0x0a, 0xab, 0x00, 0x8d, + 0xfc, 0x1a, 0x93, 0x00, 0x8d, 0xfd, 0x49, 0x25, + 0x00, 0x8d, 0xff, 0x1a, 0x96, 0x00, 0x8e, 0x01, + 0x4d, 0x88, 0x00, 0x8e, 0x04, 0x58, 0x56, 0x00, + 0x8e, 0x05, 0x58, 0x57, 0x00, 0x8e, 0x06, 0x49, + 0x26, 0x00, 0x8e, 0x08, 0x1a, 0x94, 0x00, 0x8e, + 0x09, 0x1a, 0x95, 0x00, 0x8e, 0x0a, 0x0f, 0x43, + 0x00, 0x8e, 0x0b, 0x4d, 0x89, 0x00, 0x8e, 0x0c, + 0x49, 0x23, 0x00, 0x8e, 0x0f, 0x0c, 0x7f, 0x00, + 0x8e, 0x10, 0x1a, 0x99, 0x00, 0x8e, 0x11, 0x58, + 0x58, 0x00, 0x8e, 0x14, 0x49, 0x28, 0x00, 0x8e, + 0x16, 0x49, 0x29, 0x00, 0x8e, 0x1d, 0x1a, 0x97, + 0x00, 0x8e, 0x1e, 0x1a, 0x98, 0x00, 0x8e, 0x1f, + 0x1a, 0x9a, 0x00, 0x8e, 0x20, 0x3b, 0x41, 0x00, + 0x8e, 0x21, 0x49, 0x2a, 0x00, 0x8e, 0x22, 0x49, + 0x2b, 0x00, 0x8e, 0x23, 0x42, 0xf1, 0x00, 0x8e, + 0x26, 0x4d, 0x8a, 0x00, 0x8e, 0x27, 0x49, 0x2c, + 0x00, 0x8e, 0x2a, 0x1a, 0xa8, 0x00, 0x8e, 0x30, + 0x1a, 0x9d, 0x00, 0x8e, 0x31, 0x4d, 0x8b, 0x00, + 0x8e, 0x33, 0x58, 0x59, 0x00, 0x8e, 0x34, 0x1a, + 0x9e, 0x00, 0x8e, 0x35, 0x1a, 0x9c, 0x00, 0x8e, + 0x36, 0x49, 0x2f, 0x00, 0x8e, 0x37, 0x58, 0x5a, + 0x00, 0x8e, 0x38, 0x58, 0x5b, 0x00, 0x8e, 0x39, + 0x49, 0x30, 0x00, 0x8e, 0x3d, 0x42, 0xf2, 0x00, + 0x8e, 0x40, 0x4d, 0x8c, 0x00, 0x8e, 0x41, 0x4d, + 0x8d, 0x00, 0x8e, 0x42, 0x1a, 0x9b, 0x00, 0x8e, + 0x44, 0x0c, 0x19, 0x00, 0x8e, 0x47, 0x1a, 0xa0, + 0x00, 0x8e, 0x48, 0x1a, 0xa4, 0x00, 0x8e, 0x49, + 0x1a, 0xa1, 0x00, 0x8e, 0x4a, 0x1a, 0x9f, 0x00, + 0x8e, 0x4b, 0x3b, 0x42, 0x00, 0x8e, 0x4c, 0x1a, + 0xa2, 0x00, 0x8e, 0x4d, 0x4d, 0x8e, 0x00, 0x8e, + 0x4e, 0x58, 0x5c, 0x00, 0x8e, 0x4f, 0x4d, 0x8f, + 0x00, 0x8e, 0x50, 0x1a, 0xa3, 0x00, 0x8e, 0x54, + 0x49, 0x31, 0x00, 0x8e, 0x55, 0x1a, 0xaa, 0x00, + 0x8e, 0x59, 0x1a, 0xa5, 0x00, 0x8e, 0x5b, 0x58, + 0x5d, 0x00, 0x8e, 0x5c, 0x4d, 0x90, 0x00, 0x8e, + 0x5d, 0x58, 0x5e, 0x00, 0x8e, 0x5e, 0x58, 0x5f, + 0x00, 0x8e, 0x5f, 0x0a, 0x7c, 0x00, 0x8e, 0x60, + 0x1a, 0xa7, 0x00, 0x8e, 0x61, 0x4d, 0x91, 0x00, + 0x8e, 0x62, 0x49, 0x32, 0x00, 0x8e, 0x63, 0x1a, + 0xa9, 0x00, 0x8e, 0x64, 0x1a, 0xa6, 0x00, 0x8e, + 0x69, 0x4d, 0x92, 0x00, 0x8e, 0x6c, 0x3b, 0x43, + 0x00, 0x8e, 0x6d, 0x49, 0x33, 0x00, 0x8e, 0x6f, + 0x49, 0x34, 0x00, 0x8e, 0x70, 0x3b, 0x44, 0x00, + 0x8e, 0x71, 0x4d, 0x93, 0x00, 0x8e, 0x72, 0x1a, + 0xac, 0x00, 0x8e, 0x74, 0x09, 0x3d, 0x00, 0x8e, + 0x75, 0x4d, 0x94, 0x00, 0x8e, 0x76, 0x1a, 0xab, + 0x00, 0x8e, 0x77, 0x4d, 0x95, 0x00, 0x8e, 0x79, + 0x58, 0x60, 0x00, 0x8e, 0x7a, 0x3b, 0x45, 0x00, + 0x8e, 0x7b, 0x42, 0xf3, 0x00, 0x8e, 0x7c, 0x1a, + 0xad, 0x00, 0x8e, 0x81, 0x1a, 0xae, 0x00, 0x8e, + 0x82, 0x58, 0x61, 0x00, 0x8e, 0x83, 0x58, 0x62, + 0x00, 0x8e, 0x84, 0x1a, 0xb1, 0x00, 0x8e, 0x85, + 0x1a, 0xb0, 0x00, 0x8e, 0x87, 0x1a, 0xaf, 0x00, + 0x8e, 0x89, 0x4d, 0x96, 0x00, 0x8e, 0x8a, 0x1a, + 0xb3, 0x00, 0x8e, 0x8b, 0x1a, 0xb2, 0x00, 0x8e, + 0x8d, 0x0f, 0x02, 0x00, 0x8e, 0x90, 0x4d, 0x97, + 0x00, 0x8e, 0x91, 0x1a, 0xb5, 0x00, 0x8e, 0x92, + 0x3b, 0x46, 0x00, 0x8e, 0x93, 0x1a, 0xb4, 0x00, + 0x8e, 0x94, 0x1a, 0xb6, 0x00, 0x8e, 0x95, 0x4d, + 0x98, 0x00, 0x8e, 0x98, 0x49, 0x35, 0x00, 0x8e, + 0x99, 0x1a, 0xb7, 0x00, 0x8e, 0x9a, 0x4d, 0x99, + 0x00, 0x8e, 0x9b, 0x58, 0x63, 0x00, 0x8e, 0x9d, + 0x58, 0x64, 0x00, 0x8e, 0x9e, 0x49, 0x36, 0x00, + 0x8e, 0xa1, 0x1a, 0xb9, 0x00, 0x8e, 0xa2, 0x58, + 0x65, 0x00, 0x8e, 0xa7, 0x4d, 0x9a, 0x00, 0x8e, + 0xa9, 0x4d, 0x9b, 0x00, 0x8e, 0xaa, 0x1a, 0xb8, + 0x00, 0x8e, 0xab, 0x0a, 0x0e, 0x00, 0x8e, 0xac, + 0x1a, 0xba, 0x00, 0x8e, 0xad, 0x4d, 0x9c, 0x00, + 0x8e, 0xae, 0x3b, 0x47, 0x00, 0x8e, 0xaf, 0x06, + 0xe5, 0x00, 0x8e, 0xb0, 0x1a, 0xbb, 0x00, 0x8e, + 0xb1, 0x1a, 0xbd, 0x00, 0x8e, 0xb3, 0x3b, 0x48, + 0x00, 0x8e, 0xb5, 0x49, 0x37, 0x00, 0x8e, 0xb6, + 0x37, 0x03, 0x00, 0x8e, 0xba, 0x58, 0x66, 0x00, + 0x8e, 0xbb, 0x49, 0x38, 0x00, 0x8e, 0xbe, 0x1a, + 0xbe, 0x00, 0x8e, 0xc0, 0x1d, 0xef, 0x00, 0x8e, + 0xc1, 0x58, 0x67, 0x00, 0x8e, 0xc3, 0x58, 0x68, + 0x00, 0x8e, 0xc4, 0x58, 0x69, 0x00, 0x8e, 0xc5, + 0x1a, 0xbf, 0x00, 0x8e, 0xc6, 0x1a, 0xbc, 0x00, + 0x8e, 0xc7, 0x58, 0x6a, 0x00, 0x8e, 0xc8, 0x1a, + 0xc0, 0x00, 0x8e, 0xca, 0x09, 0x02, 0x00, 0x8e, + 0xcb, 0x1a, 0xc1, 0x00, 0x8e, 0xcc, 0x06, 0x4a, + 0x00, 0x8e, 0xcd, 0x07, 0x09, 0x00, 0x8e, 0xcf, + 0x21, 0xb7, 0x00, 0x8e, 0xd1, 0x3b, 0x49, 0x00, + 0x8e, 0xd2, 0x07, 0x62, 0x00, 0x8e, 0xd4, 0x4e, + 0x62, 0x00, 0x8e, 0xdb, 0x1a, 0xc2, 0x00, 0x8e, + 0xdc, 0x58, 0x6b, 0x00, 0x8e, 0xdf, 0x0c, 0xc8, + 0x00, 0x8e, 0xe2, 0x0c, 0x38, 0x00, 0x8e, 0xe3, + 0x1a, 0xc3, 0x00, 0x8e, 0xe8, 0x4d, 0x9d, 0x00, + 0x8e, 0xeb, 0x1a, 0xc6, 0x00, 0x8e, 0xed, 0x58, + 0x6f, 0x00, 0x8e, 0xee, 0x58, 0x6c, 0x00, 0x8e, + 0xf0, 0x4d, 0x9e, 0x00, 0x8e, 0xf1, 0x58, 0x6d, + 0x00, 0x8e, 0xf7, 0x58, 0x6e, 0x00, 0x8e, 0xf8, + 0x08, 0xe0, 0x00, 0x8e, 0xf9, 0x3b, 0x4b, 0x00, + 0x8e, 0xfa, 0x42, 0xf6, 0x00, 0x8e, 0xfb, 0x1a, + 0xc5, 0x00, 0x8e, 0xfc, 0x1a, 0xc4, 0x00, 0x8e, + 0xfd, 0x07, 0x30, 0x00, 0x8e, 0xfe, 0x1a, 0xc7, + 0x00, 0x8f, 0x00, 0x49, 0x3c, 0x00, 0x8f, 0x02, + 0x58, 0x70, 0x00, 0x8f, 0x03, 0x05, 0xb1, 0x00, + 0x8f, 0x05, 0x1a, 0xc9, 0x00, 0x8f, 0x07, 0x4d, + 0x9f, 0x00, 0x8f, 0x08, 0x49, 0x3d, 0x00, 0x8f, + 0x09, 0x08, 0x4c, 0x00, 0x8f, 0x0a, 0x1a, 0xc8, + 0x00, 0x8f, 0x0c, 0x1a, 0xd1, 0x00, 0x8f, 0x0f, + 0x58, 0x71, 0x00, 0x8f, 0x10, 0x58, 0x72, 0x00, + 0x8f, 0x12, 0x1a, 0xcb, 0x00, 0x8f, 0x13, 0x1a, + 0xcd, 0x00, 0x8f, 0x14, 0x0e, 0x35, 0x00, 0x8f, + 0x15, 0x1a, 0xca, 0x00, 0x8f, 0x16, 0x58, 0x73, + 0x00, 0x8f, 0x17, 0x3b, 0x4c, 0x00, 0x8f, 0x18, + 0x4d, 0xa0, 0x00, 0x8f, 0x19, 0x1a, 0xcc, 0x00, + 0x8f, 0x1b, 0x1a, 0xd0, 0x00, 0x8f, 0x1c, 0x1a, + 0xce, 0x00, 0x8f, 0x1d, 0x06, 0x4b, 0x00, 0x8f, + 0x1e, 0x42, 0xf7, 0x00, 0x8f, 0x1f, 0x1a, 0xcf, + 0x00, 0x8f, 0x20, 0x58, 0x74, 0x00, 0x8f, 0x21, + 0x58, 0x75, 0x00, 0x8f, 0x23, 0x58, 0x76, 0x00, + 0x8f, 0x25, 0x4d, 0xa1, 0x00, 0x8f, 0x26, 0x1a, + 0xd2, 0x00, 0x8f, 0x27, 0x4d, 0xa2, 0x00, 0x8f, + 0x28, 0x58, 0x77, 0x00, 0x8f, 0x29, 0x0d, 0x10, + 0x00, 0x8f, 0x2a, 0x0f, 0xa0, 0x00, 0x8f, 0x2b, + 0x49, 0x3e, 0x00, 0x8f, 0x2c, 0x4d, 0xa3, 0x00, + 0x8f, 0x2d, 0x42, 0xf8, 0x00, 0x8f, 0x2e, 0x58, + 0x78, 0x00, 0x8f, 0x2f, 0x09, 0x3e, 0x00, 0x8f, + 0x33, 0x1a, 0xd3, 0x00, 0x8f, 0x34, 0x58, 0x79, + 0x00, 0x8f, 0x35, 0x4d, 0xa4, 0x00, 0x8f, 0x36, + 0x3b, 0x4d, 0x00, 0x8f, 0x37, 0x58, 0x7a, 0x00, + 0x8f, 0x38, 0x0f, 0x0c, 0x00, 0x8f, 0x39, 0x1a, + 0xd5, 0x00, 0x8f, 0x3a, 0x4d, 0xa5, 0x00, 0x8f, + 0x3b, 0x1a, 0xd4, 0x00, 0x8f, 0x3e, 0x1a, 0xd8, + 0x00, 0x8f, 0x3f, 0x0f, 0x2b, 0x00, 0x8f, 0x40, + 0x49, 0x3f, 0x00, 0x8f, 0x41, 0x58, 0x7b, 0x00, + 0x8f, 0x42, 0x1a, 0xd7, 0x00, 0x8f, 0x43, 0x4d, + 0xa6, 0x00, 0x8f, 0x44, 0x05, 0xcb, 0x00, 0x8f, + 0x45, 0x1a, 0xd6, 0x00, 0x8f, 0x46, 0x1a, 0xdb, + 0x00, 0x8f, 0x47, 0x4d, 0xa7, 0x00, 0x8f, 0x49, + 0x1a, 0xda, 0x00, 0x8f, 0x4a, 0x49, 0x40, 0x00, + 0x8f, 0x4c, 0x1a, 0xd9, 0x00, 0x8f, 0x4d, 0x0c, + 0x2c, 0x00, 0x8f, 0x4e, 0x1a, 0xdc, 0x00, 0x8f, + 0x4f, 0x58, 0x7c, 0x00, 0x8f, 0x51, 0x4d, 0xa8, + 0x00, 0x8f, 0x52, 0x58, 0x7d, 0x00, 0x8f, 0x53, + 0x58, 0x7e, 0x00, 0x8f, 0x54, 0x42, 0xf9, 0x00, + 0x8f, 0x55, 0x4d, 0xa9, 0x00, 0x8f, 0x57, 0x1a, + 0xdd, 0x00, 0x8f, 0x58, 0x49, 0x41, 0x00, 0x8f, + 0x5c, 0x1a, 0xde, 0x00, 0x8f, 0x5d, 0x58, 0x7f, + 0x00, 0x8f, 0x5e, 0x58, 0x80, 0x00, 0x8f, 0x5f, + 0x07, 0xfe, 0x00, 0x8f, 0x61, 0x06, 0xfb, 0x00, + 0x8f, 0x62, 0x1a, 0xdf, 0x00, 0x8f, 0x63, 0x1a, + 0xe0, 0x00, 0x8f, 0x64, 0x1a, 0xe1, 0x00, 0x8f, + 0x65, 0x58, 0x81, 0x00, 0x8f, 0x9b, 0x0a, 0x0f, + 0x00, 0x8f, 0x9c, 0x1a, 0xe2, 0x00, 0x8f, 0x9d, + 0x58, 0x82, 0x00, 0x8f, 0x9e, 0x08, 0xd9, 0x00, + 0x8f, 0x9f, 0x1a, 0xe3, 0x00, 0x8f, 0xa0, 0x4d, + 0xaa, 0x00, 0x8f, 0xa1, 0x4d, 0xab, 0x00, 0x8f, + 0xa2, 0x4d, 0xac, 0x00, 0x8f, 0xa3, 0x1a, 0xe4, + 0x00, 0x8f, 0xa4, 0x49, 0x43, 0x00, 0x8f, 0xa5, + 0x4d, 0xad, 0x00, 0x8f, 0xa6, 0x3b, 0x4e, 0x00, + 0x8f, 0xa7, 0x10, 0xb6, 0x00, 0x8f, 0xa8, 0x10, + 0xb5, 0x00, 0x8f, 0xad, 0x1a, 0xe5, 0x00, 0x8f, + 0xae, 0x17, 0xff, 0x00, 0x8f, 0xaf, 0x1a, 0xe6, + 0x00, 0x8f, 0xb0, 0x0b, 0x62, 0x00, 0x8f, 0xb1, + 0x09, 0xf1, 0x00, 0x8f, 0xb2, 0x0c, 0xf6, 0x00, + 0x8f, 0xb4, 0x49, 0x44, 0x00, 0x8f, 0xb5, 0x3b, + 0x4f, 0x00, 0x8f, 0xb6, 0x3b, 0x50, 0x00, 0x8f, + 0xb7, 0x1a, 0xe7, 0x00, 0x8f, 0xb8, 0x58, 0x83, + 0x00, 0x8f, 0xba, 0x0e, 0x25, 0x00, 0x8f, 0xbb, + 0x0b, 0xf0, 0x00, 0x8f, 0xbc, 0x08, 0x10, 0x00, + 0x8f, 0xbe, 0x58, 0x84, 0x00, 0x8f, 0xbf, 0x0b, + 0x67, 0x00, 0x8f, 0xc0, 0x58, 0x85, 0x00, 0x8f, + 0xc1, 0x49, 0x46, 0x00, 0x8f, 0xc2, 0x04, 0xcc, + 0x00, 0x8f, 0xc4, 0x0e, 0xa6, 0x00, 0x8f, 0xc5, + 0x0a, 0x1d, 0x00, 0x8f, 0xc6, 0x49, 0x47, 0x00, + 0x8f, 0xc8, 0x37, 0x99, 0x00, 0x8f, 0xca, 0x49, + 0x49, 0x00, 0x8f, 0xcb, 0x58, 0x86, 0x00, 0x8f, + 0xcd, 0x49, 0x4a, 0x00, 0x8f, 0xce, 0x07, 0x34, + 0x00, 0x8f, 0xd0, 0x58, 0x87, 0x00, 0x8f, 0xd1, + 0x06, 0xd9, 0x00, 0x8f, 0xd2, 0x58, 0x88, 0x00, + 0x8f, 0xd3, 0x49, 0x4b, 0x00, 0x8f, 0xd4, 0x0e, + 0x26, 0x00, 0x8f, 0xd5, 0x49, 0x4c, 0x00, 0x8f, + 0xda, 0x1a, 0xe8, 0x00, 0x8f, 0xe0, 0x3b, 0x52, + 0x00, 0x8f, 0xe2, 0x1a, 0xea, 0x00, 0x8f, 0xe3, + 0x58, 0x89, 0x00, 0x8f, 0xe4, 0x3b, 0x53, 0x00, + 0x8f, 0xe5, 0x1a, 0xe9, 0x00, 0x8f, 0xe6, 0x05, + 0x60, 0x00, 0x8f, 0xe8, 0x42, 0xfb, 0x00, 0x8f, + 0xe9, 0x0c, 0xce, 0x00, 0x8f, 0xea, 0x1a, 0xeb, + 0x00, 0x8f, 0xeb, 0x0d, 0x2d, 0x00, 0x8f, 0xed, + 0x0c, 0x2d, 0x00, 0x8f, 0xee, 0x42, 0xfc, 0x00, + 0x8f, 0xef, 0x1a, 0xec, 0x00, 0x8f, 0xf0, 0x09, + 0x5c, 0x00, 0x8f, 0xf1, 0x49, 0x4d, 0x00, 0x8f, + 0xf4, 0x1a, 0xee, 0x00, 0x8f, 0xf5, 0x49, 0x4e, + 0x00, 0x8f, 0xf6, 0x3b, 0x54, 0x00, 0x8f, 0xf7, + 0x0e, 0xce, 0x00, 0x8f, 0xf8, 0x1a, 0xfd, 0x00, + 0x8f, 0xf9, 0x1a, 0xf0, 0x00, 0x8f, 0xfa, 0x1a, + 0xf1, 0x00, 0x8f, 0xfb, 0x49, 0x4f, 0x00, 0x8f, + 0xfd, 0x0b, 0xe5, 0x00, 0x8f, 0xfe, 0x58, 0x8a, + 0x00, 0x90, 0x00, 0x0b, 0x40, 0x00, 0x90, 0x01, + 0x0a, 0xf9, 0x00, 0x90, 0x02, 0x3b, 0x55, 0x00, + 0x90, 0x03, 0x0c, 0x80, 0x00, 0x90, 0x04, 0x4d, + 0xae, 0x00, 0x90, 0x05, 0x1a, 0xef, 0x00, 0x90, + 0x06, 0x06, 0x6f, 0x00, 0x90, 0x08, 0x42, 0xfd, + 0x00, 0x90, 0x0b, 0x1a, 0xf8, 0x00, 0x90, 0x0c, + 0x49, 0x50, 0x00, 0x90, 0x0d, 0x1a, 0xf5, 0x00, + 0x90, 0x0e, 0x1b, 0x02, 0x00, 0x90, 0x0f, 0x0c, + 0x81, 0x00, 0x90, 0x10, 0x0b, 0x9e, 0x00, 0x90, + 0x11, 0x1a, 0xf2, 0x00, 0x90, 0x13, 0x0c, 0x1a, + 0x00, 0x90, 0x14, 0x0c, 0x4d, 0x00, 0x90, 0x15, + 0x1a, 0xf3, 0x00, 0x90, 0x16, 0x1a, 0xf7, 0x00, + 0x90, 0x17, 0x0a, 0x26, 0x00, 0x90, 0x18, 0x58, + 0x8b, 0x00, 0x90, 0x19, 0x0d, 0x1d, 0x00, 0x90, + 0x1a, 0x0b, 0xe8, 0x00, 0x90, 0x1b, 0x4d, 0xaf, + 0x00, 0x90, 0x1d, 0x0a, 0x66, 0x00, 0x90, 0x1e, + 0x1a, 0xf6, 0x00, 0x90, 0x1f, 0x0b, 0x0e, 0x00, + 0x90, 0x20, 0x0b, 0x04, 0x00, 0x90, 0x21, 0x1a, + 0xf4, 0x00, 0x90, 0x22, 0x04, 0x6d, 0x00, 0x90, + 0x23, 0x37, 0x11, 0x00, 0x90, 0x27, 0x1a, 0xf9, + 0x00, 0x90, 0x28, 0x58, 0x8c, 0x00, 0x90, 0x29, + 0x58, 0x8d, 0x00, 0x90, 0x2a, 0x58, 0x8e, 0x00, + 0x90, 0x2c, 0x3b, 0x56, 0x00, 0x90, 0x2d, 0x42, + 0xfe, 0x00, 0x90, 0x2e, 0x0b, 0x41, 0x00, 0x90, + 0x2f, 0x4d, 0xb0, 0x00, 0x90, 0x31, 0x09, 0x3f, + 0x00, 0x90, 0x32, 0x0a, 0x10, 0x00, 0x90, 0x33, + 0x58, 0x8f, 0x00, 0x90, 0x34, 0x58, 0x90, 0x00, + 0x90, 0x35, 0x1a, 0xfb, 0x00, 0x90, 0x36, 0x1a, + 0xfa, 0x00, 0x90, 0x37, 0x49, 0x51, 0x00, 0x90, + 0x38, 0x04, 0xb3, 0x00, 0x90, 0x39, 0x1a, 0xfc, + 0x00, 0x90, 0x3c, 0x0d, 0xa1, 0x00, 0x90, 0x3e, + 0x1b, 0x04, 0x00, 0x90, 0x3f, 0x58, 0x91, 0x00, + 0x90, 0x41, 0x0c, 0xb3, 0x00, 0x90, 0x42, 0x0a, + 0x31, 0x00, 0x90, 0x43, 0x49, 0x53, 0x00, 0x90, + 0x44, 0x3b, 0x57, 0x00, 0x90, 0x45, 0x0b, 0x97, + 0x00, 0x90, 0x47, 0x06, 0xf0, 0x00, 0x90, 0x49, + 0x1b, 0x03, 0x00, 0x90, 0x4a, 0x0f, 0x21, 0x00, + 0x90, 0x4b, 0x04, 0xe1, 0x00, 0x90, 0x4c, 0x4d, + 0xb1, 0x00, 0x90, 0x4d, 0x0e, 0x27, 0x00, 0x90, + 0x4e, 0x05, 0x61, 0x00, 0x90, 0x4f, 0x1a, 0xfe, + 0x00, 0x90, 0x50, 0x1a, 0xff, 0x00, 0x90, 0x51, + 0x1b, 0x00, 0x00, 0x90, 0x52, 0x1b, 0x01, 0x00, + 0x90, 0x53, 0x0c, 0x93, 0x00, 0x90, 0x54, 0x0b, + 0x61, 0x00, 0x90, 0x55, 0x04, 0xa7, 0x00, 0x90, + 0x56, 0x1b, 0x05, 0x00, 0x90, 0x58, 0x1b, 0x06, + 0x00, 0x90, 0x59, 0x1d, 0x34, 0x00, 0x90, 0x5b, + 0x4d, 0xb2, 0x00, 0x90, 0x5c, 0x0b, 0x1d, 0x00, + 0x90, 0x5d, 0x49, 0x54, 0x00, 0x90, 0x5e, 0x1b, + 0x07, 0x00, 0x90, 0x60, 0x05, 0x15, 0x00, 0x90, + 0x61, 0x0a, 0xce, 0x00, 0x90, 0x62, 0x58, 0x92, + 0x00, 0x90, 0x63, 0x07, 0x63, 0x00, 0x90, 0x65, + 0x0f, 0x44, 0x00, 0x90, 0x66, 0x58, 0x93, 0x00, + 0x90, 0x67, 0x21, 0xba, 0x00, 0x90, 0x68, 0x1b, + 0x08, 0x00, 0x90, 0x69, 0x0c, 0x26, 0x00, 0x90, + 0x6c, 0x58, 0x94, 0x00, 0x90, 0x6d, 0x0a, 0xfa, + 0x00, 0x90, 0x6e, 0x09, 0x03, 0x00, 0x90, 0x6f, + 0x1b, 0x09, 0x00, 0x90, 0x70, 0x4d, 0xb3, 0x00, + 0x90, 0x72, 0x1b, 0x0c, 0x00, 0x90, 0x74, 0x4d, + 0xb4, 0x00, 0x90, 0x75, 0x09, 0x6f, 0x00, 0x90, + 0x76, 0x1b, 0x0a, 0x00, 0x90, 0x77, 0x0a, 0xad, + 0x00, 0x90, 0x78, 0x0a, 0xac, 0x00, 0x90, 0x79, + 0x4d, 0xb5, 0x00, 0x90, 0x7a, 0x04, 0xa8, 0x00, + 0x90, 0x7c, 0x0f, 0x93, 0x00, 0x90, 0x7d, 0x1b, + 0x0e, 0x00, 0x90, 0x7f, 0x0d, 0x86, 0x00, 0x90, + 0x80, 0x1b, 0x10, 0x00, 0x90, 0x81, 0x1b, 0x0f, + 0x00, 0x90, 0x82, 0x1b, 0x0d, 0x00, 0x90, 0x83, + 0x17, 0x37, 0x00, 0x90, 0x84, 0x06, 0x10, 0x00, + 0x90, 0x85, 0x49, 0x57, 0x00, 0x90, 0x87, 0x1a, + 0xed, 0x00, 0x90, 0x88, 0x3b, 0x58, 0x00, 0x90, + 0x89, 0x1b, 0x12, 0x00, 0x90, 0x8a, 0x1b, 0x11, + 0x00, 0x90, 0x8b, 0x4d, 0xb6, 0x00, 0x90, 0x8c, + 0x49, 0x58, 0x00, 0x90, 0x8e, 0x58, 0x95, 0x00, + 0x90, 0x8f, 0x1b, 0x13, 0x00, 0x90, 0x90, 0x49, + 0x59, 0x00, 0x90, 0x91, 0x0f, 0x22, 0x00, 0x90, + 0x95, 0x3b, 0x59, 0x00, 0x90, 0x97, 0x42, 0xff, + 0x00, 0x90, 0x98, 0x4d, 0xb7, 0x00, 0x90, 0x99, + 0x3b, 0x5a, 0x00, 0x90, 0x9b, 0x3b, 0x5b, 0x00, + 0x90, 0xa0, 0x4d, 0xb8, 0x00, 0x90, 0xa1, 0x49, + 0x5a, 0x00, 0x90, 0xa2, 0x3b, 0x5c, 0x00, 0x90, + 0xa3, 0x0c, 0xb9, 0x00, 0x90, 0xa5, 0x58, 0x96, + 0x00, 0x90, 0xa6, 0x0e, 0x5c, 0x00, 0x90, 0xa8, + 0x1b, 0x14, 0x00, 0x90, 0xaa, 0x09, 0x05, 0x00, + 0x90, 0xaf, 0x1b, 0x15, 0x00, 0x90, 0xb0, 0x49, + 0x5c, 0x00, 0x90, 0xb1, 0x1b, 0x16, 0x00, 0x90, + 0xb2, 0x4d, 0xb9, 0x00, 0x90, 0xb3, 0x43, 0x00, + 0x00, 0x90, 0xb4, 0x3b, 0x5d, 0x00, 0x90, 0xb5, + 0x1b, 0x17, 0x00, 0x90, 0xb6, 0x49, 0x5d, 0x00, + 0x90, 0xb8, 0x0c, 0x1b, 0x00, 0x90, 0xbd, 0x4d, + 0xba, 0x00, 0x90, 0xbe, 0x43, 0x01, 0x00, 0x90, + 0xc1, 0x04, 0xae, 0x00, 0x90, 0xc3, 0x49, 0x5e, + 0x00, 0x90, 0xc4, 0x43, 0x02, 0x00, 0x90, 0xc5, + 0x43, 0x03, 0x00, 0x90, 0xc7, 0x43, 0x04, 0x00, + 0x90, 0xc8, 0x49, 0x5f, 0x00, 0x90, 0xc9, 0x4d, + 0xbb, 0x00, 0x90, 0xca, 0x07, 0xeb, 0x00, 0x90, + 0xcc, 0x58, 0x97, 0x00, 0x90, 0xce, 0x0f, 0xe0, + 0x00, 0x90, 0xd2, 0x58, 0x9c, 0x00, 0x90, 0xd5, + 0x58, 0x98, 0x00, 0x90, 0xd7, 0x3b, 0x5e, 0x00, + 0x90, 0xd8, 0x58, 0x99, 0x00, 0x90, 0xd9, 0x58, + 0x9a, 0x00, 0x90, 0xdb, 0x1b, 0x1b, 0x00, 0x90, + 0xdc, 0x49, 0x61, 0x00, 0x90, 0xdd, 0x3b, 0x5f, + 0x00, 0x90, 0xde, 0x21, 0xbb, 0x00, 0x90, 0xdf, + 0x49, 0x62, 0x00, 0x90, 0xe1, 0x07, 0x0a, 0x00, + 0x90, 0xe2, 0x1b, 0x18, 0x00, 0x90, 0xe4, 0x1b, + 0x19, 0x00, 0x90, 0xe5, 0x58, 0x9b, 0x00, 0x90, + 0xe8, 0x0d, 0xe6, 0x00, 0x90, 0xeb, 0x49, 0x67, + 0x00, 0x90, 0xed, 0x05, 0xb2, 0x00, 0x90, 0xef, + 0x43, 0x05, 0x00, 0x90, 0xf0, 0x4d, 0xbc, 0x00, + 0x90, 0xf2, 0x49, 0x65, 0x00, 0x90, 0xf4, 0x3b, + 0x60, 0x00, 0x90, 0xf5, 0x0f, 0x23, 0x00, 0x90, + 0xf6, 0x49, 0x64, 0x00, 0x90, 0xf7, 0x06, 0xb7, + 0x00, 0x90, 0xfd, 0x21, 0xbc, 0x00, 0x90, 0xfe, + 0x49, 0x68, 0x00, 0x90, 0xff, 0x49, 0x69, 0x00, + 0x91, 0x00, 0x49, 0x66, 0x00, 0x91, 0x02, 0x1b, + 0x1c, 0x00, 0x91, 0x04, 0x49, 0x6a, 0x00, 0x91, + 0x05, 0x4d, 0xbd, 0x00, 0x91, 0x06, 0x49, 0x6b, + 0x00, 0x91, 0x08, 0x58, 0x9d, 0x00, 0x91, 0x0d, + 0x58, 0x9e, 0x00, 0x91, 0x10, 0x58, 0x9f, 0x00, + 0x91, 0x12, 0x1b, 0x1d, 0x00, 0x91, 0x14, 0x43, + 0x06, 0x00, 0x91, 0x15, 0x21, 0xbd, 0x00, 0x91, + 0x16, 0x43, 0x07, 0x00, 0x91, 0x17, 0x3b, 0x61, + 0x00, 0x91, 0x18, 0x49, 0x6c, 0x00, 0x91, 0x19, + 0x1b, 0x1e, 0x00, 0x91, 0x1a, 0x58, 0xa0, 0x00, + 0x91, 0x1c, 0x3b, 0x62, 0x00, 0x91, 0x1e, 0x49, + 0x6d, 0x00, 0x91, 0x20, 0x58, 0xa1, 0x00, 0x91, + 0x22, 0x43, 0x08, 0x00, 0x91, 0x23, 0x43, 0x09, + 0x00, 0x91, 0x25, 0x4d, 0xbe, 0x00, 0x91, 0x27, + 0x21, 0xbe, 0x00, 0x91, 0x29, 0x58, 0xa2, 0x00, + 0x91, 0x2d, 0x0c, 0x1c, 0x00, 0x91, 0x2e, 0x58, + 0xa3, 0x00, 0x91, 0x2f, 0x43, 0x0a, 0x00, 0x91, + 0x30, 0x1b, 0x20, 0x00, 0x91, 0x31, 0x3b, 0x63, + 0x00, 0x91, 0x32, 0x1b, 0x1f, 0x00, 0x91, 0x34, + 0x43, 0x0b, 0x00, 0x91, 0x36, 0x58, 0xa4, 0x00, + 0x91, 0x37, 0x49, 0x6e, 0x00, 0x91, 0x39, 0x49, + 0x6f, 0x00, 0x91, 0x3a, 0x3b, 0x64, 0x00, 0x91, + 0x3c, 0x58, 0xa5, 0x00, 0x91, 0x3d, 0x3b, 0x65, + 0x00, 0x91, 0x43, 0x58, 0xa6, 0x00, 0x91, 0x46, + 0x49, 0x70, 0x00, 0x91, 0x47, 0x49, 0x71, 0x00, + 0x91, 0x48, 0x3b, 0x66, 0x00, 0x91, 0x49, 0x0c, + 0xab, 0x00, 0x91, 0x4a, 0x1b, 0x21, 0x00, 0x91, + 0x4b, 0x09, 0x40, 0x00, 0x91, 0x4c, 0x09, 0x0c, + 0x00, 0x91, 0x4d, 0x0d, 0x11, 0x00, 0x91, 0x4e, + 0x0b, 0xaf, 0x00, 0x91, 0x4f, 0x58, 0xa7, 0x00, + 0x91, 0x52, 0x09, 0x1e, 0x00, 0x91, 0x53, 0x58, + 0xa8, 0x00, 0x91, 0x54, 0x0a, 0x32, 0x00, 0x91, + 0x56, 0x1b, 0x22, 0x00, 0x91, 0x57, 0x49, 0x72, + 0x00, 0x91, 0x58, 0x1b, 0x23, 0x00, 0x91, 0x59, + 0x49, 0x73, 0x00, 0x91, 0x5a, 0x4d, 0xbf, 0x00, + 0x91, 0x5b, 0x3b, 0x67, 0x00, 0x91, 0x61, 0x3b, + 0x68, 0x00, 0x91, 0x62, 0x0a, 0x23, 0x00, 0x91, + 0x63, 0x1b, 0x24, 0x00, 0x91, 0x64, 0x3b, 0x69, + 0x00, 0x91, 0x65, 0x1b, 0x25, 0x00, 0x91, 0x67, + 0x4d, 0xc0, 0x00, 0x91, 0x69, 0x1b, 0x26, 0x00, + 0x91, 0x6a, 0x0f, 0x59, 0x00, 0x91, 0x6c, 0x09, + 0x41, 0x00, 0x91, 0x6d, 0x58, 0xa9, 0x00, 0x91, + 0x72, 0x1b, 0x28, 0x00, 0x91, 0x73, 0x1b, 0x27, + 0x00, 0x91, 0x74, 0x49, 0x74, 0x00, 0x91, 0x75, + 0x07, 0xec, 0x00, 0x91, 0x77, 0x08, 0x05, 0x00, + 0x91, 0x78, 0x08, 0x8e, 0x00, 0x91, 0x79, 0x49, + 0x75, 0x00, 0x91, 0x7a, 0x4d, 0xc1, 0x00, 0x91, + 0x7b, 0x58, 0xaa, 0x00, 0x91, 0x81, 0x58, 0xab, + 0x00, 0x91, 0x82, 0x1b, 0x2b, 0x00, 0x91, 0x83, + 0x43, 0x0c, 0x00, 0x91, 0x85, 0x49, 0x76, 0x00, + 0x91, 0x86, 0x58, 0xac, 0x00, 0x91, 0x87, 0x09, + 0x70, 0x00, 0x91, 0x89, 0x1b, 0x2a, 0x00, 0x91, + 0x8a, 0x4d, 0xc2, 0x00, 0x91, 0x8b, 0x1b, 0x29, + 0x00, 0x91, 0x8d, 0x0b, 0x49, 0x00, 0x91, 0x8e, + 0x3b, 0x6a, 0x00, 0x91, 0x90, 0x07, 0xa3, 0x00, + 0x91, 0x91, 0x4d, 0xc3, 0x00, 0x91, 0x92, 0x0a, + 0x67, 0x00, 0x91, 0x93, 0x58, 0xad, 0x00, 0x91, + 0x94, 0x58, 0xae, 0x00, 0x91, 0x95, 0x4d, 0xc4, + 0x00, 0x91, 0x97, 0x0d, 0x44, 0x00, 0x91, 0x98, + 0x58, 0xaf, 0x00, 0x91, 0x9c, 0x09, 0x43, 0x00, + 0x91, 0x9e, 0x3b, 0x6b, 0x00, 0x91, 0xa1, 0x58, + 0xb0, 0x00, 0x91, 0xa2, 0x1b, 0x2c, 0x00, 0x91, + 0xa4, 0x09, 0xc7, 0x00, 0x91, 0xa6, 0x58, 0xb1, + 0x00, 0x91, 0xa8, 0x3b, 0x6c, 0x00, 0x91, 0xaa, + 0x1b, 0x2f, 0x00, 0x91, 0xab, 0x1b, 0x2d, 0x00, + 0x91, 0xac, 0x1e, 0x1b, 0x00, 0x91, 0xad, 0x3b, + 0x6d, 0x00, 0x91, 0xae, 0x3b, 0x6e, 0x00, 0x91, + 0xaf, 0x1b, 0x2e, 0x00, 0x91, 0xb0, 0x4d, 0xc5, + 0x00, 0x91, 0xb1, 0x1e, 0x61, 0x00, 0x91, 0xb2, + 0x3b, 0x6f, 0x00, 0x91, 0xb3, 0x49, 0x77, 0x00, + 0x91, 0xb4, 0x1b, 0x31, 0x00, 0x91, 0xb5, 0x1b, + 0x30, 0x00, 0x91, 0xb6, 0x49, 0x78, 0x00, 0x91, + 0xb8, 0x09, 0xe2, 0x00, 0x91, 0xba, 0x1b, 0x32, + 0x00, 0x91, 0xbb, 0x4d, 0xc6, 0x00, 0x91, 0xbc, + 0x3b, 0x70, 0x00, 0x91, 0xbd, 0x4d, 0xc7, 0x00, + 0x91, 0xbf, 0x58, 0xb2, 0x00, 0x91, 0xc0, 0x1b, + 0x33, 0x00, 0x91, 0xc1, 0x1b, 0x34, 0x00, 0x91, + 0xc2, 0x4d, 0xc8, 0x00, 0x91, 0xc3, 0x49, 0x79, + 0x00, 0x91, 0xc4, 0x49, 0x7a, 0x00, 0x91, 0xc5, + 0x4d, 0xc9, 0x00, 0x91, 0xc6, 0x0d, 0x64, 0x00, + 0x91, 0xc7, 0x08, 0x43, 0x00, 0x91, 0xc8, 0x09, + 0x0d, 0x00, 0x91, 0xc9, 0x1b, 0x35, 0x00, 0x91, + 0xcb, 0x1b, 0x36, 0x00, 0x91, 0xcc, 0x0f, 0x6c, + 0x00, 0x91, 0xcd, 0x09, 0x4f, 0x00, 0x91, 0xce, + 0x0e, 0xfa, 0x00, 0x91, 0xcf, 0x0f, 0x94, 0x00, + 0x91, 0xd0, 0x1b, 0x37, 0x00, 0x91, 0xd1, 0x06, + 0xda, 0x00, 0x91, 0xd3, 0x58, 0xb3, 0x00, 0x91, + 0xd4, 0x58, 0xb4, 0x00, 0x91, 0xd6, 0x1b, 0x38, + 0x00, 0x91, 0xd7, 0x21, 0xc0, 0x00, 0x91, 0xd8, + 0x0c, 0x1d, 0x00, 0x91, 0xd9, 0x58, 0xb5, 0x00, + 0x91, 0xda, 0x21, 0xbf, 0x00, 0x91, 0xdb, 0x1b, + 0x3b, 0x00, 0x91, 0xdc, 0x05, 0xd6, 0x00, 0x91, + 0xdd, 0x0a, 0x11, 0x00, 0x91, 0xde, 0x21, 0xc1, + 0x00, 0x91, 0xdf, 0x1b, 0x39, 0x00, 0x91, 0xe1, + 0x1b, 0x3a, 0x00, 0x91, 0xe3, 0x0b, 0xfc, 0x00, + 0x91, 0xe4, 0x21, 0xc4, 0x00, 0x91, 0xe5, 0x21, + 0xc5, 0x00, 0x91, 0xe6, 0x0e, 0x83, 0x00, 0x91, + 0xe7, 0x06, 0xf4, 0x00, 0x91, 0xe9, 0x58, 0xb6, + 0x00, 0x91, 0xea, 0x58, 0xb7, 0x00, 0x91, 0xec, + 0x49, 0x7d, 0x00, 0x91, 0xed, 0x21, 0xc2, 0x00, + 0x91, 0xee, 0x21, 0xc3, 0x00, 0x91, 0xef, 0x58, + 0xb8, 0x00, 0x91, 0xf0, 0x3b, 0x71, 0x00, 0x91, + 0xf1, 0x43, 0x0d, 0x00, 0x91, 0xf5, 0x1b, 0x3d, + 0x00, 0x91, 0xf6, 0x1b, 0x3e, 0x00, 0x91, 0xf7, + 0x3b, 0x72, 0x00, 0x91, 0xf9, 0x58, 0xb9, 0x00, + 0x91, 0xfb, 0x3b, 0x73, 0x00, 0x91, 0xfc, 0x1b, + 0x3c, 0x00, 0x91, 0xfd, 0x58, 0xba, 0x00, 0x91, + 0xff, 0x1b, 0x40, 0x00, 0x92, 0x00, 0x4d, 0xca, + 0x00, 0x92, 0x01, 0x49, 0x7e, 0x00, 0x92, 0x04, + 0x58, 0xbb, 0x00, 0x92, 0x05, 0x58, 0xbc, 0x00, + 0x92, 0x06, 0x21, 0xc6, 0x00, 0x92, 0x07, 0x3b, + 0x74, 0x00, 0x92, 0x09, 0x4d, 0xcb, 0x00, 0x92, + 0x0a, 0x21, 0xc8, 0x00, 0x92, 0x0c, 0x58, 0xbd, + 0x00, 0x92, 0x0d, 0x0c, 0xb7, 0x00, 0x92, 0x0e, + 0x05, 0xa1, 0x00, 0x92, 0x10, 0x21, 0xc7, 0x00, + 0x92, 0x11, 0x1b, 0x44, 0x00, 0x92, 0x12, 0x58, + 0xbe, 0x00, 0x92, 0x13, 0x58, 0xbf, 0x00, 0x92, + 0x14, 0x1b, 0x41, 0x00, 0x92, 0x15, 0x1b, 0x43, + 0x00, 0x92, 0x16, 0x49, 0x7f, 0x00, 0x92, 0x17, + 0x49, 0x80, 0x00, 0x92, 0x18, 0x58, 0xc0, 0x00, + 0x92, 0x1c, 0x58, 0xc1, 0x00, 0x92, 0x1d, 0x58, + 0xc2, 0x00, 0x92, 0x1e, 0x1b, 0x3f, 0x00, 0x92, + 0x23, 0x4d, 0xcc, 0x00, 0x92, 0x24, 0x58, 0xc3, + 0x00, 0x92, 0x25, 0x58, 0xc4, 0x00, 0x92, 0x26, + 0x58, 0xc5, 0x00, 0x92, 0x28, 0x3b, 0x75, 0x00, + 0x92, 0x29, 0x1b, 0x8a, 0x00, 0x92, 0x2c, 0x1b, + 0x42, 0x00, 0x92, 0x2e, 0x58, 0xc6, 0x00, 0x92, + 0x2f, 0x58, 0xc7, 0x00, 0x92, 0x30, 0x58, 0xc8, + 0x00, 0x92, 0x33, 0x3b, 0x76, 0x00, 0x92, 0x34, + 0x0f, 0xb3, 0x00, 0x92, 0x35, 0x58, 0xc9, 0x00, + 0x92, 0x36, 0x58, 0xca, 0x00, 0x92, 0x37, 0x07, + 0x8e, 0x00, 0x92, 0x38, 0x3b, 0x77, 0x00, 0x92, + 0x39, 0x21, 0xcf, 0x00, 0x92, 0x3a, 0x21, 0xc9, + 0x00, 0x92, 0x3c, 0x21, 0xcb, 0x00, 0x92, 0x3e, + 0x58, 0xcb, 0x00, 0x92, 0x3f, 0x1b, 0x4c, 0x00, + 0x92, 0x40, 0x21, 0xca, 0x00, 0x92, 0x42, 0x49, + 0x82, 0x00, 0x92, 0x43, 0x3b, 0x78, 0x00, 0x92, + 0x44, 0x0c, 0x2e, 0x00, 0x92, 0x45, 0x1b, 0x47, + 0x00, 0x92, 0x46, 0x58, 0xcc, 0x00, 0x92, 0x47, + 0x3b, 0x79, 0x00, 0x92, 0x48, 0x1b, 0x4a, 0x00, + 0x92, 0x49, 0x1b, 0x48, 0x00, 0x92, 0x4a, 0x49, + 0x83, 0x00, 0x92, 0x4b, 0x1b, 0x4d, 0x00, 0x92, + 0x4d, 0x58, 0xcd, 0x00, 0x92, 0x4e, 0x21, 0xcc, + 0x00, 0x92, 0x4f, 0x3b, 0x7a, 0x00, 0x92, 0x50, + 0x1b, 0x4e, 0x00, 0x92, 0x51, 0x21, 0xce, 0x00, + 0x92, 0x56, 0x49, 0x84, 0x00, 0x92, 0x57, 0x1b, + 0x46, 0x00, 0x92, 0x58, 0x58, 0xce, 0x00, 0x92, + 0x59, 0x21, 0xcd, 0x00, 0x92, 0x5a, 0x1b, 0x53, + 0x00, 0x92, 0x5b, 0x05, 0x16, 0x00, 0x92, 0x5c, + 0x58, 0xcf, 0x00, 0x92, 0x5d, 0x58, 0xd0, 0x00, + 0x92, 0x5e, 0x1b, 0x45, 0x00, 0x92, 0x60, 0x3b, + 0x7b, 0x00, 0x92, 0x61, 0x49, 0x85, 0x00, 0x92, + 0x62, 0x0d, 0x41, 0x00, 0x92, 0x64, 0x1b, 0x49, + 0x00, 0x92, 0x65, 0x49, 0x86, 0x00, 0x92, 0x66, + 0x09, 0xc8, 0x00, 0x92, 0x67, 0x21, 0xd0, 0x00, + 0x92, 0x68, 0x49, 0x87, 0x00, 0x92, 0x69, 0x58, + 0xd1, 0x00, 0x92, 0x6e, 0x58, 0xd2, 0x00, 0x92, + 0x6f, 0x58, 0xd3, 0x00, 0x92, 0x70, 0x58, 0xd4, + 0x00, 0x92, 0x71, 0x07, 0xed, 0x00, 0x92, 0x75, + 0x58, 0xd5, 0x00, 0x92, 0x76, 0x4d, 0xcd, 0x00, + 0x92, 0x77, 0x21, 0xd2, 0x00, 0x92, 0x78, 0x21, + 0xd3, 0x00, 0x92, 0x79, 0x58, 0xd6, 0x00, 0x92, + 0x7b, 0x58, 0xd7, 0x00, 0x92, 0x7c, 0x49, 0x89, + 0x00, 0x92, 0x7d, 0x49, 0x8a, 0x00, 0x92, 0x7e, + 0x0e, 0x76, 0x00, 0x92, 0x7f, 0x49, 0x8b, 0x00, + 0x92, 0x80, 0x06, 0xdc, 0x00, 0x92, 0x83, 0x09, + 0x50, 0x00, 0x92, 0x85, 0x0c, 0x94, 0x00, 0x92, + 0x88, 0x20, 0xaa, 0x00, 0x92, 0x89, 0x49, 0x8c, + 0x00, 0x92, 0x8a, 0x58, 0xd8, 0x00, 0x92, 0x8d, + 0x49, 0x8d, 0x00, 0x92, 0x8e, 0x4d, 0xce, 0x00, + 0x92, 0x91, 0x0a, 0xaf, 0x00, 0x92, 0x92, 0x58, + 0xd9, 0x00, 0x92, 0x93, 0x1b, 0x51, 0x00, 0x92, + 0x95, 0x1b, 0x4b, 0x00, 0x92, 0x96, 0x1b, 0x50, + 0x00, 0x92, 0x97, 0x49, 0x8e, 0x00, 0x92, 0x98, + 0x0e, 0xcf, 0x00, 0x92, 0x99, 0x49, 0x8f, 0x00, + 0x92, 0x9a, 0x0b, 0xd4, 0x00, 0x92, 0x9b, 0x1b, + 0x52, 0x00, 0x92, 0x9c, 0x1b, 0x4f, 0x00, 0x92, + 0x9f, 0x49, 0x90, 0x00, 0x92, 0xa0, 0x58, 0xda, + 0x00, 0x92, 0xa4, 0x58, 0xdb, 0x00, 0x92, 0xa5, + 0x58, 0xdc, 0x00, 0x92, 0xa7, 0x21, 0xd1, 0x00, + 0x92, 0xa8, 0x58, 0xdd, 0x00, 0x92, 0xab, 0x49, + 0x91, 0x00, 0x92, 0xad, 0x0a, 0xae, 0x00, 0x92, + 0xaf, 0x4d, 0xcf, 0x00, 0x92, 0xb2, 0x49, 0x94, + 0x00, 0x92, 0xb3, 0x35, 0x54, 0x00, 0x92, 0xb6, + 0x58, 0xde, 0x00, 0x92, 0xb7, 0x1b, 0x56, 0x00, + 0x92, 0xb8, 0x58, 0xdf, 0x00, 0x92, 0xb9, 0x1b, + 0x55, 0x00, 0x92, 0xba, 0x58, 0xe0, 0x00, 0x92, + 0xbb, 0x4d, 0xd0, 0x00, 0x92, 0xbc, 0x4d, 0xd1, + 0x00, 0x92, 0xbd, 0x58, 0xe1, 0x00, 0x92, 0xbf, + 0x49, 0x95, 0x00, 0x92, 0xc0, 0x49, 0x96, 0x00, + 0x92, 0xc1, 0x4d, 0xd2, 0x00, 0x92, 0xc2, 0x3b, + 0x7c, 0x00, 0x92, 0xc3, 0x4d, 0xd3, 0x00, 0x92, + 0xc5, 0x4d, 0xd4, 0x00, 0x92, 0xc6, 0x49, 0x97, + 0x00, 0x92, 0xc7, 0x58, 0xe2, 0x00, 0x92, 0xc8, + 0x4d, 0xd5, 0x00, 0x92, 0xcb, 0x3b, 0x7d, 0x00, + 0x92, 0xcc, 0x3b, 0x7e, 0x00, 0x92, 0xcd, 0x58, + 0xe3, 0x00, 0x92, 0xce, 0x49, 0x98, 0x00, 0x92, + 0xcf, 0x1b, 0x54, 0x00, 0x92, 0xd0, 0x21, 0xd7, + 0x00, 0x92, 0xd2, 0x0e, 0x5d, 0x00, 0x92, 0xd3, + 0x21, 0xdb, 0x00, 0x92, 0xd5, 0x21, 0xd9, 0x00, + 0x92, 0xd7, 0x21, 0xd5, 0x00, 0x92, 0xd8, 0x58, + 0xe4, 0x00, 0x92, 0xd9, 0x21, 0xd6, 0x00, 0x92, + 0xdc, 0x58, 0xe5, 0x00, 0x92, 0xdd, 0x58, 0xe6, + 0x00, 0x92, 0xdf, 0x3b, 0x7f, 0x00, 0x92, 0xe0, + 0x21, 0xda, 0x00, 0x92, 0xe1, 0x58, 0xe7, 0x00, + 0x92, 0xe3, 0x58, 0xe8, 0x00, 0x92, 0xe4, 0x09, + 0x85, 0x00, 0x92, 0xe5, 0x49, 0x99, 0x00, 0x92, + 0xe7, 0x21, 0xd4, 0x00, 0x92, 0xe8, 0x58, 0xe9, + 0x00, 0x92, 0xe9, 0x1b, 0x57, 0x00, 0x92, 0xea, + 0x0e, 0x2f, 0x00, 0x92, 0xec, 0x58, 0xea, 0x00, + 0x92, 0xed, 0x04, 0xf6, 0x00, 0x92, 0xee, 0x58, + 0xeb, 0x00, 0x92, 0xf0, 0x58, 0xec, 0x00, 0x92, + 0xf2, 0x0d, 0xb8, 0x00, 0x92, 0xf3, 0x0b, 0xb0, + 0x00, 0x92, 0xf7, 0x49, 0x9d, 0x00, 0x92, 0xf8, + 0x06, 0x92, 0x00, 0x92, 0xf9, 0x20, 0xb0, 0x00, + 0x92, 0xfa, 0x1b, 0x59, 0x00, 0x92, 0xfb, 0x21, + 0xde, 0x00, 0x92, 0xfc, 0x07, 0xef, 0x00, 0x92, + 0xff, 0x21, 0xe1, 0x00, 0x93, 0x00, 0x58, 0xed, + 0x00, 0x93, 0x02, 0x21, 0xe3, 0x00, 0x93, 0x04, + 0x34, 0x5a, 0x00, 0x93, 0x06, 0x08, 0x7a, 0x00, + 0x93, 0x08, 0x58, 0xee, 0x00, 0x93, 0x0d, 0x3b, + 0x80, 0x00, 0x93, 0x0f, 0x1b, 0x58, 0x00, 0x93, + 0x10, 0x0a, 0x33, 0x00, 0x93, 0x11, 0x49, 0x9a, + 0x00, 0x93, 0x14, 0x4d, 0xd6, 0x00, 0x93, 0x15, + 0x3b, 0x81, 0x00, 0x93, 0x18, 0x0a, 0x34, 0x00, + 0x93, 0x19, 0x1b, 0x5c, 0x00, 0x93, 0x1a, 0x1b, + 0x5e, 0x00, 0x93, 0x1c, 0x58, 0xef, 0x00, 0x93, + 0x1d, 0x21, 0xe2, 0x00, 0x93, 0x1e, 0x21, 0xe0, + 0x00, 0x93, 0x1f, 0x3b, 0x82, 0x00, 0x93, 0x20, + 0x09, 0xe3, 0x00, 0x93, 0x21, 0x21, 0xdd, 0x00, + 0x93, 0x22, 0x1b, 0x5d, 0x00, 0x93, 0x23, 0x1b, + 0x5f, 0x00, 0x93, 0x24, 0x58, 0xf0, 0x00, 0x93, + 0x25, 0x21, 0xdc, 0x00, 0x93, 0x26, 0x06, 0xcb, + 0x00, 0x93, 0x27, 0x3b, 0x83, 0x00, 0x93, 0x28, + 0x0d, 0xb7, 0x00, 0x93, 0x29, 0x49, 0x9e, 0x00, + 0x93, 0x2a, 0x58, 0xf1, 0x00, 0x93, 0x2b, 0x09, + 0x0e, 0x00, 0x93, 0x2c, 0x0f, 0xc9, 0x00, 0x93, + 0x2e, 0x1b, 0x5b, 0x00, 0x93, 0x2f, 0x08, 0x68, + 0x00, 0x93, 0x32, 0x0f, 0xe5, 0x00, 0x93, 0x33, + 0x4d, 0xd7, 0x00, 0x93, 0x34, 0x58, 0xf2, 0x00, + 0x93, 0x35, 0x1b, 0x61, 0x00, 0x93, 0x36, 0x4d, + 0xd8, 0x00, 0x93, 0x37, 0x58, 0xf3, 0x00, 0x93, + 0x3a, 0x1b, 0x60, 0x00, 0x93, 0x3b, 0x1b, 0x62, + 0x00, 0x93, 0x44, 0x1b, 0x5a, 0x00, 0x93, 0x47, + 0x3b, 0x84, 0x00, 0x93, 0x48, 0x20, 0xa9, 0x00, + 0x93, 0x49, 0x43, 0x0e, 0x00, 0x93, 0x4a, 0x34, + 0x58, 0x00, 0x93, 0x4b, 0x0c, 0xc1, 0x00, 0x93, + 0x4d, 0x0c, 0x4f, 0x00, 0x93, 0x50, 0x58, 0xf4, + 0x00, 0x93, 0x51, 0x49, 0xa1, 0x00, 0x93, 0x52, + 0x3b, 0x85, 0x00, 0x93, 0x54, 0x0b, 0xf3, 0x00, + 0x93, 0x55, 0x58, 0xf5, 0x00, 0x93, 0x56, 0x1b, + 0x67, 0x00, 0x93, 0x57, 0x21, 0xe5, 0x00, 0x93, + 0x58, 0x4d, 0xd9, 0x00, 0x93, 0x5a, 0x49, 0xa2, + 0x00, 0x93, 0x5b, 0x0b, 0x81, 0x00, 0x93, 0x5c, + 0x1b, 0x63, 0x00, 0x93, 0x5e, 0x58, 0xf6, 0x00, + 0x93, 0x60, 0x1b, 0x64, 0x00, 0x93, 0x64, 0x43, + 0x0f, 0x00, 0x93, 0x65, 0x43, 0x10, 0x00, 0x93, + 0x67, 0x58, 0xf7, 0x00, 0x93, 0x69, 0x58, 0xf8, + 0x00, 0x93, 0x6a, 0x3b, 0x87, 0x00, 0x93, 0x6b, + 0x49, 0xa3, 0x00, 0x93, 0x6c, 0x07, 0x03, 0x00, + 0x93, 0x6d, 0x3b, 0x88, 0x00, 0x93, 0x6e, 0x1b, + 0x66, 0x00, 0x93, 0x6f, 0x58, 0xf9, 0x00, 0x93, + 0x70, 0x21, 0xe4, 0x00, 0x93, 0x71, 0x49, 0xa4, + 0x00, 0x93, 0x73, 0x49, 0xa5, 0x00, 0x93, 0x74, + 0x58, 0xfa, 0x00, 0x93, 0x75, 0x07, 0x64, 0x00, + 0x93, 0x76, 0x58, 0xfb, 0x00, 0x93, 0x7a, 0x58, + 0xfc, 0x00, 0x93, 0x7c, 0x1b, 0x65, 0x00, 0x93, + 0x7d, 0x58, 0xfd, 0x00, 0x93, 0x7e, 0x09, 0xc9, + 0x00, 0x93, 0x7f, 0x4d, 0xda, 0x00, 0x93, 0x80, + 0x58, 0xfe, 0x00, 0x93, 0x81, 0x58, 0xff, 0x00, + 0x93, 0x82, 0x4d, 0xdb, 0x00, 0x93, 0x88, 0x49, + 0xa9, 0x00, 0x93, 0x8a, 0x4d, 0xdc, 0x00, 0x93, + 0x8b, 0x49, 0xaa, 0x00, 0x93, 0x8c, 0x05, 0xd7, + 0x00, 0x93, 0x8d, 0x59, 0x00, 0x00, 0x93, 0x8f, + 0x49, 0xab, 0x00, 0x93, 0x92, 0x59, 0x01, 0x00, + 0x93, 0x94, 0x1b, 0x6b, 0x00, 0x93, 0x95, 0x59, + 0x02, 0x00, 0x93, 0x96, 0x08, 0x2f, 0x00, 0x93, + 0x97, 0x0a, 0xfb, 0x00, 0x93, 0x98, 0x59, 0x03, + 0x00, 0x93, 0x9a, 0x0b, 0xe6, 0x00, 0x93, 0x9b, + 0x3b, 0x89, 0x00, 0x93, 0x9e, 0x49, 0xac, 0x00, + 0x93, 0xa1, 0x49, 0xa6, 0x00, 0x93, 0xa3, 0x43, + 0x11, 0x00, 0x93, 0xa4, 0x21, 0xe6, 0x00, 0x93, + 0xa6, 0x59, 0x05, 0x00, 0x93, 0xa7, 0x05, 0x99, + 0x00, 0x93, 0xa8, 0x59, 0x06, 0x00, 0x93, 0xa9, + 0x3b, 0x8b, 0x00, 0x93, 0xab, 0x59, 0x07, 0x00, + 0x93, 0xac, 0x1b, 0x69, 0x00, 0x93, 0xad, 0x1b, + 0x6a, 0x00, 0x93, 0xae, 0x0b, 0xdf, 0x00, 0x93, + 0xb0, 0x1b, 0x68, 0x00, 0x93, 0xb4, 0x59, 0x08, + 0x00, 0x93, 0xb5, 0x59, 0x09, 0x00, 0x93, 0xb6, + 0x59, 0x0a, 0x00, 0x93, 0xb9, 0x1b, 0x6c, 0x00, + 0x93, 0xba, 0x3b, 0x8a, 0x00, 0x93, 0xbb, 0x4d, + 0xdd, 0x00, 0x93, 0xc1, 0x3b, 0x8c, 0x00, 0x93, + 0xc3, 0x1b, 0x72, 0x00, 0x93, 0xc4, 0x59, 0x0b, + 0x00, 0x93, 0xc5, 0x59, 0x0c, 0x00, 0x93, 0xc6, + 0x21, 0xe7, 0x00, 0x93, 0xc7, 0x49, 0xb1, 0x00, + 0x93, 0xc8, 0x1b, 0x75, 0x00, 0x93, 0xc9, 0x59, + 0x0d, 0x00, 0x93, 0xca, 0x3b, 0x8d, 0x00, 0x93, + 0xcb, 0x59, 0x0e, 0x00, 0x93, 0xcc, 0x4d, 0xde, + 0x00, 0x93, 0xcd, 0x59, 0x0f, 0x00, 0x93, 0xd0, + 0x1b, 0x74, 0x00, 0x93, 0xd1, 0x0c, 0x27, 0x00, + 0x93, 0xd3, 0x59, 0x10, 0x00, 0x93, 0xd6, 0x1b, + 0x6d, 0x00, 0x93, 0xd7, 0x1b, 0x6e, 0x00, 0x93, + 0xd8, 0x1b, 0x71, 0x00, 0x93, 0xd9, 0x59, 0x11, + 0x00, 0x93, 0xdc, 0x49, 0xb2, 0x00, 0x93, 0xdd, + 0x1b, 0x73, 0x00, 0x93, 0xde, 0x21, 0xe8, 0x00, + 0x93, 0xdf, 0x43, 0x12, 0x00, 0x93, 0xe1, 0x06, + 0xb8, 0x00, 0x93, 0xe2, 0x3b, 0x8e, 0x00, 0x93, + 0xe4, 0x1b, 0x76, 0x00, 0x93, 0xe5, 0x1b, 0x70, + 0x00, 0x93, 0xe6, 0x4d, 0xdf, 0x00, 0x93, 0xe7, + 0x49, 0xb3, 0x00, 0x93, 0xe8, 0x1b, 0x6f, 0x00, + 0x93, 0xf1, 0x49, 0xb0, 0x00, 0x93, 0xf5, 0x49, + 0xad, 0x00, 0x93, 0xf7, 0x59, 0x12, 0x00, 0x93, + 0xf8, 0x21, 0xe9, 0x00, 0x93, 0xf9, 0x4d, 0xe0, + 0x00, 0x93, 0xfa, 0x3b, 0x8f, 0x00, 0x93, 0xfb, + 0x49, 0xb7, 0x00, 0x93, 0xfd, 0x3b, 0x90, 0x00, + 0x94, 0x01, 0x59, 0x13, 0x00, 0x94, 0x02, 0x4d, + 0xe1, 0x00, 0x94, 0x03, 0x1b, 0x7a, 0x00, 0x94, + 0x04, 0x43, 0x13, 0x00, 0x94, 0x07, 0x1b, 0x7b, + 0x00, 0x94, 0x08, 0x59, 0x14, 0x00, 0x94, 0x09, + 0x49, 0xb4, 0x00, 0x94, 0x0d, 0x4d, 0xe2, 0x00, + 0x94, 0x0e, 0x4d, 0xe3, 0x00, 0x94, 0x0f, 0x3b, + 0x91, 0x00, 0x94, 0x10, 0x1b, 0x7c, 0x00, 0x94, + 0x13, 0x1b, 0x79, 0x00, 0x94, 0x14, 0x1b, 0x78, + 0x00, 0x94, 0x15, 0x59, 0x15, 0x00, 0x94, 0x16, + 0x49, 0xb5, 0x00, 0x94, 0x17, 0x49, 0xb6, 0x00, + 0x94, 0x18, 0x09, 0xca, 0x00, 0x94, 0x19, 0x0c, + 0x82, 0x00, 0x94, 0x1a, 0x1b, 0x77, 0x00, 0x94, + 0x1f, 0x59, 0x16, 0x00, 0x94, 0x21, 0x1b, 0x80, + 0x00, 0x94, 0x2b, 0x1b, 0x7e, 0x00, 0x94, 0x2e, + 0x4d, 0xe4, 0x00, 0x94, 0x2f, 0x59, 0x17, 0x00, + 0x94, 0x31, 0x21, 0xea, 0x00, 0x94, 0x32, 0x49, + 0xb8, 0x00, 0x94, 0x33, 0x43, 0x14, 0x00, 0x94, + 0x34, 0x3b, 0x92, 0x00, 0x94, 0x35, 0x1b, 0x7f, + 0x00, 0x94, 0x36, 0x1b, 0x7d, 0x00, 0x94, 0x38, + 0x0b, 0x58, 0x00, 0x94, 0x3a, 0x1b, 0x81, 0x00, + 0x94, 0x3b, 0x49, 0xb9, 0x00, 0x94, 0x3d, 0x59, + 0x18, 0x00, 0x94, 0x3f, 0x3b, 0x93, 0x00, 0x94, + 0x41, 0x1b, 0x82, 0x00, 0x94, 0x43, 0x59, 0x19, + 0x00, 0x94, 0x44, 0x1b, 0x84, 0x00, 0x94, 0x45, + 0x21, 0xeb, 0x00, 0x94, 0x48, 0x21, 0xec, 0x00, + 0x94, 0x4a, 0x43, 0x15, 0x00, 0x94, 0x4c, 0x4d, + 0xe5, 0x00, 0x94, 0x51, 0x06, 0x11, 0x00, 0x94, + 0x52, 0x1b, 0x83, 0x00, 0x94, 0x53, 0x0f, 0x06, + 0x00, 0x94, 0x55, 0x3b, 0x94, 0x00, 0x94, 0x59, + 0x59, 0x1a, 0x00, 0x94, 0x5a, 0x1b, 0x8f, 0x00, + 0x94, 0x5b, 0x1b, 0x85, 0x00, 0x94, 0x5c, 0x59, + 0x1b, 0x00, 0x94, 0x5e, 0x1b, 0x88, 0x00, 0x94, + 0x5f, 0x59, 0x1c, 0x00, 0x94, 0x60, 0x1b, 0x86, + 0x00, 0x94, 0x61, 0x59, 0x1d, 0x00, 0x94, 0x62, + 0x1b, 0x87, 0x00, 0x94, 0x63, 0x43, 0x16, 0x00, + 0x94, 0x68, 0x59, 0x1e, 0x00, 0x94, 0x6a, 0x1b, + 0x89, 0x00, 0x94, 0x6b, 0x3b, 0x95, 0x00, 0x94, + 0x6d, 0x49, 0xbc, 0x00, 0x94, 0x6e, 0x59, 0x1f, + 0x00, 0x94, 0x6f, 0x49, 0xbd, 0x00, 0x94, 0x70, + 0x1b, 0x8b, 0x00, 0x94, 0x71, 0x43, 0x17, 0x00, + 0x94, 0x72, 0x3b, 0x96, 0x00, 0x94, 0x75, 0x1b, + 0x8c, 0x00, 0x94, 0x77, 0x1b, 0x8d, 0x00, 0x94, + 0x7c, 0x1b, 0x90, 0x00, 0x94, 0x7d, 0x1b, 0x8e, + 0x00, 0x94, 0x7e, 0x1b, 0x91, 0x00, 0x94, 0x7f, + 0x1b, 0x93, 0x00, 0x94, 0x81, 0x1b, 0x92, 0x00, + 0x94, 0x83, 0x59, 0x21, 0x00, 0x94, 0x84, 0x59, + 0x20, 0x00, 0x95, 0x77, 0x0b, 0xd5, 0x00, 0x95, + 0x78, 0x3b, 0x97, 0x00, 0x95, 0x79, 0x49, 0xbe, + 0x00, 0x95, 0x7e, 0x59, 0x22, 0x00, 0x95, 0x80, + 0x0e, 0xf3, 0x00, 0x95, 0x82, 0x1b, 0x94, 0x00, + 0x95, 0x83, 0x0a, 0xb0, 0x00, 0x95, 0x84, 0x59, + 0x23, 0x00, 0x95, 0x86, 0x49, 0xbf, 0x00, 0x95, + 0x87, 0x1b, 0x95, 0x00, 0x95, 0x88, 0x4d, 0xe6, + 0x00, 0x95, 0x89, 0x0e, 0x14, 0x00, 0x95, 0x8a, + 0x1b, 0x96, 0x00, 0x95, 0x8b, 0x05, 0x89, 0x00, + 0x95, 0x8c, 0x49, 0xc0, 0x00, 0x95, 0x8d, 0x49, + 0xc1, 0x00, 0x95, 0x8e, 0x43, 0x18, 0x00, 0x95, + 0x8f, 0x04, 0xde, 0x00, 0x95, 0x91, 0x06, 0x13, + 0x00, 0x95, 0x92, 0x21, 0xed, 0x00, 0x95, 0x93, + 0x06, 0x12, 0x00, 0x95, 0x94, 0x1b, 0x97, 0x00, + 0x95, 0x96, 0x1b, 0x98, 0x00, 0x95, 0x98, 0x1b, + 0x99, 0x00, 0x95, 0x99, 0x1b, 0x9a, 0x00, 0x95, + 0x9d, 0x59, 0x24, 0x00, 0x95, 0x9e, 0x59, 0x25, + 0x00, 0x95, 0x9f, 0x43, 0x19, 0x00, 0x95, 0xa0, + 0x1b, 0x9b, 0x00, 0x95, 0xa1, 0x4d, 0xe7, 0x00, + 0x95, 0xa2, 0x06, 0x14, 0x00, 0x95, 0xa3, 0x05, + 0xb3, 0x00, 0x95, 0xa4, 0x07, 0xf0, 0x00, 0x95, + 0xa5, 0x0d, 0x4a, 0x00, 0x95, 0xa6, 0x3b, 0x98, + 0x00, 0x95, 0xa7, 0x1b, 0x9d, 0x00, 0x95, 0xa8, + 0x1b, 0x9c, 0x00, 0x95, 0xa9, 0x3b, 0x99, 0x00, + 0x95, 0xab, 0x4f, 0x59, 0x00, 0x95, 0xac, 0x43, + 0x1a, 0x00, 0x95, 0xad, 0x1b, 0x9e, 0x00, 0x95, + 0xb1, 0x35, 0x55, 0x00, 0x95, 0xb2, 0x04, 0xfe, + 0x00, 0x95, 0xb4, 0x3b, 0x9b, 0x00, 0x95, 0xb6, + 0x43, 0x1b, 0x00, 0x95, 0xb9, 0x1b, 0xa1, 0x00, + 0x95, 0xba, 0x59, 0x26, 0x00, 0x95, 0xbb, 0x1b, + 0xa0, 0x00, 0x95, 0xbc, 0x1b, 0x9f, 0x00, 0x95, + 0xbd, 0x3b, 0x9c, 0x00, 0x95, 0xbe, 0x1b, 0xa2, + 0x00, 0x95, 0xbf, 0x4d, 0xe8, 0x00, 0x95, 0xc3, + 0x1b, 0xa5, 0x00, 0x95, 0xc6, 0x4d, 0xe9, 0x00, + 0x95, 0xc7, 0x04, 0x8b, 0x00, 0x95, 0xc8, 0x49, + 0xc4, 0x00, 0x95, 0xc9, 0x4d, 0xea, 0x00, 0x95, + 0xca, 0x1b, 0xa3, 0x00, 0x95, 0xcb, 0x43, 0x1c, + 0x00, 0x95, 0xcc, 0x1b, 0xa7, 0x00, 0x95, 0xcd, + 0x1b, 0xa6, 0x00, 0x95, 0xd0, 0x43, 0x1d, 0x00, + 0x95, 0xd1, 0x4d, 0xeb, 0x00, 0x95, 0xd2, 0x4d, + 0xec, 0x00, 0x95, 0xd3, 0x43, 0x1e, 0x00, 0x95, + 0xd4, 0x1b, 0xa9, 0x00, 0x95, 0xd5, 0x1b, 0xa8, + 0x00, 0x95, 0xd6, 0x1b, 0xaa, 0x00, 0x95, 0xd8, + 0x0c, 0x86, 0x00, 0x95, 0xd9, 0x59, 0x27, 0x00, + 0x95, 0xda, 0x3b, 0x9d, 0x00, 0x95, 0xdc, 0x1b, + 0xab, 0x00, 0x95, 0xdd, 0x59, 0x28, 0x00, 0x95, + 0xde, 0x43, 0x20, 0x00, 0x95, 0xdf, 0x59, 0x29, + 0x00, 0x95, 0xe0, 0x4d, 0xed, 0x00, 0x95, 0xe1, + 0x1b, 0xac, 0x00, 0x95, 0xe2, 0x1b, 0xae, 0x00, + 0x95, 0xe4, 0x4d, 0xee, 0x00, 0x95, 0xe5, 0x1b, + 0xad, 0x00, 0x95, 0xe6, 0x4d, 0xef, 0x00, 0x95, + 0xe8, 0x36, 0xed, 0x00, 0x96, 0x1c, 0x0d, 0xde, + 0x00, 0x96, 0x1d, 0x3b, 0x9e, 0x00, 0x96, 0x1e, + 0x59, 0x2a, 0x00, 0x96, 0x21, 0x1b, 0xaf, 0x00, + 0x96, 0x22, 0x59, 0x2b, 0x00, 0x96, 0x24, 0x4d, + 0xf0, 0x00, 0x96, 0x25, 0x59, 0x2c, 0x00, 0x96, + 0x26, 0x59, 0x2d, 0x00, 0x96, 0x28, 0x1b, 0xb0, + 0x00, 0x96, 0x2a, 0x08, 0x55, 0x00, 0x96, 0x2c, + 0x49, 0xc7, 0x00, 0x96, 0x2e, 0x1b, 0xb1, 0x00, + 0x96, 0x2f, 0x1b, 0xb2, 0x00, 0x96, 0x31, 0x4d, + 0xf1, 0x00, 0x96, 0x32, 0x0e, 0x77, 0x00, 0x96, + 0x33, 0x49, 0xc8, 0x00, 0x96, 0x34, 0x49, 0xc9, + 0x00, 0x96, 0x37, 0x59, 0x2e, 0x00, 0x96, 0x38, + 0x4d, 0xf2, 0x00, 0x96, 0x39, 0x59, 0x2f, 0x00, + 0x96, 0x3a, 0x59, 0x30, 0x00, 0x96, 0x3b, 0x0a, + 0xcd, 0x00, 0x96, 0x3c, 0x49, 0xcb, 0x00, 0x96, + 0x3d, 0x4d, 0xf3, 0x00, 0x96, 0x3f, 0x04, 0x68, + 0x00, 0x96, 0x40, 0x0b, 0x2b, 0x00, 0x96, 0x41, + 0x3b, 0x9f, 0x00, 0x96, 0x42, 0x1b, 0xb3, 0x00, + 0x96, 0x44, 0x0d, 0xdf, 0x00, 0x96, 0x4b, 0x1b, + 0xb6, 0x00, 0x96, 0x4c, 0x1b, 0xb4, 0x00, 0x96, + 0x4d, 0x07, 0xf1, 0x00, 0x96, 0x4f, 0x1b, 0xb5, + 0x00, 0x96, 0x50, 0x07, 0x76, 0x00, 0x96, 0x52, + 0x59, 0x31, 0x00, 0x96, 0x54, 0x4d, 0xf4, 0x00, + 0x96, 0x56, 0x59, 0x32, 0x00, 0x96, 0x57, 0x59, + 0x33, 0x00, 0x96, 0x58, 0x3b, 0xa0, 0x00, 0x96, + 0x5b, 0x0e, 0x15, 0x00, 0x96, 0x5c, 0x1b, 0xb8, + 0x00, 0x96, 0x5d, 0x1b, 0xba, 0x00, 0x96, 0x5e, + 0x1b, 0xb9, 0x00, 0x96, 0x5f, 0x1b, 0xbb, 0x00, + 0x96, 0x61, 0x49, 0xcc, 0x00, 0x96, 0x62, 0x04, + 0xc3, 0x00, 0x96, 0x63, 0x0a, 0x1e, 0x00, 0x96, + 0x64, 0x09, 0x86, 0x00, 0x96, 0x65, 0x06, 0x15, + 0x00, 0x96, 0x66, 0x1b, 0xbc, 0x00, 0x96, 0x6a, + 0x0d, 0x1c, 0x00, 0x96, 0x6c, 0x1b, 0xbe, 0x00, + 0x96, 0x6e, 0x59, 0x34, 0x00, 0x96, 0x70, 0x04, + 0xc4, 0x00, 0x96, 0x72, 0x1b, 0xbd, 0x00, 0x96, + 0x73, 0x0b, 0xe0, 0x00, 0x96, 0x74, 0x4d, 0xf5, + 0x00, 0x96, 0x75, 0x0f, 0x95, 0x00, 0x96, 0x76, + 0x0c, 0x83, 0x00, 0x96, 0x77, 0x1b, 0xb7, 0x00, + 0x96, 0x78, 0x0f, 0x6e, 0x00, 0x96, 0x7a, 0x07, + 0x65, 0x00, 0x96, 0x7b, 0x4d, 0xf6, 0x00, 0x96, + 0x7c, 0x59, 0x35, 0x00, 0x96, 0x7d, 0x0f, 0x45, + 0x00, 0x96, 0x7e, 0x59, 0x36, 0x00, 0x96, 0x7f, + 0x4d, 0xf7, 0x00, 0x96, 0x81, 0x4d, 0xf8, 0x00, + 0x96, 0x82, 0x49, 0xce, 0x00, 0x96, 0x83, 0x4d, + 0xf9, 0x00, 0x96, 0x84, 0x3b, 0xa1, 0x00, 0x96, + 0x85, 0x06, 0xf1, 0x00, 0x96, 0x86, 0x0f, 0x7c, + 0x00, 0x96, 0x88, 0x06, 0xfe, 0x00, 0x96, 0x89, + 0x4d, 0xfa, 0x00, 0x96, 0x8a, 0x0b, 0x42, 0x00, + 0x96, 0x8b, 0x18, 0x6c, 0x00, 0x96, 0x8d, 0x1b, + 0xbf, 0x00, 0x96, 0x8e, 0x05, 0x8a, 0x00, 0x96, + 0x8f, 0x0a, 0x35, 0x00, 0x96, 0x91, 0x59, 0x37, + 0x00, 0x96, 0x94, 0x05, 0xb4, 0x00, 0x96, 0x95, + 0x1b, 0xc1, 0x00, 0x96, 0x96, 0x4d, 0xfb, 0x00, + 0x96, 0x97, 0x1b, 0xc2, 0x00, 0x96, 0x98, 0x1b, + 0xc0, 0x00, 0x96, 0x99, 0x07, 0x3a, 0x00, 0x96, + 0x9a, 0x49, 0xd0, 0x00, 0x96, 0x9b, 0x08, 0x4d, + 0x00, 0x96, 0x9c, 0x09, 0xcb, 0x00, 0x96, 0x9d, + 0x21, 0xf0, 0x00, 0x96, 0x9f, 0x59, 0x38, 0x00, + 0x96, 0xa0, 0x04, 0xc5, 0x00, 0x96, 0xa3, 0x0f, + 0xa1, 0x00, 0x96, 0xa4, 0x3b, 0xa2, 0x00, 0x96, + 0xa5, 0x43, 0x21, 0x00, 0x96, 0xa6, 0x59, 0x39, + 0x00, 0x96, 0xa7, 0x1b, 0xc4, 0x00, 0x96, 0xa8, + 0x1b, 0x0b, 0x00, 0x96, 0xa9, 0x3b, 0xa3, 0x00, + 0x96, 0xaa, 0x1b, 0xc3, 0x00, 0x96, 0xae, 0x4d, + 0xfc, 0x00, 0x96, 0xaf, 0x21, 0xf1, 0x00, 0x96, + 0xb0, 0x1b, 0xc7, 0x00, 0x96, 0xb1, 0x1b, 0xc5, + 0x00, 0x96, 0xb2, 0x1b, 0xc6, 0x00, 0x96, 0xb3, + 0x49, 0xd3, 0x00, 0x96, 0xb4, 0x1b, 0xc8, 0x00, + 0x96, 0xb6, 0x1b, 0xc9, 0x00, 0x96, 0xb7, 0x0f, + 0xb4, 0x00, 0x96, 0xb8, 0x1b, 0xca, 0x00, 0x96, + 0xb9, 0x1b, 0xcb, 0x00, 0x96, 0xba, 0x49, 0xd4, + 0x00, 0x96, 0xbb, 0x0a, 0x6d, 0x00, 0x96, 0xbc, + 0x0d, 0x4f, 0x00, 0x96, 0xbd, 0x49, 0xd5, 0x00, + 0x96, 0xc0, 0x0a, 0x43, 0x00, 0x96, 0xc1, 0x06, + 0x23, 0x00, 0x96, 0xc4, 0x0f, 0x24, 0x00, 0x96, + 0xc5, 0x05, 0x6d, 0x00, 0x96, 0xc6, 0x09, 0x42, + 0x00, 0x96, 0xc7, 0x07, 0x8f, 0x00, 0x96, 0xc9, + 0x1b, 0xce, 0x00, 0x96, 0xca, 0x59, 0x3a, 0x00, + 0x96, 0xcb, 0x1b, 0xcd, 0x00, 0x96, 0xcc, 0x08, + 0xc1, 0x00, 0x96, 0xcd, 0x1b, 0xcf, 0x00, 0x96, + 0xce, 0x1b, 0xcc, 0x00, 0x96, 0xd1, 0x08, 0x76, + 0x00, 0x96, 0xd2, 0x3b, 0xa4, 0x00, 0x96, 0xd5, + 0x1b, 0xd3, 0x00, 0x96, 0xd6, 0x19, 0x92, 0x00, + 0x96, 0xd8, 0x49, 0xd8, 0x00, 0x96, 0xd9, 0x10, + 0xeb, 0x00, 0x96, 0xda, 0x49, 0xd9, 0x00, 0x96, + 0xdb, 0x0a, 0x3d, 0x00, 0x96, 0xdc, 0x1b, 0xd1, + 0x00, 0x96, 0xdd, 0x49, 0xda, 0x00, 0x96, 0xde, + 0x3b, 0xa6, 0x00, 0x96, 0xdf, 0x59, 0x3c, 0x00, + 0x96, 0xe2, 0x0f, 0x6d, 0x00, 0x96, 0xe3, 0x34, + 0x3e, 0x00, 0x96, 0xe8, 0x04, 0xcd, 0x00, 0x96, + 0xe9, 0x3b, 0xa7, 0x00, 0x96, 0xea, 0x0a, 0x87, + 0x00, 0x96, 0xeb, 0x08, 0xe2, 0x00, 0x96, 0xef, + 0x43, 0x22, 0x00, 0x96, 0xf0, 0x0e, 0x07, 0x00, + 0x96, 0xf1, 0x3b, 0xa8, 0x00, 0x96, 0xf2, 0x04, + 0xe2, 0x00, 0x96, 0xf6, 0x0f, 0xb5, 0x00, 0x96, + 0xf7, 0x0f, 0x55, 0x00, 0x96, 0xf9, 0x1b, 0xd4, + 0x00, 0x96, 0xfa, 0x59, 0x3d, 0x00, 0x96, 0xfb, + 0x0c, 0x3f, 0x00, 0x97, 0x00, 0x09, 0x27, 0x00, + 0x97, 0x02, 0x3b, 0xa9, 0x00, 0x97, 0x03, 0x4d, + 0xfd, 0x00, 0x97, 0x04, 0x1b, 0xd5, 0x00, 0x97, + 0x05, 0x59, 0x3e, 0x00, 0x97, 0x06, 0x1b, 0xd6, + 0x00, 0x97, 0x07, 0x0a, 0x12, 0x00, 0x97, 0x08, + 0x1b, 0xd7, 0x00, 0x97, 0x09, 0x3b, 0xaa, 0x00, + 0x97, 0x0a, 0x0f, 0xb6, 0x00, 0x97, 0x0d, 0x1b, + 0xd2, 0x00, 0x97, 0x0e, 0x1b, 0xd9, 0x00, 0x97, + 0x0f, 0x1b, 0xdb, 0x00, 0x97, 0x11, 0x1b, 0xda, + 0x00, 0x97, 0x13, 0x1b, 0xd8, 0x00, 0x97, 0x14, + 0x49, 0xdc, 0x00, 0x97, 0x16, 0x1b, 0xdc, 0x00, + 0x97, 0x19, 0x1b, 0xdd, 0x00, 0x97, 0x1a, 0x59, + 0x3f, 0x00, 0x97, 0x1b, 0x4d, 0xfe, 0x00, 0x97, + 0x1c, 0x0a, 0xfc, 0x00, 0x97, 0x1d, 0x59, 0x40, + 0x00, 0x97, 0x1e, 0x05, 0x62, 0x00, 0x97, 0x21, + 0x4d, 0xff, 0x00, 0x97, 0x22, 0x4e, 0x00, 0x00, + 0x97, 0x23, 0x49, 0xdd, 0x00, 0x97, 0x24, 0x1b, + 0xde, 0x00, 0x97, 0x27, 0x0e, 0xc4, 0x00, 0x97, + 0x28, 0x4e, 0x01, 0x00, 0x97, 0x2a, 0x1b, 0xdf, + 0x00, 0x97, 0x30, 0x1b, 0xe0, 0x00, 0x97, 0x31, + 0x4e, 0x02, 0x00, 0x97, 0x32, 0x0f, 0xd0, 0x00, + 0x97, 0x33, 0x21, 0xf2, 0x00, 0x97, 0x36, 0x49, + 0xdf, 0x00, 0x97, 0x38, 0x14, 0x14, 0x00, 0x97, + 0x39, 0x1b, 0xe1, 0x00, 0x97, 0x3b, 0x21, 0xf3, + 0x00, 0x97, 0x3d, 0x1b, 0xe2, 0x00, 0x97, 0x3e, + 0x1b, 0xe3, 0x00, 0x97, 0x41, 0x49, 0xe0, 0x00, + 0x97, 0x42, 0x1b, 0xe7, 0x00, 0x97, 0x43, 0x21, + 0xf4, 0x00, 0x97, 0x44, 0x1b, 0xe4, 0x00, 0x97, + 0x46, 0x1b, 0xe5, 0x00, 0x97, 0x47, 0x49, 0xe1, + 0x00, 0x97, 0x48, 0x1b, 0xe6, 0x00, 0x97, 0x49, + 0x1b, 0xe8, 0x00, 0x97, 0x4a, 0x59, 0x42, 0x00, + 0x97, 0x4d, 0x21, 0xf5, 0x00, 0x97, 0x4e, 0x43, + 0x23, 0x00, 0x97, 0x4f, 0x21, 0xf6, 0x00, 0x97, + 0x51, 0x21, 0xf7, 0x00, 0x97, 0x52, 0x0a, 0x68, + 0x00, 0x97, 0x55, 0x4f, 0x5a, 0x00, 0x97, 0x56, + 0x0f, 0x03, 0x00, 0x97, 0x57, 0x49, 0xe2, 0x00, + 0x97, 0x58, 0x59, 0x43, 0x00, 0x97, 0x59, 0x0a, + 0x69, 0x00, 0x97, 0x5a, 0x3b, 0xab, 0x00, 0x97, + 0x5b, 0x49, 0xe3, 0x00, 0x97, 0x5c, 0x1b, 0xe9, + 0x00, 0x97, 0x5e, 0x0d, 0x87, 0x00, 0x97, 0x60, + 0x1b, 0xea, 0x00, 0x97, 0x61, 0x1d, 0x06, 0x00, + 0x97, 0x62, 0x0e, 0xd8, 0x00, 0x97, 0x63, 0x3b, + 0xac, 0x00, 0x97, 0x64, 0x1b, 0xeb, 0x00, 0x97, + 0x66, 0x1b, 0xec, 0x00, 0x97, 0x67, 0x4e, 0x03, + 0x00, 0x97, 0x68, 0x1b, 0xed, 0x00, 0x97, 0x69, + 0x05, 0xb5, 0x00, 0x97, 0x6a, 0x49, 0xe4, 0x00, + 0x97, 0x6b, 0x1b, 0xef, 0x00, 0x97, 0x6d, 0x0a, + 0x1f, 0x00, 0x97, 0x6e, 0x3b, 0xad, 0x00, 0x97, + 0x71, 0x1b, 0xf0, 0x00, 0x97, 0x73, 0x3b, 0xae, + 0x00, 0x97, 0x74, 0x06, 0xfa, 0x00, 0x97, 0x76, + 0x4e, 0x04, 0x00, 0x97, 0x77, 0x59, 0x44, 0x00, + 0x97, 0x78, 0x59, 0x45, 0x00, 0x97, 0x79, 0x1b, + 0xf1, 0x00, 0x97, 0x7a, 0x1b, 0xf5, 0x00, 0x97, + 0x7b, 0x59, 0x46, 0x00, 0x97, 0x7c, 0x1b, 0xf3, + 0x00, 0x97, 0x7d, 0x4e, 0x05, 0x00, 0x97, 0x7f, + 0x4e, 0x06, 0x00, 0x97, 0x80, 0x59, 0x47, 0x00, + 0x97, 0x81, 0x1b, 0xf4, 0x00, 0x97, 0x84, 0x05, + 0xd1, 0x00, 0x97, 0x85, 0x1b, 0xf2, 0x00, 0x97, + 0x86, 0x1b, 0xf6, 0x00, 0x97, 0x89, 0x59, 0x48, + 0x00, 0x97, 0x8b, 0x1b, 0xf7, 0x00, 0x97, 0x8d, + 0x04, 0x8c, 0x00, 0x97, 0x8f, 0x1b, 0xf8, 0x00, + 0x97, 0x90, 0x1b, 0xf9, 0x00, 0x97, 0x95, 0x43, + 0x24, 0x00, 0x97, 0x96, 0x49, 0xe7, 0x00, 0x97, + 0x97, 0x59, 0x49, 0x00, 0x97, 0x98, 0x09, 0xcc, + 0x00, 0x97, 0x99, 0x4e, 0x07, 0x00, 0x97, 0x9a, + 0x3b, 0xaf, 0x00, 0x97, 0x9c, 0x1b, 0xfa, 0x00, + 0x97, 0x9e, 0x49, 0xe8, 0x00, 0x97, 0x9f, 0x4e, + 0x08, 0x00, 0x97, 0xa0, 0x06, 0x61, 0x00, 0x97, + 0xa2, 0x3b, 0xb0, 0x00, 0x97, 0xa3, 0x1b, 0xfd, + 0x00, 0x97, 0xa6, 0x1b, 0xfc, 0x00, 0x97, 0xa8, + 0x1b, 0xfb, 0x00, 0x97, 0xab, 0x1a, 0x34, 0x00, + 0x97, 0xac, 0x4e, 0x09, 0x00, 0x97, 0xad, 0x0e, + 0x2c, 0x00, 0x97, 0xae, 0x43, 0x25, 0x00, 0x97, + 0xb1, 0x49, 0xe9, 0x00, 0x97, 0xb2, 0x49, 0xea, + 0x00, 0x97, 0xb3, 0x1b, 0xfe, 0x00, 0x97, 0xb4, + 0x1b, 0xff, 0x00, 0x97, 0xb5, 0x3b, 0xb1, 0x00, + 0x97, 0xb6, 0x3b, 0xb2, 0x00, 0x97, 0xb8, 0x59, + 0x4a, 0x00, 0x97, 0xb9, 0x4e, 0x0a, 0x00, 0x97, + 0xba, 0x43, 0x26, 0x00, 0x97, 0xbc, 0x59, 0x4b, + 0x00, 0x97, 0xbe, 0x49, 0xeb, 0x00, 0x97, 0xbf, + 0x59, 0x4c, 0x00, 0x97, 0xc1, 0x43, 0x27, 0x00, + 0x97, 0xc3, 0x1c, 0x00, 0x00, 0x97, 0xc4, 0x59, + 0x4d, 0x00, 0x97, 0xc5, 0x59, 0x4e, 0x00, 0x97, + 0xc6, 0x1c, 0x01, 0x00, 0x97, 0xc7, 0x59, 0x4f, + 0x00, 0x97, 0xc8, 0x1c, 0x02, 0x00, 0x97, 0xc9, + 0x43, 0x28, 0x00, 0x97, 0xca, 0x59, 0x50, 0x00, + 0x97, 0xcb, 0x1c, 0x03, 0x00, 0x97, 0xcc, 0x49, + 0xec, 0x00, 0x97, 0xcd, 0x4e, 0x0b, 0x00, 0x97, + 0xce, 0x59, 0x51, 0x00, 0x97, 0xd0, 0x59, 0x52, + 0x00, 0x97, 0xd1, 0x49, 0xed, 0x00, 0x97, 0xd3, + 0x06, 0x16, 0x00, 0x97, 0xd4, 0x49, 0xee, 0x00, + 0x97, 0xd7, 0x59, 0x53, 0x00, 0x97, 0xd8, 0x49, + 0xef, 0x00, 0x97, 0xd9, 0x3b, 0xb3, 0x00, 0x97, + 0xdb, 0x43, 0x29, 0x00, 0x97, 0xdc, 0x1c, 0x04, + 0x00, 0x97, 0xdd, 0x59, 0x54, 0x00, 0x97, 0xde, + 0x3b, 0xb4, 0x00, 0x97, 0xe0, 0x4e, 0x0c, 0x00, + 0x97, 0xe1, 0x49, 0xf0, 0x00, 0x97, 0xe4, 0x59, + 0x55, 0x00, 0x97, 0xed, 0x1c, 0x05, 0x00, 0x97, + 0xee, 0x0c, 0xd9, 0x00, 0x97, 0xef, 0x4e, 0x0d, + 0x00, 0x97, 0xf1, 0x49, 0xf1, 0x00, 0x97, 0xf2, + 0x1c, 0x07, 0x00, 0x97, 0xf3, 0x05, 0x3b, 0x00, + 0x97, 0xf4, 0x3b, 0xb5, 0x00, 0x97, 0xf5, 0x1c, + 0x0a, 0x00, 0x97, 0xf6, 0x1c, 0x09, 0x00, 0x97, + 0xf7, 0x59, 0x56, 0x00, 0x97, 0xf8, 0x59, 0x57, + 0x00, 0x97, 0xfa, 0x59, 0x58, 0x00, 0x97, 0xfb, + 0x04, 0xc6, 0x00, 0x97, 0xff, 0x06, 0xb9, 0x00, + 0x98, 0x01, 0x0e, 0x17, 0x00, 0x98, 0x02, 0x0b, + 0xd6, 0x00, 0x98, 0x03, 0x08, 0x12, 0x00, 0x98, + 0x04, 0x49, 0xf2, 0x00, 0x98, 0x05, 0x07, 0xf2, + 0x00, 0x98, 0x06, 0x09, 0x71, 0x00, 0x98, 0x07, + 0x4e, 0x0e, 0x00, 0x98, 0x08, 0x0a, 0x22, 0x00, + 0x98, 0x0a, 0x3b, 0xb6, 0x00, 0x98, 0x0c, 0x1c, + 0x0c, 0x00, 0x98, 0x0d, 0x49, 0xf3, 0x00, 0x98, + 0x0e, 0x3b, 0xb7, 0x00, 0x98, 0x0f, 0x1c, 0x0b, + 0x00, 0x98, 0x10, 0x0f, 0x2c, 0x00, 0x98, 0x11, + 0x06, 0x24, 0x00, 0x98, 0x12, 0x0d, 0x66, 0x00, + 0x98, 0x13, 0x0c, 0xb4, 0x00, 0x98, 0x14, 0x49, + 0xf4, 0x00, 0x98, 0x16, 0x49, 0xf5, 0x00, 0x98, + 0x17, 0x0a, 0x42, 0x00, 0x98, 0x18, 0x0f, 0x96, + 0x00, 0x98, 0x19, 0x59, 0x59, 0x00, 0x98, 0x1a, + 0x07, 0x31, 0x00, 0x98, 0x1c, 0x59, 0x5a, 0x00, + 0x98, 0x1e, 0x3b, 0xb8, 0x00, 0x98, 0x20, 0x59, + 0x5b, 0x00, 0x98, 0x21, 0x1c, 0x0f, 0x00, 0x98, + 0x23, 0x3b, 0xb9, 0x00, 0x98, 0x24, 0x1c, 0x0e, + 0x00, 0x98, 0x25, 0x49, 0xfa, 0x00, 0x98, 0x26, + 0x4e, 0x0f, 0x00, 0x98, 0x2b, 0x3b, 0xba, 0x00, + 0x98, 0x2c, 0x0e, 0x79, 0x00, 0x98, 0x2d, 0x0c, + 0x84, 0x00, 0x98, 0x2e, 0x4e, 0x10, 0x00, 0x98, + 0x2f, 0x59, 0x5c, 0x00, 0x98, 0x30, 0x1e, 0x73, + 0x00, 0x98, 0x32, 0x49, 0xf8, 0x00, 0x98, 0x33, + 0x49, 0xf9, 0x00, 0x98, 0x34, 0x04, 0xf2, 0x00, + 0x98, 0x35, 0x59, 0x5d, 0x00, 0x98, 0x37, 0x1c, + 0x10, 0x00, 0x98, 0x38, 0x1c, 0x0d, 0x00, 0x98, + 0x39, 0x37, 0xb3, 0x00, 0x98, 0x3b, 0x1e, 0x6c, + 0x00, 0x98, 0x3c, 0x0f, 0x54, 0x00, 0x98, 0x3d, + 0x1c, 0x11, 0x00, 0x98, 0x3e, 0x3b, 0xbb, 0x00, + 0x98, 0x44, 0x59, 0x5e, 0x00, 0x98, 0x46, 0x1c, + 0x12, 0x00, 0x98, 0x47, 0x49, 0xfb, 0x00, 0x98, + 0x4a, 0x59, 0x5f, 0x00, 0x98, 0x4b, 0x1c, 0x14, + 0x00, 0x98, 0x4c, 0x0b, 0x4a, 0x00, 0x98, 0x4d, + 0x05, 0xb9, 0x00, 0x98, 0x4e, 0x05, 0xba, 0x00, + 0x98, 0x4f, 0x1c, 0x13, 0x00, 0x98, 0x51, 0x59, + 0x60, 0x00, 0x98, 0x52, 0x3b, 0xbc, 0x00, 0x98, + 0x53, 0x3b, 0xbd, 0x00, 0x98, 0x54, 0x06, 0x25, + 0x00, 0x98, 0x55, 0x07, 0x66, 0x00, 0x98, 0x56, + 0x43, 0x2a, 0x00, 0x98, 0x57, 0x21, 0xf9, 0x00, + 0x98, 0x58, 0x06, 0x26, 0x00, 0x98, 0x59, 0x3b, + 0xbe, 0x00, 0x98, 0x5a, 0x1e, 0x48, 0x00, 0x98, + 0x5b, 0x0c, 0x39, 0x00, 0x98, 0x5e, 0x34, 0x54, + 0x00, 0x98, 0x62, 0x4e, 0x11, 0x00, 0x98, 0x63, + 0x4e, 0x12, 0x00, 0x98, 0x65, 0x21, 0xfa, 0x00, + 0x98, 0x66, 0x49, 0xfc, 0x00, 0x98, 0x67, 0x07, + 0x90, 0x00, 0x98, 0x6a, 0x59, 0x61, 0x00, 0x98, + 0x6b, 0x1c, 0x15, 0x00, 0x98, 0x6c, 0x3b, 0xbf, + 0x00, 0x98, 0x6f, 0x1c, 0x16, 0x00, 0x98, 0x70, + 0x1c, 0x17, 0x00, 0x98, 0x71, 0x1c, 0x18, 0x00, + 0x98, 0x73, 0x1c, 0x1a, 0x00, 0x98, 0x74, 0x1c, + 0x19, 0x00, 0x98, 0xa8, 0x0d, 0xe9, 0x00, 0x98, + 0xaa, 0x1c, 0x1b, 0x00, 0x98, 0xab, 0x49, 0xfd, + 0x00, 0x98, 0xad, 0x49, 0xfe, 0x00, 0x98, 0xae, + 0x59, 0x62, 0x00, 0x98, 0xaf, 0x1c, 0x1c, 0x00, + 0x98, 0xb0, 0x49, 0xff, 0x00, 0x98, 0xb1, 0x1c, + 0x1d, 0x00, 0x98, 0xb4, 0x4e, 0x13, 0x00, 0x98, + 0xb6, 0x1c, 0x1e, 0x00, 0x98, 0xb7, 0x4a, 0x01, + 0x00, 0x98, 0xb8, 0x3b, 0xc0, 0x00, 0x98, 0xba, + 0x3b, 0xc1, 0x00, 0x98, 0xbb, 0x4a, 0x02, 0x00, + 0x98, 0xbc, 0x4a, 0x03, 0x00, 0x98, 0xbf, 0x3b, + 0xc2, 0x00, 0x98, 0xc2, 0x4a, 0x04, 0x00, 0x98, + 0xc3, 0x1c, 0x20, 0x00, 0x98, 0xc4, 0x1c, 0x1f, + 0x00, 0x98, 0xc5, 0x4e, 0x14, 0x00, 0x98, 0xc6, + 0x1c, 0x21, 0x00, 0x98, 0xc7, 0x4a, 0x05, 0x00, + 0x98, 0xc8, 0x3b, 0xc3, 0x00, 0x98, 0xcb, 0x4a, + 0x06, 0x00, 0x98, 0xcc, 0x59, 0x63, 0x00, 0x98, + 0xdb, 0x0d, 0x88, 0x00, 0x98, 0xdc, 0x18, 0x39, + 0x00, 0x98, 0xdf, 0x09, 0xef, 0x00, 0x98, 0xe0, + 0x36, 0x18, 0x00, 0x98, 0xe1, 0x4a, 0x07, 0x00, + 0x98, 0xe2, 0x06, 0x4c, 0x00, 0x98, 0xe3, 0x4a, + 0x08, 0x00, 0x98, 0xe5, 0x3b, 0xc4, 0x00, 0x98, + 0xe6, 0x59, 0x64, 0x00, 0x98, 0xe7, 0x43, 0x2b, + 0x00, 0x98, 0xe9, 0x1c, 0x22, 0x00, 0x98, 0xea, + 0x4a, 0x09, 0x00, 0x98, 0xeb, 0x1c, 0x23, 0x00, + 0x98, 0xed, 0x10, 0xc1, 0x00, 0x98, 0xee, 0x14, + 0xda, 0x00, 0x98, 0xef, 0x21, 0xfb, 0x00, 0x98, + 0xf0, 0x4a, 0x0a, 0x00, 0x98, 0xf1, 0x4a, 0x0b, + 0x00, 0x98, 0xf2, 0x04, 0xbf, 0x00, 0x98, 0xf3, + 0x4a, 0x0c, 0x00, 0x98, 0xf4, 0x04, 0x7f, 0x00, + 0x98, 0xf6, 0x59, 0x65, 0x00, 0x98, 0xfc, 0x08, + 0xc2, 0x00, 0x98, 0xfd, 0x0e, 0x5e, 0x00, 0x98, + 0xfe, 0x09, 0xe6, 0x00, 0x99, 0x02, 0x4e, 0x15, + 0x00, 0x99, 0x03, 0x1c, 0x24, 0x00, 0x99, 0x05, + 0x0e, 0xeb, 0x00, 0x99, 0x07, 0x59, 0x66, 0x00, + 0x99, 0x08, 0x4a, 0x0d, 0x00, 0x99, 0x09, 0x1c, + 0x25, 0x00, 0x99, 0x0a, 0x0f, 0x46, 0x00, 0x99, + 0x0c, 0x04, 0xe4, 0x00, 0x99, 0x10, 0x08, 0x8f, + 0x00, 0x99, 0x11, 0x4e, 0x16, 0x00, 0x99, 0x12, + 0x1c, 0x26, 0x00, 0x99, 0x13, 0x05, 0x6e, 0x00, + 0x99, 0x14, 0x1c, 0x27, 0x00, 0x99, 0x15, 0x4e, + 0x17, 0x00, 0x99, 0x16, 0x4a, 0x10, 0x00, 0x99, + 0x17, 0x4a, 0x11, 0x00, 0x99, 0x18, 0x1c, 0x28, + 0x00, 0x99, 0x1a, 0x4a, 0x13, 0x00, 0x99, 0x1b, + 0x4a, 0x14, 0x00, 0x99, 0x1c, 0x4a, 0x15, 0x00, + 0x99, 0x1d, 0x1c, 0x2a, 0x00, 0x99, 0x1e, 0x1c, + 0x2b, 0x00, 0x99, 0x1f, 0x59, 0x67, 0x00, 0x99, + 0x20, 0x1c, 0x2d, 0x00, 0x99, 0x21, 0x1c, 0x29, + 0x00, 0x99, 0x22, 0x59, 0x68, 0x00, 0x99, 0x24, + 0x1c, 0x2c, 0x00, 0x99, 0x26, 0x59, 0x69, 0x00, + 0x99, 0x27, 0x21, 0xfd, 0x00, 0x99, 0x28, 0x06, + 0x17, 0x00, 0x99, 0x2b, 0x59, 0x6a, 0x00, 0x99, + 0x2c, 0x1c, 0x2e, 0x00, 0x99, 0x2e, 0x1c, 0x2f, + 0x00, 0x99, 0x31, 0x4a, 0x17, 0x00, 0x99, 0x32, + 0x3b, 0xc5, 0x00, 0x99, 0x33, 0x3b, 0xc6, 0x00, + 0x99, 0x34, 0x59, 0x6b, 0x00, 0x99, 0x35, 0x4e, + 0x18, 0x00, 0x99, 0x39, 0x59, 0x6c, 0x00, 0x99, + 0x3a, 0x4a, 0x18, 0x00, 0x99, 0x3b, 0x4a, 0x19, + 0x00, 0x99, 0x3c, 0x4a, 0x1a, 0x00, 0x99, 0x3d, + 0x1c, 0x30, 0x00, 0x99, 0x3e, 0x1c, 0x31, 0x00, + 0x99, 0x40, 0x3b, 0xc7, 0x00, 0x99, 0x41, 0x4a, + 0x1b, 0x00, 0x99, 0x42, 0x1c, 0x32, 0x00, 0x99, + 0x45, 0x1c, 0x34, 0x00, 0x99, 0x46, 0x4a, 0x1c, + 0x00, 0x99, 0x47, 0x59, 0x6d, 0x00, 0x99, 0x48, + 0x4e, 0x19, 0x00, 0x99, 0x49, 0x1c, 0x33, 0x00, + 0x99, 0x4b, 0x1c, 0x36, 0x00, 0x99, 0x4c, 0x1c, + 0x39, 0x00, 0x99, 0x4d, 0x3b, 0xc8, 0x00, 0x99, + 0x4e, 0x4a, 0x1d, 0x00, 0x99, 0x50, 0x1c, 0x35, + 0x00, 0x99, 0x51, 0x1c, 0x37, 0x00, 0x99, 0x52, + 0x1c, 0x38, 0x00, 0x99, 0x54, 0x4e, 0x1a, 0x00, + 0x99, 0x55, 0x1c, 0x3a, 0x00, 0x99, 0x57, 0x06, + 0xba, 0x00, 0x99, 0x58, 0x43, 0x2c, 0x00, 0x99, + 0x59, 0x59, 0x6e, 0x00, 0x99, 0x5b, 0x59, 0x6f, + 0x00, 0x99, 0x5c, 0x3b, 0xc9, 0x00, 0x99, 0x5e, + 0x4e, 0x1b, 0x00, 0x99, 0x5f, 0x3b, 0xca, 0x00, + 0x99, 0x60, 0x4a, 0x1e, 0x00, 0x99, 0x96, 0x09, + 0x1f, 0x00, 0x99, 0x97, 0x1c, 0x3b, 0x00, 0x99, + 0x98, 0x1c, 0x3c, 0x00, 0x99, 0x99, 0x07, 0xf3, + 0x00, 0x99, 0x9b, 0x59, 0x70, 0x00, 0x99, 0x9d, + 0x59, 0x71, 0x00, 0x99, 0x9e, 0x21, 0xff, 0x00, + 0x99, 0x9f, 0x59, 0x72, 0x00, 0x99, 0xa3, 0x4a, + 0x1f, 0x00, 0x99, 0xa5, 0x1c, 0x3d, 0x00, 0x99, + 0xa6, 0x4a, 0x20, 0x00, 0x99, 0xa8, 0x05, 0x9c, + 0x00, 0x99, 0xac, 0x0d, 0x05, 0x00, 0x99, 0xad, + 0x1c, 0x3e, 0x00, 0x99, 0xae, 0x1c, 0x3f, 0x00, + 0x99, 0xb0, 0x59, 0x73, 0x00, 0x99, 0xb1, 0x3b, + 0xcb, 0x00, 0x99, 0xb2, 0x59, 0x74, 0x00, 0x99, + 0xb3, 0x0b, 0x98, 0x00, 0x99, 0xb4, 0x0c, 0xc3, + 0x00, 0x99, 0xb5, 0x59, 0x75, 0x00, 0x99, 0xb9, + 0x3b, 0xcc, 0x00, 0x99, 0xba, 0x3b, 0xcd, 0x00, + 0x99, 0xbc, 0x1c, 0x40, 0x00, 0x99, 0xbd, 0x4a, + 0x21, 0x00, 0x99, 0xbf, 0x4a, 0x22, 0x00, 0x99, + 0xc1, 0x0d, 0x33, 0x00, 0x99, 0xc3, 0x4a, 0x23, + 0x00, 0x99, 0xc4, 0x0b, 0x2c, 0x00, 0x99, 0xc5, + 0x04, 0xfa, 0x00, 0x99, 0xc6, 0x06, 0xe6, 0x00, + 0x99, 0xc8, 0x06, 0xe7, 0x00, 0x99, 0xc9, 0x3b, + 0xce, 0x00, 0x99, 0xd0, 0x0b, 0xb1, 0x00, 0x99, + 0xd1, 0x1c, 0x45, 0x00, 0x99, 0xd2, 0x06, 0xe8, + 0x00, 0x99, 0xd3, 0x59, 0x76, 0x00, 0x99, 0xd4, + 0x4a, 0x24, 0x00, 0x99, 0xd5, 0x05, 0x6f, 0x00, + 0x99, 0xd8, 0x1c, 0x44, 0x00, 0x99, 0xd9, 0x4a, + 0x25, 0x00, 0x99, 0xda, 0x59, 0x77, 0x00, 0x99, + 0xdb, 0x1c, 0x42, 0x00, 0x99, 0xdc, 0x59, 0x78, + 0x00, 0x99, 0xdd, 0x1c, 0x43, 0x00, 0x99, 0xde, + 0x4a, 0x26, 0x00, 0x99, 0xdf, 0x1c, 0x41, 0x00, + 0x99, 0xe1, 0x4e, 0x1c, 0x00, 0x99, 0xe2, 0x1c, + 0x4f, 0x00, 0x99, 0xe7, 0x59, 0x79, 0x00, 0x99, + 0xea, 0x59, 0x7a, 0x00, 0x99, 0xeb, 0x59, 0x7b, + 0x00, 0x99, 0xec, 0x59, 0x7c, 0x00, 0x99, 0xed, + 0x1c, 0x46, 0x00, 0x99, 0xee, 0x1c, 0x47, 0x00, + 0x99, 0xf0, 0x4a, 0x28, 0x00, 0x99, 0xf1, 0x1c, + 0x48, 0x00, 0x99, 0xf2, 0x1c, 0x49, 0x00, 0x99, + 0xf4, 0x59, 0x7d, 0x00, 0x99, 0xf5, 0x59, 0x7e, + 0x00, 0x99, 0xf8, 0x1c, 0x4b, 0x00, 0x99, 0xf9, + 0x4a, 0x29, 0x00, 0x99, 0xfb, 0x1c, 0x4a, 0x00, + 0x99, 0xfc, 0x4a, 0x2a, 0x00, 0x99, 0xfd, 0x59, + 0x7f, 0x00, 0x99, 0xfe, 0x59, 0x80, 0x00, 0x99, + 0xff, 0x09, 0x63, 0x00, 0x9a, 0x01, 0x1c, 0x4c, + 0x00, 0x9a, 0x02, 0x3b, 0xcf, 0x00, 0x9a, 0x03, + 0x43, 0x2d, 0x00, 0x9a, 0x04, 0x59, 0x81, 0x00, + 0x9a, 0x05, 0x1c, 0x4e, 0x00, 0x9a, 0x08, 0x37, + 0xba, 0x00, 0x9a, 0x0a, 0x4a, 0x2b, 0x00, 0x9a, + 0x0b, 0x59, 0x82, 0x00, 0x9a, 0x0c, 0x4e, 0x1d, + 0x00, 0x9a, 0x0e, 0x06, 0x4d, 0x00, 0x9a, 0x0f, + 0x1c, 0x4d, 0x00, 0x9a, 0x10, 0x4e, 0x1e, 0x00, + 0x9a, 0x11, 0x4a, 0x2c, 0x00, 0x9a, 0x12, 0x0a, + 0xfd, 0x00, 0x9a, 0x13, 0x07, 0x67, 0x00, 0x9a, + 0x16, 0x3b, 0xd0, 0x00, 0x9a, 0x19, 0x1c, 0x50, + 0x00, 0x9a, 0x1a, 0x4a, 0x2d, 0x00, 0x9a, 0x1e, + 0x59, 0x83, 0x00, 0x9a, 0x20, 0x4a, 0x2e, 0x00, + 0x9a, 0x22, 0x59, 0x84, 0x00, 0x9a, 0x23, 0x4e, + 0x1f, 0x00, 0x9a, 0x24, 0x3b, 0xd1, 0x00, 0x9a, + 0x27, 0x3b, 0xd2, 0x00, 0x9a, 0x28, 0x0b, 0x2d, + 0x00, 0x9a, 0x2b, 0x1c, 0x51, 0x00, 0x9a, 0x2d, + 0x3b, 0xd3, 0x00, 0x9a, 0x2e, 0x3b, 0xd4, 0x00, + 0x9a, 0x30, 0x0c, 0x85, 0x00, 0x9a, 0x31, 0x4a, + 0x2f, 0x00, 0x9a, 0x33, 0x59, 0x85, 0x00, 0x9a, + 0x35, 0x59, 0x86, 0x00, 0x9a, 0x36, 0x3b, 0xd5, + 0x00, 0x9a, 0x37, 0x1c, 0x52, 0x00, 0x9a, 0x38, + 0x3b, 0xd6, 0x00, 0x9a, 0x3e, 0x1c, 0x57, 0x00, + 0x9a, 0x40, 0x1c, 0x55, 0x00, 0x9a, 0x41, 0x4e, + 0x20, 0x00, 0x9a, 0x42, 0x1c, 0x54, 0x00, 0x9a, + 0x43, 0x1c, 0x56, 0x00, 0x9a, 0x44, 0x4a, 0x30, + 0x00, 0x9a, 0x45, 0x1c, 0x53, 0x00, 0x9a, 0x47, + 0x59, 0x87, 0x00, 0x9a, 0x4a, 0x3b, 0xd7, 0x00, + 0x9a, 0x4b, 0x59, 0x89, 0x00, 0x9a, 0x4c, 0x4a, + 0x31, 0x00, 0x9a, 0x4d, 0x1c, 0x59, 0x00, 0x9a, + 0x4e, 0x22, 0x00, 0x00, 0x9a, 0x51, 0x4e, 0x21, + 0x00, 0x9a, 0x52, 0x1e, 0x2f, 0x00, 0x9a, 0x54, + 0x59, 0x8a, 0x00, 0x9a, 0x55, 0x1c, 0x58, 0x00, + 0x9a, 0x56, 0x3b, 0xd8, 0x00, 0x9a, 0x57, 0x1c, + 0x5b, 0x00, 0x9a, 0x58, 0x4a, 0x32, 0x00, 0x9a, + 0x5a, 0x06, 0xbb, 0x00, 0x9a, 0x5b, 0x1c, 0x5a, + 0x00, 0x9a, 0x5d, 0x59, 0x8b, 0x00, 0x9a, 0x5f, + 0x1c, 0x5c, 0x00, 0x9a, 0x62, 0x1c, 0x5d, 0x00, + 0x9a, 0x64, 0x1c, 0x5f, 0x00, 0x9a, 0x65, 0x1c, + 0x5e, 0x00, 0x9a, 0x69, 0x1c, 0x60, 0x00, 0x9a, + 0x6a, 0x1c, 0x62, 0x00, 0x9a, 0x6b, 0x1c, 0x61, + 0x00, 0x9a, 0xa8, 0x08, 0x0e, 0x00, 0x9a, 0xaa, + 0x59, 0x8c, 0x00, 0x9a, 0xac, 0x59, 0x8d, 0x00, + 0x9a, 0xad, 0x1c, 0x63, 0x00, 0x9a, 0xae, 0x59, + 0x8e, 0x00, 0x9a, 0xaf, 0x4a, 0x34, 0x00, 0x9a, + 0xb0, 0x1c, 0x64, 0x00, 0x9a, 0xb2, 0x59, 0x8f, + 0x00, 0x9a, 0xb4, 0x59, 0x90, 0x00, 0x9a, 0xb5, + 0x3b, 0xd9, 0x00, 0x9a, 0xb6, 0x3b, 0xda, 0x00, + 0x9a, 0xb7, 0x4a, 0x36, 0x00, 0x9a, 0xb8, 0x05, + 0x9a, 0x00, 0x9a, 0xb9, 0x4a, 0x38, 0x00, 0x9a, + 0xbb, 0x59, 0x91, 0x00, 0x9a, 0xbc, 0x1c, 0x65, + 0x00, 0x9a, 0xbd, 0x4e, 0x22, 0x00, 0x9a, 0xbe, + 0x4e, 0x23, 0x00, 0x9a, 0xbf, 0x59, 0x92, 0x00, + 0x9a, 0xc0, 0x1c, 0x66, 0x00, 0x9a, 0xc1, 0x43, + 0x2e, 0x00, 0x9a, 0xc3, 0x43, 0x2f, 0x00, 0x9a, + 0xc4, 0x0a, 0x37, 0x00, 0x9a, 0xc6, 0x4a, 0x3a, + 0x00, 0x9a, 0xc8, 0x59, 0x93, 0x00, 0x9a, 0xce, + 0x43, 0x30, 0x00, 0x9a, 0xcf, 0x1c, 0x67, 0x00, + 0x9a, 0xd0, 0x4a, 0x3b, 0x00, 0x9a, 0xd1, 0x1c, + 0x68, 0x00, 0x9a, 0xd2, 0x4a, 0x3c, 0x00, 0x9a, + 0xd3, 0x1c, 0x69, 0x00, 0x9a, 0xd4, 0x1c, 0x6a, + 0x00, 0x9a, 0xd5, 0x4a, 0x3d, 0x00, 0x9a, 0xd6, + 0x43, 0x31, 0x00, 0x9a, 0xd7, 0x59, 0x94, 0x00, + 0x9a, 0xd8, 0x07, 0xf4, 0x00, 0x9a, 0xd9, 0x22, + 0x01, 0x00, 0x9a, 0xdb, 0x59, 0x95, 0x00, 0x9a, + 0xdc, 0x22, 0x02, 0x00, 0x9a, 0xde, 0x1c, 0x6b, + 0x00, 0x9a, 0xdf, 0x1c, 0x6c, 0x00, 0x9a, 0xe0, + 0x4a, 0x3e, 0x00, 0x9a, 0xe2, 0x1c, 0x6d, 0x00, + 0x9a, 0xe3, 0x1c, 0x6e, 0x00, 0x9a, 0xe4, 0x59, + 0x96, 0x00, 0x9a, 0xe5, 0x4a, 0x3f, 0x00, 0x9a, + 0xe6, 0x1c, 0x6f, 0x00, 0x9a, 0xe7, 0x59, 0x97, + 0x00, 0x9a, 0xe9, 0x4a, 0x40, 0x00, 0x9a, 0xea, + 0x0d, 0x45, 0x00, 0x9a, 0xeb, 0x1c, 0x71, 0x00, + 0x9a, 0xec, 0x59, 0x98, 0x00, 0x9a, 0xed, 0x0d, + 0x98, 0x00, 0x9a, 0xee, 0x1c, 0x72, 0x00, 0x9a, + 0xef, 0x1c, 0x70, 0x00, 0x9a, 0xf1, 0x1c, 0x74, + 0x00, 0x9a, 0xf2, 0x59, 0x99, 0x00, 0x9a, 0xf3, + 0x59, 0x9a, 0x00, 0x9a, 0xf4, 0x1c, 0x73, 0x00, + 0x9a, 0xf5, 0x59, 0x9b, 0x00, 0x9a, 0xf7, 0x1c, + 0x75, 0x00, 0x9a, 0xf9, 0x3b, 0xdb, 0x00, 0x9a, + 0xfa, 0x59, 0x9c, 0x00, 0x9a, 0xfb, 0x1c, 0x76, + 0x00, 0x9a, 0xfd, 0x59, 0x9d, 0x00, 0x9a, 0xff, + 0x59, 0x9e, 0x00, 0x9b, 0x00, 0x59, 0x9f, 0x00, + 0x9b, 0x01, 0x4e, 0x24, 0x00, 0x9b, 0x02, 0x43, + 0x32, 0x00, 0x9b, 0x03, 0x3b, 0xdc, 0x00, 0x9b, + 0x04, 0x59, 0xa0, 0x00, 0x9b, 0x05, 0x59, 0xa1, + 0x00, 0x9b, 0x06, 0x1c, 0x77, 0x00, 0x9b, 0x08, + 0x43, 0x33, 0x00, 0x9b, 0x09, 0x4e, 0x25, 0x00, + 0x9b, 0x0b, 0x4e, 0x26, 0x00, 0x9b, 0x0c, 0x4a, + 0x41, 0x00, 0x9b, 0x0d, 0x4e, 0x27, 0x00, 0x9b, + 0x0e, 0x4e, 0x28, 0x00, 0x9b, 0x10, 0x4a, 0x42, + 0x00, 0x9b, 0x12, 0x4a, 0x43, 0x00, 0x9b, 0x16, + 0x4a, 0x44, 0x00, 0x9b, 0x18, 0x1c, 0x78, 0x00, + 0x9b, 0x19, 0x4e, 0x29, 0x00, 0x9b, 0x1a, 0x1c, + 0x79, 0x00, 0x9b, 0x1b, 0x59, 0xa2, 0x00, 0x9b, + 0x1c, 0x4a, 0x45, 0x00, 0x9b, 0x1d, 0x4f, 0x49, + 0x00, 0x9b, 0x1f, 0x1c, 0x7a, 0x00, 0x9b, 0x20, + 0x3b, 0xdd, 0x00, 0x9b, 0x22, 0x1c, 0x7b, 0x00, + 0x9b, 0x23, 0x1c, 0x7c, 0x00, 0x9b, 0x25, 0x1c, + 0x7d, 0x00, 0x9b, 0x26, 0x59, 0xa3, 0x00, 0x9b, + 0x27, 0x1c, 0x7e, 0x00, 0x9b, 0x28, 0x1c, 0x7f, + 0x00, 0x9b, 0x29, 0x1c, 0x80, 0x00, 0x9b, 0x2a, + 0x1c, 0x81, 0x00, 0x9b, 0x2b, 0x4a, 0x46, 0x00, + 0x9b, 0x2c, 0x4f, 0x4a, 0x00, 0x9b, 0x2d, 0x43, + 0x35, 0x00, 0x9b, 0x2e, 0x1c, 0x82, 0x00, 0x9b, + 0x2f, 0x1c, 0x83, 0x00, 0x9b, 0x31, 0x14, 0xd4, + 0x00, 0x9b, 0x32, 0x1c, 0x84, 0x00, 0x9b, 0x33, + 0x3b, 0xde, 0x00, 0x9b, 0x34, 0x3b, 0xdf, 0x00, + 0x9b, 0x35, 0x4e, 0x2a, 0x00, 0x9b, 0x37, 0x59, + 0xa5, 0x00, 0x9b, 0x39, 0x59, 0xa6, 0x00, 0x9b, + 0x3a, 0x59, 0xa7, 0x00, 0x9b, 0x3b, 0x17, 0xa9, + 0x00, 0x9b, 0x3c, 0x06, 0x4e, 0x00, 0x9b, 0x3d, + 0x4a, 0x47, 0x00, 0x9b, 0x41, 0x05, 0x7f, 0x00, + 0x9b, 0x42, 0x08, 0x22, 0x00, 0x9b, 0x43, 0x1c, + 0x86, 0x00, 0x9b, 0x44, 0x1c, 0x85, 0x00, 0x9b, + 0x45, 0x0e, 0xb1, 0x00, 0x9b, 0x48, 0x4e, 0x2b, + 0x00, 0x9b, 0x4b, 0x4a, 0x49, 0x00, 0x9b, 0x4c, + 0x59, 0xa8, 0x00, 0x9b, 0x4d, 0x1c, 0x88, 0x00, + 0x9b, 0x4e, 0x1c, 0x89, 0x00, 0x9b, 0x4f, 0x1c, + 0x87, 0x00, 0x9b, 0x51, 0x1c, 0x8a, 0x00, 0x9b, + 0x54, 0x0e, 0x90, 0x00, 0x9b, 0x55, 0x4e, 0x2c, + 0x00, 0x9b, 0x56, 0x59, 0xa9, 0x00, 0x9b, 0x57, + 0x59, 0xaa, 0x00, 0x9b, 0x58, 0x1c, 0x8b, 0x00, + 0x9b, 0x5a, 0x06, 0x95, 0x00, 0x9b, 0x5b, 0x59, + 0xab, 0x00, 0x9b, 0x5e, 0x43, 0x36, 0x00, 0x9b, + 0x61, 0x59, 0xac, 0x00, 0x9b, 0x63, 0x4a, 0x4a, + 0x00, 0x9b, 0x65, 0x4a, 0x4b, 0x00, 0x9b, 0x66, + 0x43, 0x37, 0x00, 0x9b, 0x68, 0x4e, 0x2d, 0x00, + 0x9b, 0x6a, 0x59, 0xad, 0x00, 0x9b, 0x6b, 0x4a, + 0x4c, 0x00, 0x9b, 0x6c, 0x4a, 0x4d, 0x00, 0x9b, + 0x6d, 0x59, 0xae, 0x00, 0x9b, 0x6e, 0x59, 0xaf, + 0x00, 0x9b, 0x6f, 0x0f, 0xcb, 0x00, 0x9b, 0x72, + 0x22, 0x04, 0x00, 0x9b, 0x73, 0x3b, 0xe0, 0x00, + 0x9b, 0x74, 0x1c, 0x8c, 0x00, 0x9b, 0x75, 0x22, + 0x03, 0x00, 0x9b, 0x76, 0x4a, 0x4e, 0x00, 0x9b, + 0x77, 0x4a, 0x4f, 0x00, 0x9b, 0x78, 0x59, 0xb0, + 0x00, 0x9b, 0x79, 0x3b, 0xe1, 0x00, 0x9b, 0x7f, + 0x59, 0xb1, 0x00, 0x9b, 0x80, 0x4e, 0x2e, 0x00, + 0x9b, 0x83, 0x1c, 0x8e, 0x00, 0x9b, 0x84, 0x43, + 0x38, 0x00, 0x9b, 0x85, 0x59, 0xb2, 0x00, 0x9b, + 0x86, 0x4e, 0x2f, 0x00, 0x9b, 0x87, 0x59, 0xb3, + 0x00, 0x9b, 0x89, 0x59, 0xb4, 0x00, 0x9b, 0x8a, + 0x43, 0x39, 0x00, 0x9b, 0x8b, 0x59, 0xb5, 0x00, + 0x9b, 0x8d, 0x59, 0xb6, 0x00, 0x9b, 0x8e, 0x04, + 0x82, 0x00, 0x9b, 0x8f, 0x22, 0x05, 0x00, 0x9b, + 0x90, 0x4e, 0x30, 0x00, 0x9b, 0x91, 0x1c, 0x8f, + 0x00, 0x9b, 0x92, 0x0d, 0xfb, 0x00, 0x9b, 0x93, + 0x1c, 0x8d, 0x00, 0x9b, 0x94, 0x59, 0xb7, 0x00, + 0x9b, 0x96, 0x1c, 0x90, 0x00, 0x9b, 0x97, 0x1c, + 0x91, 0x00, 0x9b, 0x9a, 0x59, 0xb8, 0x00, 0x9b, + 0x9d, 0x4e, 0x31, 0x00, 0x9b, 0x9e, 0x43, 0x3a, + 0x00, 0x9b, 0x9f, 0x1c, 0x92, 0x00, 0x9b, 0xa0, + 0x1c, 0x93, 0x00, 0x9b, 0xa6, 0x4a, 0x50, 0x00, + 0x9b, 0xa7, 0x3b, 0xe2, 0x00, 0x9b, 0xa8, 0x1c, + 0x94, 0x00, 0x9b, 0xa9, 0x59, 0xb9, 0x00, 0x9b, + 0xaa, 0x0e, 0x9c, 0x00, 0x9b, 0xab, 0x08, 0x7b, + 0x00, 0x9b, 0xac, 0x4a, 0x51, 0x00, 0x9b, 0xad, + 0x08, 0x6a, 0x00, 0x9b, 0xae, 0x0a, 0xb1, 0x00, + 0x9b, 0xb0, 0x4e, 0x32, 0x00, 0x9b, 0xb1, 0x22, + 0x06, 0x00, 0x9b, 0xb2, 0x4a, 0x53, 0x00, 0x9b, + 0xb4, 0x1c, 0x95, 0x00, 0x9b, 0xb7, 0x59, 0xba, + 0x00, 0x9b, 0xb8, 0x4a, 0x54, 0x00, 0x9b, 0xb9, + 0x1c, 0x98, 0x00, 0x9b, 0xbb, 0x22, 0x07, 0x00, + 0x9b, 0xbc, 0x59, 0xbb, 0x00, 0x9b, 0xbe, 0x4a, + 0x55, 0x00, 0x9b, 0xbf, 0x4e, 0x33, 0x00, 0x9b, + 0xc0, 0x1c, 0x96, 0x00, 0x9b, 0xc1, 0x3b, 0xe3, + 0x00, 0x9b, 0xc6, 0x1c, 0x99, 0x00, 0x9b, 0xc7, + 0x3b, 0xe4, 0x00, 0x9b, 0xc8, 0x4e, 0x34, 0x00, + 0x9b, 0xc9, 0x07, 0xa5, 0x00, 0x9b, 0xca, 0x1c, + 0x97, 0x00, 0x9b, 0xce, 0x43, 0x3b, 0x00, 0x9b, + 0xcf, 0x1c, 0x9a, 0x00, 0x9b, 0xd0, 0x59, 0xbc, + 0x00, 0x9b, 0xd1, 0x1c, 0x9b, 0x00, 0x9b, 0xd2, + 0x1c, 0x9c, 0x00, 0x9b, 0xd4, 0x1c, 0xa0, 0x00, + 0x9b, 0xd6, 0x08, 0x78, 0x00, 0x9b, 0xd7, 0x3b, + 0xe5, 0x00, 0x9b, 0xd8, 0x4a, 0x57, 0x00, 0x9b, + 0xdb, 0x0b, 0x44, 0x00, 0x9b, 0xdd, 0x4a, 0x58, + 0x00, 0x9b, 0xdf, 0x37, 0xbf, 0x00, 0x9b, 0xe1, + 0x1c, 0xa1, 0x00, 0x9b, 0xe2, 0x1c, 0x9e, 0x00, + 0x9b, 0xe3, 0x1c, 0x9d, 0x00, 0x9b, 0xe4, 0x1c, + 0x9f, 0x00, 0x9b, 0xe5, 0x43, 0x3c, 0x00, 0x9b, + 0xe7, 0x3b, 0xe6, 0x00, 0x9b, 0xe8, 0x07, 0x35, + 0x00, 0x9b, 0xea, 0x4a, 0x59, 0x00, 0x9b, 0xeb, + 0x3b, 0xe7, 0x00, 0x9b, 0xee, 0x4a, 0x5b, 0x00, + 0x9b, 0xef, 0x4a, 0x5a, 0x00, 0x9b, 0xf0, 0x1c, + 0xa5, 0x00, 0x9b, 0xf1, 0x1c, 0xa4, 0x00, 0x9b, + 0xf2, 0x1c, 0xa3, 0x00, 0x9b, 0xf3, 0x4a, 0x56, + 0x00, 0x9b, 0xf5, 0x04, 0x77, 0x00, 0x9b, 0xf7, + 0x3b, 0xe8, 0x00, 0x9b, 0xf8, 0x43, 0x3d, 0x00, + 0x9b, 0xf9, 0x59, 0xbd, 0x00, 0x9b, 0xfa, 0x3b, + 0xe9, 0x00, 0x9b, 0xfd, 0x3b, 0xea, 0x00, 0x9b, + 0xff, 0x4e, 0x35, 0x00, 0x9c, 0x00, 0x22, 0x08, + 0x00, 0x9c, 0x02, 0x4e, 0x36, 0x00, 0x9c, 0x04, + 0x1c, 0xaf, 0x00, 0x9c, 0x06, 0x1c, 0xab, 0x00, + 0x9c, 0x08, 0x1c, 0xac, 0x00, 0x9c, 0x09, 0x1c, + 0xa8, 0x00, 0x9c, 0x0a, 0x1c, 0xae, 0x00, 0x9c, + 0x0b, 0x3b, 0xeb, 0x00, 0x9c, 0x0c, 0x1c, 0xaa, + 0x00, 0x9c, 0x0d, 0x05, 0xc0, 0x00, 0x9c, 0x0f, + 0x59, 0xbe, 0x00, 0x9c, 0x10, 0x0f, 0xf2, 0x00, + 0x9c, 0x11, 0x59, 0xbf, 0x00, 0x9c, 0x12, 0x1c, + 0xad, 0x00, 0x9c, 0x13, 0x1c, 0xa9, 0x00, 0x9c, + 0x14, 0x1c, 0xa7, 0x00, 0x9c, 0x15, 0x1c, 0xa6, + 0x00, 0x9c, 0x16, 0x4a, 0x5f, 0x00, 0x9c, 0x18, + 0x4a, 0x60, 0x00, 0x9c, 0x19, 0x4a, 0x61, 0x00, + 0x9c, 0x1a, 0x4a, 0x62, 0x00, 0x9c, 0x1b, 0x1c, + 0xb1, 0x00, 0x9c, 0x1c, 0x4e, 0x37, 0x00, 0x9c, + 0x1d, 0x4a, 0x63, 0x00, 0x9c, 0x1e, 0x59, 0xc0, + 0x00, 0x9c, 0x21, 0x1c, 0xb4, 0x00, 0x9c, 0x22, + 0x4a, 0x64, 0x00, 0x9c, 0x23, 0x43, 0x3e, 0x00, + 0x9c, 0x24, 0x1c, 0xb3, 0x00, 0x9c, 0x25, 0x1c, + 0xb2, 0x00, 0x9c, 0x26, 0x59, 0xc1, 0x00, 0x9c, + 0x27, 0x3b, 0xec, 0x00, 0x9c, 0x28, 0x59, 0xc2, + 0x00, 0x9c, 0x29, 0x4a, 0x65, 0x00, 0x9c, 0x2a, + 0x3b, 0xed, 0x00, 0x9c, 0x2d, 0x0d, 0xbb, 0x00, + 0x9c, 0x2e, 0x1c, 0xb0, 0x00, 0x9c, 0x2f, 0x04, + 0xb7, 0x00, 0x9c, 0x30, 0x1c, 0xb5, 0x00, 0x9c, + 0x31, 0x4a, 0x67, 0x00, 0x9c, 0x32, 0x1c, 0xb7, + 0x00, 0x9c, 0x35, 0x4e, 0x38, 0x00, 0x9c, 0x36, + 0x3b, 0xee, 0x00, 0x9c, 0x37, 0x4a, 0x68, 0x00, + 0x9c, 0x39, 0x05, 0xcd, 0x00, 0x9c, 0x3a, 0x1c, + 0xa2, 0x00, 0x9c, 0x3b, 0x04, 0xd9, 0x00, 0x9c, + 0x3d, 0x59, 0xc3, 0x00, 0x9c, 0x3e, 0x1c, 0xb9, + 0x00, 0x9c, 0x41, 0x3b, 0xef, 0x00, 0x9c, 0x43, + 0x59, 0xc4, 0x00, 0x9c, 0x44, 0x4e, 0x39, 0x00, + 0x9c, 0x45, 0x4a, 0x69, 0x00, 0x9c, 0x46, 0x1c, + 0xb8, 0x00, 0x9c, 0x47, 0x1c, 0xb6, 0x00, 0x9c, + 0x48, 0x0b, 0x6b, 0x00, 0x9c, 0x49, 0x4a, 0x6c, + 0x00, 0x9c, 0x4a, 0x4a, 0x6d, 0x00, 0x9c, 0x4e, + 0x59, 0xc5, 0x00, 0x9c, 0x4f, 0x43, 0x3f, 0x00, + 0x9c, 0x50, 0x43, 0x40, 0x00, 0x9c, 0x52, 0x0e, + 0x9e, 0x00, 0x9c, 0x53, 0x3b, 0xf0, 0x00, 0x9c, + 0x54, 0x4a, 0x6f, 0x00, 0x9c, 0x56, 0x4e, 0x3a, + 0x00, 0x9c, 0x57, 0x0f, 0xa2, 0x00, 0x9c, 0x58, + 0x4a, 0x70, 0x00, 0x9c, 0x5a, 0x1c, 0xba, 0x00, + 0x9c, 0x5b, 0x4a, 0x71, 0x00, 0x9c, 0x5c, 0x4a, + 0x6a, 0x00, 0x9c, 0x5d, 0x4a, 0x72, 0x00, 0x9c, + 0x5e, 0x59, 0xc6, 0x00, 0x9c, 0x5f, 0x4a, 0x73, + 0x00, 0x9c, 0x60, 0x1c, 0xbb, 0x00, 0x9c, 0x61, + 0x4e, 0x3b, 0x00, 0x9c, 0x63, 0x3b, 0xf1, 0x00, + 0x9c, 0x65, 0x43, 0x41, 0x00, 0x9c, 0x67, 0x1c, + 0xbc, 0x00, 0x9c, 0x68, 0x4e, 0x3c, 0x00, 0x9c, + 0x69, 0x4a, 0x74, 0x00, 0x9c, 0x6a, 0x4a, 0x75, + 0x00, 0x9c, 0x6b, 0x4a, 0x76, 0x00, 0x9c, 0x6d, + 0x4a, 0x77, 0x00, 0x9c, 0x6e, 0x4a, 0x78, 0x00, + 0x9c, 0x70, 0x3b, 0xf2, 0x00, 0x9c, 0x72, 0x4a, + 0x79, 0x00, 0x9c, 0x75, 0x4a, 0x7a, 0x00, 0x9c, + 0x76, 0x1c, 0xbd, 0x00, 0x9c, 0x77, 0x3b, 0xf3, + 0x00, 0x9c, 0x78, 0x1c, 0xbe, 0x00, 0x9c, 0x7a, + 0x4a, 0x7b, 0x00, 0x9c, 0x7b, 0x59, 0xc7, 0x00, + 0x9c, 0xe5, 0x0b, 0xd7, 0x00, 0x9c, 0xe6, 0x4a, + 0x7c, 0x00, 0x9c, 0xe7, 0x1c, 0xbf, 0x00, 0x9c, + 0xe9, 0x0d, 0x4b, 0x00, 0x9c, 0xeb, 0x1c, 0xc4, + 0x00, 0x9c, 0xec, 0x1c, 0xc0, 0x00, 0x9c, 0xf0, + 0x1c, 0xc1, 0x00, 0x9c, 0xf2, 0x4a, 0x7d, 0x00, + 0x9c, 0xf3, 0x0e, 0x5f, 0x00, 0x9c, 0xf4, 0x0e, + 0xd0, 0x00, 0x9c, 0xf6, 0x0c, 0xa8, 0x00, 0x9c, + 0xf7, 0x59, 0xc8, 0x00, 0x9c, 0xf9, 0x59, 0xc9, + 0x00, 0x9d, 0x02, 0x3b, 0xf4, 0x00, 0x9d, 0x03, + 0x1c, 0xc5, 0x00, 0x9d, 0x06, 0x1c, 0xc6, 0x00, + 0x9d, 0x07, 0x0c, 0x96, 0x00, 0x9d, 0x08, 0x1c, + 0xc3, 0x00, 0x9d, 0x09, 0x1c, 0xc2, 0x00, 0x9d, + 0x0b, 0x4a, 0x7e, 0x00, 0x9d, 0x0e, 0x05, 0x2a, + 0x00, 0x9d, 0x11, 0x4a, 0x80, 0x00, 0x9d, 0x12, + 0x1c, 0xce, 0x00, 0x9d, 0x15, 0x1c, 0xcd, 0x00, + 0x9d, 0x17, 0x4a, 0x81, 0x00, 0x9d, 0x18, 0x4a, + 0x82, 0x00, 0x9d, 0x1b, 0x05, 0x17, 0x00, 0x9d, + 0x1c, 0x59, 0xca, 0x00, 0x9d, 0x1d, 0x43, 0x42, + 0x00, 0x9d, 0x1e, 0x43, 0x43, 0x00, 0x9d, 0x1f, + 0x1c, 0xcb, 0x00, 0x9d, 0x23, 0x1c, 0xca, 0x00, + 0x9d, 0x26, 0x1c, 0xc8, 0x00, 0x9d, 0x28, 0x05, + 0xd9, 0x00, 0x9d, 0x2a, 0x1c, 0xc7, 0x00, 0x9d, + 0x2b, 0x08, 0xde, 0x00, 0x9d, 0x2c, 0x05, 0x29, + 0x00, 0x9d, 0x2f, 0x59, 0xcb, 0x00, 0x9d, 0x30, + 0x4e, 0x3d, 0x00, 0x9d, 0x32, 0x4a, 0x86, 0x00, + 0x9d, 0x33, 0x59, 0xcc, 0x00, 0x9d, 0x34, 0x59, + 0xcd, 0x00, 0x9d, 0x3a, 0x59, 0xce, 0x00, 0x9d, + 0x3b, 0x07, 0xf5, 0x00, 0x9d, 0x3c, 0x59, 0xcf, + 0x00, 0x9d, 0x3d, 0x4e, 0x3e, 0x00, 0x9d, 0x3e, + 0x1c, 0xd1, 0x00, 0x9d, 0x3f, 0x1c, 0xd0, 0x00, + 0x9d, 0x41, 0x1c, 0xcf, 0x00, 0x9d, 0x42, 0x3b, + 0xf5, 0x00, 0x9d, 0x43, 0x43, 0x44, 0x00, 0x9d, + 0x44, 0x1c, 0xcc, 0x00, 0x9d, 0x45, 0x59, 0xd0, + 0x00, 0x9d, 0x46, 0x1c, 0xd2, 0x00, 0x9d, 0x47, + 0x3b, 0xf6, 0x00, 0x9d, 0x48, 0x1c, 0xd3, 0x00, + 0x9d, 0x4a, 0x4a, 0x88, 0x00, 0x9d, 0x50, 0x1c, + 0xd8, 0x00, 0x9d, 0x51, 0x1c, 0xd7, 0x00, 0x9d, + 0x52, 0x43, 0x45, 0x00, 0x9d, 0x53, 0x59, 0xd1, + 0x00, 0x9d, 0x54, 0x59, 0xd2, 0x00, 0x9d, 0x59, + 0x1c, 0xd9, 0x00, 0x9d, 0x5c, 0x04, 0xcf, 0x00, + 0x9d, 0x5d, 0x1c, 0xd4, 0x00, 0x9d, 0x5e, 0x1c, + 0xd5, 0x00, 0x9d, 0x5f, 0x4a, 0x89, 0x00, 0x9d, + 0x60, 0x08, 0x06, 0x00, 0x9d, 0x61, 0x0e, 0xc5, + 0x00, 0x9d, 0x62, 0x4a, 0x8a, 0x00, 0x9d, 0x63, + 0x3b, 0xf7, 0x00, 0x9d, 0x64, 0x1c, 0xd6, 0x00, + 0x9d, 0x65, 0x59, 0xd3, 0x00, 0x9d, 0x69, 0x3b, + 0xf8, 0x00, 0x9d, 0x6a, 0x4e, 0x3f, 0x00, 0x9d, + 0x6b, 0x22, 0x0a, 0x00, 0x9d, 0x6c, 0x0e, 0x60, + 0x00, 0x9d, 0x6f, 0x1c, 0xde, 0x00, 0x9d, 0x70, + 0x22, 0x09, 0x00, 0x9d, 0x72, 0x1c, 0xda, 0x00, + 0x9d, 0x73, 0x4a, 0x8d, 0x00, 0x9d, 0x76, 0x4a, + 0x8e, 0x00, 0x9d, 0x77, 0x4a, 0x8f, 0x00, 0x9d, + 0x7a, 0x1c, 0xdf, 0x00, 0x9d, 0x7b, 0x4e, 0x40, + 0x00, 0x9d, 0x7c, 0x3b, 0xf9, 0x00, 0x9d, 0x7e, + 0x3b, 0xfa, 0x00, 0x9d, 0x83, 0x59, 0xd4, 0x00, + 0x9d, 0x84, 0x4a, 0x90, 0x00, 0x9d, 0x86, 0x59, + 0xd5, 0x00, 0x9d, 0x87, 0x1c, 0xdc, 0x00, 0x9d, + 0x89, 0x1c, 0xdb, 0x00, 0x9d, 0x8a, 0x43, 0x46, + 0x00, 0x9d, 0x8d, 0x3b, 0xfb, 0x00, 0x9d, 0x8e, + 0x59, 0xd6, 0x00, 0x9d, 0x8f, 0x07, 0x32, 0x00, + 0x9d, 0x92, 0x59, 0xd7, 0x00, 0x9d, 0x93, 0x59, + 0xd8, 0x00, 0x9d, 0x95, 0x59, 0xd9, 0x00, 0x9d, + 0x96, 0x43, 0x47, 0x00, 0x9d, 0x97, 0x59, 0xda, + 0x00, 0x9d, 0x98, 0x59, 0xdb, 0x00, 0x9d, 0x99, + 0x4a, 0x91, 0x00, 0x9d, 0x9a, 0x1c, 0xe0, 0x00, + 0x9d, 0xa1, 0x4a, 0x92, 0x00, 0x9d, 0xa4, 0x1c, + 0xe1, 0x00, 0x9d, 0xa9, 0x1c, 0xe2, 0x00, 0x9d, + 0xaa, 0x59, 0xdc, 0x00, 0x9d, 0xab, 0x1c, 0xdd, + 0x00, 0x9d, 0xac, 0x43, 0x49, 0x00, 0x9d, 0xae, + 0x59, 0xdd, 0x00, 0x9d, 0xaf, 0x1c, 0xc9, 0x00, + 0x9d, 0xb1, 0x3b, 0xfc, 0x00, 0x9d, 0xb2, 0x1c, + 0xe3, 0x00, 0x9d, 0xb4, 0x22, 0x0b, 0x00, 0x9d, + 0xb5, 0x4a, 0x94, 0x00, 0x9d, 0xb8, 0x1c, 0xe7, + 0x00, 0x9d, 0xb9, 0x4a, 0x95, 0x00, 0x9d, 0xba, + 0x1c, 0xe8, 0x00, 0x9d, 0xbb, 0x1c, 0xe6, 0x00, + 0x9d, 0xbc, 0x43, 0x4a, 0x00, 0x9d, 0xbd, 0x4a, + 0x96, 0x00, 0x9d, 0xbf, 0x4a, 0x93, 0x00, 0x9d, + 0xc0, 0x43, 0x48, 0x00, 0x9d, 0xc1, 0x1c, 0xe5, + 0x00, 0x9d, 0xc2, 0x1c, 0xeb, 0x00, 0x9d, 0xc3, + 0x3b, 0xfd, 0x00, 0x9d, 0xc4, 0x1c, 0xe4, 0x00, + 0x9d, 0xc6, 0x1c, 0xe9, 0x00, 0x9d, 0xc7, 0x3b, + 0xfe, 0x00, 0x9d, 0xc9, 0x4a, 0x97, 0x00, 0x9d, + 0xca, 0x59, 0xdf, 0x00, 0x9d, 0xcf, 0x1c, 0xea, + 0x00, 0x9d, 0xd3, 0x1c, 0xed, 0x00, 0x9d, 0xd4, + 0x59, 0xe0, 0x00, 0x9d, 0xd5, 0x59, 0xe1, 0x00, + 0x9d, 0xd6, 0x3b, 0xff, 0x00, 0x9d, 0xd7, 0x1d, + 0xde, 0x00, 0x9d, 0xd9, 0x1c, 0xec, 0x00, 0x9d, + 0xda, 0x4a, 0x98, 0x00, 0x9d, 0xde, 0x59, 0xe2, + 0x00, 0x9d, 0xdf, 0x3c, 0x00, 0x00, 0x9d, 0xe0, + 0x4a, 0x99, 0x00, 0x9d, 0xe3, 0x4a, 0x9a, 0x00, + 0x9d, 0xe5, 0x4e, 0x41, 0x00, 0x9d, 0xe6, 0x1c, + 0xef, 0x00, 0x9d, 0xe7, 0x43, 0x4c, 0x00, 0x9d, + 0xe9, 0x4e, 0x42, 0x00, 0x9d, 0xeb, 0x3c, 0x01, + 0x00, 0x9d, 0xed, 0x1c, 0xf0, 0x00, 0x9d, 0xee, + 0x59, 0xe3, 0x00, 0x9d, 0xef, 0x1c, 0xf1, 0x00, + 0x9d, 0xf0, 0x59, 0xe4, 0x00, 0x9d, 0xf2, 0x0f, + 0xef, 0x00, 0x9d, 0xf3, 0x4e, 0x43, 0x00, 0x9d, + 0xf4, 0x3c, 0x02, 0x00, 0x9d, 0xf8, 0x1c, 0xee, + 0x00, 0x9d, 0xf9, 0x0b, 0x4b, 0x00, 0x9d, 0xfa, + 0x08, 0x5d, 0x00, 0x9d, 0xfd, 0x1c, 0xf2, 0x00, + 0x9d, 0xfe, 0x59, 0xe5, 0x00, 0x9e, 0x02, 0x4a, + 0x9d, 0x00, 0x9e, 0x07, 0x43, 0x4d, 0x00, 0x9e, + 0x0a, 0x4a, 0x9c, 0x00, 0x9e, 0x0d, 0x4a, 0x9e, + 0x00, 0x9e, 0x0e, 0x59, 0xe6, 0x00, 0x9e, 0x10, + 0x59, 0xe7, 0x00, 0x9e, 0x11, 0x59, 0xe8, 0x00, + 0x9e, 0x12, 0x59, 0xe9, 0x00, 0x9e, 0x15, 0x3c, + 0x03, 0x00, 0x9e, 0x16, 0x59, 0xea, 0x00, 0x9e, + 0x19, 0x22, 0x0c, 0x00, 0x9e, 0x1a, 0x1c, 0xf3, + 0x00, 0x9e, 0x1b, 0x1c, 0xf4, 0x00, 0x9e, 0x1c, + 0x4a, 0x9f, 0x00, 0x9e, 0x1d, 0x3c, 0x04, 0x00, + 0x9e, 0x1e, 0x1c, 0xf5, 0x00, 0x9e, 0x75, 0x1c, + 0xf6, 0x00, 0x9e, 0x78, 0x07, 0x68, 0x00, 0x9e, + 0x79, 0x1c, 0xf7, 0x00, 0x9e, 0x7a, 0x4e, 0x44, + 0x00, 0x9e, 0x7b, 0x4a, 0xa0, 0x00, 0x9e, 0x7c, + 0x1d, 0xfd, 0x00, 0x9e, 0x7d, 0x1c, 0xf8, 0x00, + 0x9e, 0x7f, 0x08, 0xdb, 0x00, 0x9e, 0x80, 0x4a, + 0xa2, 0x00, 0x9e, 0x81, 0x1c, 0xf9, 0x00, 0x9e, + 0x82, 0x4e, 0x45, 0x00, 0x9e, 0x83, 0x4e, 0x46, + 0x00, 0x9e, 0x84, 0x4e, 0x47, 0x00, 0x9e, 0x85, + 0x4a, 0xa3, 0x00, 0x9e, 0x87, 0x59, 0xeb, 0x00, + 0x9e, 0x88, 0x1c, 0xfa, 0x00, 0x9e, 0x8b, 0x1c, + 0xfb, 0x00, 0x9e, 0x8c, 0x1c, 0xfc, 0x00, 0x9e, + 0x8e, 0x59, 0xec, 0x00, 0x9e, 0x8f, 0x59, 0xed, + 0x00, 0x9e, 0x91, 0x1c, 0xff, 0x00, 0x9e, 0x92, + 0x1c, 0xfd, 0x00, 0x9e, 0x93, 0x0f, 0xe2, 0x00, + 0x9e, 0x95, 0x1c, 0xfe, 0x00, 0x9e, 0x96, 0x59, + 0xee, 0x00, 0x9e, 0x97, 0x0f, 0xb7, 0x00, 0x9e, + 0x98, 0x59, 0xef, 0x00, 0x9e, 0x9b, 0x4a, 0xa4, + 0x00, 0x9e, 0x9d, 0x1d, 0x00, 0x00, 0x9e, 0x9e, + 0x43, 0x4e, 0x00, 0x9e, 0x9f, 0x0f, 0xa3, 0x00, + 0x9e, 0xa4, 0x3c, 0x05, 0x00, 0x9e, 0xa5, 0x1d, + 0x01, 0x00, 0x9e, 0xa6, 0x0d, 0x34, 0x00, 0x9e, + 0xa8, 0x3c, 0x06, 0x00, 0x9e, 0xa9, 0x1d, 0x02, + 0x00, 0x9e, 0xaa, 0x1d, 0x04, 0x00, 0x9e, 0xac, + 0x3c, 0x07, 0x00, 0x9e, 0xad, 0x1d, 0x05, 0x00, + 0x9e, 0xae, 0x59, 0xf0, 0x00, 0x9e, 0xaf, 0x43, + 0x4f, 0x00, 0x9e, 0xb0, 0x4e, 0x48, 0x00, 0x9e, + 0xb3, 0x59, 0xf1, 0x00, 0x9e, 0xb4, 0x1e, 0x02, + 0x00, 0x9e, 0xb5, 0x1e, 0x75, 0x00, 0x9e, 0xb8, + 0x1d, 0x03, 0x00, 0x9e, 0xb9, 0x07, 0xff, 0x00, + 0x9e, 0xba, 0x0e, 0xd9, 0x00, 0x9e, 0xbb, 0x0e, + 0x91, 0x00, 0x9e, 0xbc, 0x12, 0x84, 0x00, 0x9e, + 0xbd, 0x4a, 0xa6, 0x00, 0x9e, 0xbe, 0x14, 0xff, + 0x00, 0x9e, 0xbf, 0x0e, 0xa9, 0x00, 0x9e, 0xc3, + 0x34, 0x0b, 0x00, 0x9e, 0xc4, 0x05, 0x2b, 0x00, + 0x9e, 0xc6, 0x59, 0xf2, 0x00, 0x9e, 0xc8, 0x59, + 0xf3, 0x00, 0x9e, 0xcb, 0x59, 0xf4, 0x00, 0x9e, + 0xcc, 0x1d, 0x07, 0x00, 0x9e, 0xcd, 0x06, 0x6a, + 0x00, 0x9e, 0xce, 0x1d, 0x08, 0x00, 0x9e, 0xcf, + 0x1d, 0x09, 0x00, 0x9e, 0xd0, 0x1d, 0x0a, 0x00, + 0x9e, 0xd1, 0x22, 0x0d, 0x00, 0x9e, 0xd2, 0x08, + 0x07, 0x00, 0x9e, 0xd4, 0x1d, 0x0b, 0x00, 0x9e, + 0xd5, 0x59, 0xf5, 0x00, 0x9e, 0xd8, 0x16, 0x0d, + 0x00, 0x9e, 0xd9, 0x0e, 0xe7, 0x00, 0x9e, 0xdb, + 0x0b, 0x43, 0x00, 0x9e, 0xdc, 0x1d, 0x0c, 0x00, + 0x9e, 0xdd, 0x1d, 0x0e, 0x00, 0x9e, 0xde, 0x1d, + 0x0d, 0x00, 0x9e, 0xdf, 0x4a, 0xa8, 0x00, 0x9e, + 0xe0, 0x1d, 0x0f, 0x00, 0x9e, 0xe4, 0x4e, 0x49, + 0x00, 0x9e, 0xe5, 0x1d, 0x10, 0x00, 0x9e, 0xe7, + 0x3c, 0x08, 0x00, 0x9e, 0xe8, 0x1d, 0x11, 0x00, + 0x9e, 0xec, 0x59, 0xf6, 0x00, 0x9e, 0xed, 0x59, + 0xf7, 0x00, 0x9e, 0xee, 0x3c, 0x09, 0x00, 0x9e, + 0xef, 0x1d, 0x12, 0x00, 0x9e, 0xf0, 0x4e, 0x4a, + 0x00, 0x9e, 0xf1, 0x59, 0xf8, 0x00, 0x9e, 0xf2, + 0x4e, 0x4b, 0x00, 0x9e, 0xf4, 0x1d, 0x13, 0x00, + 0x9e, 0xf5, 0x59, 0xf9, 0x00, 0x9e, 0xf6, 0x1d, + 0x14, 0x00, 0x9e, 0xf7, 0x1d, 0x15, 0x00, 0x9e, + 0xf8, 0x59, 0xfa, 0x00, 0x9e, 0xf9, 0x1d, 0x16, + 0x00, 0x9e, 0xfb, 0x1d, 0x17, 0x00, 0x9e, 0xfc, + 0x1d, 0x18, 0x00, 0x9e, 0xfd, 0x1d, 0x19, 0x00, + 0x9e, 0xff, 0x4a, 0xa9, 0x00, 0x9f, 0x02, 0x4a, + 0xaa, 0x00, 0x9f, 0x03, 0x4a, 0xac, 0x00, 0x9f, + 0x07, 0x1d, 0x1a, 0x00, 0x9f, 0x08, 0x1d, 0x1b, + 0x00, 0x9f, 0x09, 0x4e, 0x4c, 0x00, 0x9f, 0x0e, + 0x0c, 0x1e, 0x00, 0x9f, 0x0f, 0x4e, 0x4d, 0x00, + 0x9f, 0x10, 0x3c, 0x0a, 0x00, 0x9f, 0x11, 0x59, + 0xfb, 0x00, 0x9f, 0x12, 0x3c, 0x0b, 0x00, 0x9f, + 0x13, 0x07, 0x91, 0x00, 0x9f, 0x14, 0x4e, 0x4e, + 0x00, 0x9f, 0x15, 0x1d, 0x1d, 0x00, 0x9f, 0x16, + 0x59, 0xfc, 0x00, 0x9f, 0x17, 0x3c, 0x0c, 0x00, + 0x9f, 0x19, 0x3c, 0x0d, 0x00, 0x9f, 0x1a, 0x59, + 0xfd, 0x00, 0x9f, 0x1b, 0x4e, 0x4f, 0x00, 0x9f, + 0x1f, 0x59, 0xfe, 0x00, 0x9f, 0x20, 0x0a, 0xcf, + 0x00, 0x9f, 0x21, 0x1d, 0x1e, 0x00, 0x9f, 0x22, + 0x4e, 0x50, 0x00, 0x9f, 0x26, 0x4e, 0x51, 0x00, + 0x9f, 0x2a, 0x4e, 0x52, 0x00, 0x9f, 0x2b, 0x4e, + 0x53, 0x00, 0x9f, 0x2c, 0x1d, 0x1f, 0x00, 0x9f, + 0x2f, 0x3c, 0x0e, 0x00, 0x9f, 0x31, 0x59, 0xff, + 0x00, 0x9f, 0x32, 0x5a, 0x00, 0x00, 0x9f, 0x34, + 0x4e, 0x54, 0x00, 0x9f, 0x37, 0x3c, 0x0f, 0x00, + 0x9f, 0x39, 0x3c, 0x10, 0x00, 0x9f, 0x3a, 0x4a, + 0xad, 0x00, 0x9f, 0x3b, 0x0d, 0x93, 0x00, 0x9f, + 0x3c, 0x5a, 0x01, 0x00, 0x9f, 0x3d, 0x4a, 0xae, + 0x00, 0x9f, 0x3e, 0x1d, 0x20, 0x00, 0x9f, 0x3f, + 0x5a, 0x02, 0x00, 0x9f, 0x41, 0x3c, 0x11, 0x00, + 0x9f, 0x43, 0x5a, 0x03, 0x00, 0x9f, 0x44, 0x5a, + 0x04, 0x00, 0x9f, 0x45, 0x3c, 0x12, 0x00, 0x9f, + 0x46, 0x4a, 0xaf, 0x00, 0x9f, 0x47, 0x5a, 0x05, + 0x00, 0x9f, 0x4a, 0x1d, 0x21, 0x00, 0x9f, 0x4b, + 0x17, 0x0a, 0x00, 0x9f, 0x4e, 0x1a, 0x7b, 0x00, + 0x9f, 0x4f, 0x1c, 0x06, 0x00, 0x9f, 0x52, 0x1d, + 0x22, 0x00, 0x9f, 0x53, 0x4a, 0xb0, 0x00, 0x9f, + 0x54, 0x1d, 0x23, 0x00, 0x9f, 0x55, 0x4a, 0xb1, + 0x00, 0x9f, 0x56, 0x5a, 0x06, 0x00, 0x9f, 0x57, + 0x3c, 0x13, 0x00, 0x9f, 0x58, 0x4a, 0xb2, 0x00, + 0x9f, 0x5a, 0x4e, 0x55, 0x00, 0x9f, 0x5d, 0x4a, + 0xb4, 0x00, 0x9f, 0x5e, 0x5a, 0x07, 0x00, 0x9f, + 0x5f, 0x1d, 0x25, 0x00, 0x9f, 0x60, 0x1d, 0x26, + 0x00, 0x9f, 0x61, 0x1d, 0x27, 0x00, 0x9f, 0x62, + 0x0f, 0xb8, 0x00, 0x9f, 0x63, 0x1d, 0x24, 0x00, + 0x9f, 0x66, 0x1d, 0x28, 0x00, 0x9f, 0x67, 0x1d, + 0x29, 0x00, 0x9f, 0x68, 0x3c, 0x14, 0x00, 0x9f, + 0x69, 0x4a, 0xb6, 0x00, 0x9f, 0x6a, 0x1d, 0x2b, + 0x00, 0x9f, 0x6c, 0x1d, 0x2a, 0x00, 0x9f, 0x6d, + 0x4a, 0xb7, 0x00, 0x9f, 0x6e, 0x5a, 0x08, 0x00, + 0x9f, 0x6f, 0x4e, 0x56, 0x00, 0x9f, 0x70, 0x4a, + 0xb8, 0x00, 0x9f, 0x71, 0x3c, 0x15, 0x00, 0x9f, + 0x72, 0x1d, 0x2d, 0x00, 0x9f, 0x73, 0x5a, 0x09, + 0x00, 0x9f, 0x75, 0x3c, 0x16, 0x00, 0x9f, 0x76, + 0x1d, 0x2e, 0x00, 0x9f, 0x77, 0x1d, 0x2c, 0x00, + 0x9f, 0x7a, 0x5a, 0x0a, 0x00, 0x9f, 0x7d, 0x5a, + 0x0b, 0x00, 0x9f, 0x8d, 0x0f, 0x7e, 0x00, 0x9f, + 0x8f, 0x5a, 0x0c, 0x00, 0x9f, 0x90, 0x3c, 0x17, + 0x00, 0x9f, 0x91, 0x5a, 0x0d, 0x00, 0x9f, 0x92, + 0x5a, 0x0e, 0x00, 0x9f, 0x94, 0x3c, 0x18, 0x00, + 0x9f, 0x95, 0x1d, 0x2f, 0x00, 0x9f, 0x96, 0x5a, + 0x0f, 0x00, 0x9f, 0x97, 0x43, 0x50, 0x00, 0x9f, + 0x9c, 0x1d, 0x30, 0x00, 0x9f, 0x9d, 0x17, 0x27, + 0x00, 0x9f, 0x9e, 0x4e, 0x57, 0x00, 0x9f, 0xa0, + 0x1d, 0x31, 0x00, 0x9f, 0xa1, 0x5a, 0x10, 0x00, + 0x9f, 0xa2, 0x3c, 0x19, 0x00, 0x9f, 0xa3, 0x5a, + 0x11, 0x00, 0x9f, 0xa5, 0x4e, 0x58, 0x00, 0x9f, + 0xb4, 0x36, 0xe0, 0x00, 0x9f, 0xbc, 0x3c, 0x47, + 0x00, 0x9f, 0xbd, 0x3c, 0x45, 0x00, 0x9f, 0xbe, + 0x3c, 0x4a, 0x00, 0x9f, 0xbf, 0x4e, 0x64, 0x00, + 0x9f, 0xc0, 0x4e, 0x65, 0x00, 0x9f, 0xc1, 0x4e, + 0x66, 0x00, 0x9f, 0xc2, 0x4e, 0x67, 0x00, 0x9f, + 0xc4, 0x37, 0x09, 0x00, 0x9f, 0xc6, 0x37, 0x58, + 0x00, 0x9f, 0xcc, 0x4e, 0xbc, 0x00, 0xfa, 0x0e, + 0x20, 0xda, 0x00, 0xfa, 0x0f, 0x20, 0xe5, 0x00, + 0xfa, 0x11, 0x37, 0xd2, 0x00, 0xfa, 0x13, 0x21, + 0x31, 0x00, 0xfa, 0x14, 0x21, 0x33, 0x00, 0xfa, + 0x1f, 0x21, 0xa2, 0x00, 0xfa, 0x21, 0x21, 0xa5, + 0x00, 0xfa, 0x23, 0x21, 0xb6, 0x00, 0xfa, 0x24, + 0x49, 0x48, 0x00, 0xfa, 0x27, 0x21, 0xd8, 0x00, + 0xfa, 0x28, 0x21, 0xdf, 0x00, 0xfa, 0x29, 0x21, + 0xef, 0x02, 0x00, 0x0b, 0x36, 0x0f, 0x02, 0x00, + 0x89, 0x43, 0x51, 0x02, 0x00, 0x8a, 0x37, 0x1c, + 0x02, 0x00, 0xa2, 0x43, 0x58, 0x02, 0x00, 0xa4, + 0x43, 0x5b, 0x02, 0x00, 0xb0, 0x37, 0x81, 0x02, + 0x00, 0xf5, 0x4e, 0x59, 0x02, 0x01, 0x58, 0x4e, + 0x6b, 0x02, 0x01, 0xa2, 0x36, 0x21, 0x02, 0x02, + 0x13, 0x43, 0x6b, 0x02, 0x03, 0x2b, 0x43, 0x82, + 0x02, 0x03, 0x71, 0x43, 0x8b, 0x02, 0x03, 0x81, + 0x43, 0x89, 0x02, 0x03, 0xf9, 0x43, 0x8f, 0x02, + 0x04, 0x4a, 0x43, 0x91, 0x02, 0x05, 0x09, 0x43, + 0x93, 0x02, 0x05, 0x3f, 0x37, 0x6c, 0x02, 0x05, + 0xb1, 0x4e, 0x70, 0x02, 0x05, 0xd6, 0x43, 0x9c, + 0x02, 0x06, 0x11, 0x37, 0xd6, 0x02, 0x06, 0x28, + 0x37, 0x19, 0x02, 0x06, 0xec, 0x4e, 0x73, 0x02, + 0x07, 0x4f, 0x43, 0xa0, 0x02, 0x07, 0xc8, 0x4e, + 0xa0, 0x02, 0x08, 0x07, 0x43, 0xa7, 0x02, 0x08, + 0x3a, 0x43, 0xa9, 0x02, 0x08, 0xb9, 0x43, 0xaf, + 0x02, 0x09, 0x0e, 0x34, 0xd3, 0x02, 0x09, 0x7c, + 0x43, 0xb3, 0x02, 0x09, 0x84, 0x37, 0x1d, 0x02, + 0x09, 0x9d, 0x43, 0xb4, 0x02, 0x0a, 0x64, 0x35, + 0xbb, 0x02, 0x0a, 0xd3, 0x43, 0xb9, 0x02, 0x0b, + 0x1d, 0x43, 0xbc, 0x02, 0x0b, 0x9f, 0x35, 0xeb, + 0x02, 0x0b, 0xb7, 0x35, 0x8a, 0x02, 0x0d, 0x45, + 0x43, 0xcf, 0x02, 0x0d, 0x58, 0x4e, 0x7a, 0x02, + 0x0d, 0xe1, 0x43, 0xdd, 0x02, 0x0e, 0x64, 0x43, + 0xec, 0x02, 0x0e, 0x6d, 0x43, 0xe4, 0x02, 0x0e, + 0x95, 0x43, 0xe3, 0x02, 0x0f, 0x5f, 0x43, 0xef, + 0x02, 0x12, 0x01, 0x44, 0x06, 0x02, 0x12, 0x3d, + 0x36, 0x81, 0x02, 0x12, 0x55, 0x44, 0x07, 0x02, + 0x12, 0x74, 0x44, 0x0d, 0x02, 0x12, 0x7b, 0x44, + 0x09, 0x02, 0x12, 0xd7, 0x44, 0x15, 0x02, 0x12, + 0xe4, 0x44, 0x14, 0x02, 0x12, 0xfd, 0x44, 0x1b, + 0x02, 0x13, 0x1b, 0x41, 0xb0, 0x02, 0x13, 0x36, + 0x44, 0x1d, 0x02, 0x13, 0x44, 0x44, 0x1e, 0x02, + 0x13, 0xc4, 0x44, 0x29, 0x02, 0x14, 0x6d, 0x44, + 0x36, 0x02, 0x14, 0x6e, 0x41, 0xb5, 0x02, 0x15, + 0xd7, 0x44, 0x40, 0x02, 0x16, 0x47, 0x44, 0x48, + 0x02, 0x16, 0xb4, 0x41, 0xc6, 0x02, 0x17, 0x06, + 0x44, 0x54, 0x02, 0x17, 0x42, 0x44, 0x55, 0x02, + 0x18, 0xbd, 0x41, 0xc1, 0x02, 0x19, 0xc3, 0x44, + 0x75, 0x02, 0x1a, 0x1a, 0x1e, 0x91, 0x02, 0x1c, + 0x56, 0x44, 0x83, 0x02, 0x1d, 0x2d, 0x44, 0x88, + 0x02, 0x1d, 0x45, 0x44, 0x89, 0x02, 0x1d, 0x62, + 0x44, 0x8b, 0x02, 0x1d, 0x78, 0x44, 0x8a, 0x02, + 0x1d, 0x92, 0x44, 0x94, 0x02, 0x1d, 0x9c, 0x44, + 0x90, 0x02, 0x1d, 0xa1, 0x44, 0x8f, 0x02, 0x1d, + 0xb7, 0x44, 0x97, 0x02, 0x1d, 0xe0, 0x44, 0x99, + 0x02, 0x1e, 0x33, 0x44, 0x9a, 0x02, 0x1e, 0x34, + 0x41, 0xcd, 0x02, 0x1f, 0x1e, 0x44, 0xa7, 0x02, + 0x1f, 0x76, 0x44, 0xae, 0x02, 0x1f, 0xfa, 0x44, + 0xb1, 0x02, 0x21, 0x7b, 0x44, 0xbf, 0x02, 0x22, + 0x18, 0x4a, 0xa1, 0x02, 0x23, 0x1e, 0x44, 0xc5, + 0x02, 0x23, 0xad, 0x44, 0xc8, 0x02, 0x26, 0x09, + 0x3c, 0x53, 0x02, 0x26, 0xf3, 0x44, 0xe0, 0x02, + 0x28, 0x5b, 0x44, 0xef, 0x02, 0x28, 0xab, 0x44, + 0xf5, 0x02, 0x29, 0x8f, 0x44, 0xf9, 0x02, 0x2a, + 0xb8, 0x45, 0x03, 0x02, 0x2b, 0x46, 0x45, 0x10, + 0x02, 0x2b, 0x4f, 0x45, 0x07, 0x02, 0x2b, 0x50, + 0x45, 0x08, 0x02, 0x2b, 0xa6, 0x45, 0x13, 0x02, + 0x2c, 0x1d, 0x45, 0x12, 0x02, 0x2c, 0x24, 0x45, + 0x16, 0x02, 0x2d, 0xe1, 0x45, 0x2e, 0x02, 0x2e, + 0x42, 0x4e, 0x9c, 0x02, 0x2f, 0xeb, 0x4e, 0xa2, + 0x02, 0x31, 0xb6, 0x45, 0x50, 0x02, 0x31, 0xc3, + 0x45, 0x4e, 0x02, 0x31, 0xc4, 0x41, 0xf8, 0x02, + 0x31, 0xf5, 0x45, 0x4f, 0x02, 0x33, 0x72, 0x45, + 0x61, 0x02, 0x33, 0xcc, 0x37, 0x3c, 0x02, 0x33, + 0xd0, 0x45, 0x68, 0x02, 0x33, 0xd2, 0x45, 0x64, + 0x02, 0x33, 0xd3, 0x45, 0x63, 0x02, 0x33, 0xd5, + 0x45, 0x6a, 0x02, 0x33, 0xda, 0x45, 0x6c, 0x02, + 0x33, 0xdf, 0x45, 0x6e, 0x02, 0x33, 0xe4, 0x45, + 0x69, 0x02, 0x33, 0xfe, 0x3c, 0x3e, 0x02, 0x34, + 0x4a, 0x45, 0x76, 0x02, 0x34, 0x4b, 0x45, 0x78, + 0x02, 0x34, 0x51, 0x45, 0x77, 0x02, 0x34, 0x65, + 0x45, 0x7c, 0x02, 0x34, 0xe4, 0x45, 0x96, 0x02, + 0x35, 0x5a, 0x45, 0x97, 0x02, 0x35, 0x94, 0x45, + 0xa3, 0x02, 0x35, 0xc4, 0x42, 0x09, 0x02, 0x36, + 0x38, 0x45, 0xb3, 0x02, 0x36, 0x39, 0x45, 0xb1, + 0x02, 0x36, 0x3a, 0x3c, 0x21, 0x02, 0x36, 0x47, + 0x45, 0xb2, 0x02, 0x37, 0x0c, 0x45, 0xc7, 0x02, + 0x37, 0x1c, 0x45, 0xbe, 0x02, 0x37, 0x3f, 0x42, + 0x12, 0x02, 0x37, 0x63, 0x42, 0x14, 0x02, 0x37, + 0x64, 0x45, 0xcb, 0x02, 0x37, 0xe7, 0x45, 0xd3, + 0x02, 0x37, 0xf1, 0x4e, 0xb8, 0x02, 0x37, 0xff, + 0x45, 0xd2, 0x02, 0x38, 0x24, 0x45, 0xd8, 0x02, + 0x38, 0x3d, 0x45, 0xdd, 0x02, 0x3a, 0x98, 0x45, + 0xe9, 0x02, 0x3c, 0x7f, 0x45, 0xf6, 0x02, 0x3c, + 0xbe, 0x37, 0xd5, 0x02, 0x3c, 0xfe, 0x36, 0x50, + 0x02, 0x3d, 0x00, 0x46, 0x05, 0x02, 0x3d, 0x0e, + 0x47, 0xda, 0x02, 0x3d, 0x40, 0x46, 0x16, 0x02, + 0x3d, 0xd3, 0x46, 0x19, 0x02, 0x3d, 0xf9, 0x46, + 0x18, 0x02, 0x3d, 0xfa, 0x46, 0x17, 0x02, 0x3f, + 0x7e, 0x46, 0x3f, 0x02, 0x40, 0x4b, 0x4e, 0xc8, + 0x02, 0x40, 0x96, 0x46, 0x4e, 0x02, 0x41, 0x03, + 0x46, 0x53, 0x02, 0x41, 0xc6, 0x46, 0x5f, 0x02, + 0x41, 0xfe, 0x46, 0x62, 0x02, 0x42, 0xee, 0x37, + 0xca, 0x02, 0x43, 0xbc, 0x46, 0x77, 0x02, 0x43, + 0xd0, 0x1e, 0x9e, 0x02, 0x46, 0x29, 0x46, 0x81, + 0x02, 0x46, 0xa5, 0x46, 0x87, 0x02, 0x47, 0xf1, + 0x42, 0x4a, 0x02, 0x48, 0x96, 0x46, 0x9d, 0x02, + 0x4a, 0x4d, 0x46, 0xb8, 0x02, 0x4b, 0x56, 0x46, + 0xc5, 0x02, 0x4b, 0x6f, 0x46, 0xc7, 0x02, 0x4c, + 0x16, 0x46, 0xcc, 0x02, 0x4d, 0x14, 0x36, 0xab, + 0x02, 0x4e, 0x04, 0x4e, 0x5a, 0x02, 0x4e, 0x0e, + 0x46, 0xee, 0x02, 0x4e, 0x37, 0x46, 0xf2, 0x02, + 0x4e, 0x6a, 0x46, 0xf7, 0x02, 0x4e, 0x8b, 0x46, + 0xfa, 0x02, 0x4f, 0xf2, 0x4e, 0x5b, 0x02, 0x50, + 0x4a, 0x47, 0x05, 0x02, 0x50, 0x55, 0x47, 0x07, + 0x02, 0x51, 0x22, 0x47, 0x09, 0x02, 0x51, 0xa9, + 0x47, 0x0e, 0x02, 0x51, 0xcd, 0x47, 0x11, 0x02, + 0x51, 0xe5, 0x47, 0x10, 0x02, 0x52, 0x1e, 0x47, + 0x13, 0x02, 0x52, 0x4c, 0x47, 0x15, 0x02, 0x54, + 0x2e, 0x47, 0x21, 0x02, 0x54, 0x8e, 0x42, 0x6d, + 0x02, 0x54, 0xd9, 0x47, 0x29, 0x02, 0x55, 0x0e, + 0x42, 0x71, 0x02, 0x55, 0xa7, 0x47, 0x35, 0x02, + 0x56, 0x7f, 0x36, 0xfb, 0x02, 0x57, 0x71, 0x42, + 0x7a, 0x02, 0x57, 0xa9, 0x47, 0x48, 0x02, 0x57, + 0xb4, 0x47, 0x49, 0x02, 0x58, 0x74, 0x1d, 0xf6, + 0x02, 0x59, 0xc4, 0x42, 0x80, 0x02, 0x59, 0xcc, + 0x4e, 0x90, 0x02, 0x59, 0xd4, 0x47, 0x5c, 0x02, + 0x5a, 0xd7, 0x36, 0x62, 0x02, 0x5a, 0xe3, 0x47, + 0x65, 0x02, 0x5a, 0xe4, 0x47, 0x64, 0x02, 0x5a, + 0xf1, 0x47, 0x66, 0x02, 0x5b, 0xb2, 0x47, 0x75, + 0x02, 0x5c, 0x4b, 0x47, 0x7e, 0x02, 0x5c, 0x64, + 0x47, 0x7f, 0x02, 0x5d, 0xa1, 0x42, 0x89, 0x02, + 0x5e, 0x2e, 0x47, 0x8e, 0x02, 0x5e, 0x56, 0x47, + 0x8f, 0x02, 0x5e, 0x62, 0x47, 0x92, 0x02, 0x5e, + 0x65, 0x47, 0x90, 0x02, 0x5e, 0xc2, 0x47, 0x97, + 0x02, 0x5e, 0xd8, 0x47, 0x95, 0x02, 0x5e, 0xe8, + 0x47, 0x99, 0x02, 0x5f, 0x23, 0x47, 0x9a, 0x02, + 0x5f, 0x5c, 0x47, 0x9c, 0x02, 0x5f, 0xd4, 0x47, + 0xa3, 0x02, 0x5f, 0xe0, 0x47, 0xa2, 0x02, 0x5f, + 0xfb, 0x47, 0xa9, 0x02, 0x60, 0x0c, 0x47, 0xa8, + 0x02, 0x60, 0x17, 0x47, 0xb0, 0x02, 0x60, 0x60, + 0x47, 0xb3, 0x02, 0x60, 0xed, 0x47, 0xbd, 0x02, + 0x62, 0x22, 0x35, 0x7b, 0x02, 0x62, 0x6a, 0x37, + 0x6d, 0x02, 0x62, 0x70, 0x47, 0xd1, 0x02, 0x62, + 0x86, 0x47, 0xd2, 0x02, 0x63, 0x4c, 0x4f, 0x57, + 0x02, 0x64, 0x02, 0x47, 0xde, 0x02, 0x66, 0x7e, + 0x47, 0xf0, 0x02, 0x66, 0xb0, 0x37, 0x14, 0x02, + 0x67, 0x1d, 0x47, 0xfe, 0x02, 0x68, 0xdd, 0x48, + 0x0c, 0x02, 0x68, 0xea, 0x48, 0x0e, 0x02, 0x69, + 0x51, 0x35, 0x4e, 0x02, 0x69, 0x6f, 0x48, 0x12, + 0x02, 0x69, 0x99, 0x37, 0x36, 0x02, 0x69, 0xdd, + 0x48, 0x14, 0x02, 0x6a, 0x1e, 0x48, 0x17, 0x02, + 0x6a, 0x58, 0x48, 0x1b, 0x02, 0x6a, 0x8c, 0x48, + 0x1f, 0x02, 0x6a, 0xb7, 0x48, 0x22, 0x02, 0x6a, + 0xff, 0x42, 0xa7, 0x02, 0x6c, 0x29, 0x44, 0x46, + 0x02, 0x6c, 0x73, 0x48, 0x4a, 0x02, 0x6c, 0x9e, + 0x4e, 0xee, 0x02, 0x6c, 0xdd, 0x48, 0x53, 0x02, + 0x6e, 0x40, 0x42, 0xc1, 0x02, 0x6e, 0x65, 0x48, + 0x60, 0x02, 0x6f, 0x94, 0x48, 0x70, 0x02, 0x6f, + 0xf6, 0x48, 0x7a, 0x02, 0x6f, 0xf7, 0x48, 0x7b, + 0x02, 0x6f, 0xf8, 0x48, 0x79, 0x02, 0x70, 0xf4, + 0x42, 0xcf, 0x02, 0x71, 0x0d, 0x48, 0x8b, 0x02, + 0x71, 0x39, 0x48, 0x8e, 0x02, 0x73, 0xda, 0x48, + 0xb3, 0x02, 0x73, 0xdb, 0x48, 0xb2, 0x02, 0x73, + 0xfe, 0x48, 0xb9, 0x02, 0x74, 0x10, 0x48, 0xbc, + 0x02, 0x74, 0x49, 0x48, 0xc0, 0x02, 0x76, 0x14, + 0x48, 0xce, 0x02, 0x76, 0x15, 0x48, 0xcd, 0x02, + 0x76, 0x31, 0x48, 0xd0, 0x02, 0x76, 0x84, 0x42, + 0xdd, 0x02, 0x76, 0x93, 0x48, 0xd5, 0x02, 0x77, + 0x0e, 0x48, 0xda, 0x02, 0x77, 0x23, 0x48, 0xdc, + 0x02, 0x77, 0x52, 0x48, 0xe0, 0x02, 0x79, 0x85, + 0x48, 0xf0, 0x02, 0x79, 0xb4, 0x4e, 0xa5, 0x02, + 0x7a, 0x84, 0x48, 0xfc, 0x02, 0x7b, 0xb3, 0x49, + 0x0b, 0x02, 0x7b, 0xbe, 0x49, 0x0d, 0x02, 0x7b, + 0xc7, 0x49, 0x0e, 0x02, 0x7c, 0x3c, 0x4e, 0xfc, + 0x02, 0x7c, 0xb8, 0x49, 0x14, 0x02, 0x7d, 0x73, + 0x4e, 0x5c, 0x02, 0x7d, 0xa0, 0x49, 0x1c, 0x02, + 0x7e, 0x10, 0x49, 0x1e, 0x02, 0x7f, 0xb7, 0x36, + 0x4a, 0x02, 0x80, 0x8a, 0x49, 0x27, 0x02, 0x80, + 0xbb, 0x49, 0x2d, 0x02, 0x82, 0x77, 0x42, 0xf4, + 0x02, 0x82, 0x82, 0x49, 0x39, 0x02, 0x82, 0xf3, + 0x49, 0x3b, 0x02, 0x83, 0xcd, 0x42, 0xfa, 0x02, + 0x84, 0x0c, 0x49, 0x42, 0x02, 0x84, 0x55, 0x49, + 0x45, 0x02, 0x85, 0x6b, 0x49, 0x52, 0x02, 0x85, + 0xc8, 0x49, 0x55, 0x02, 0x85, 0xc9, 0x49, 0x56, + 0x02, 0x86, 0xd7, 0x49, 0x60, 0x02, 0x86, 0xfa, + 0x49, 0x63, 0x02, 0x89, 0x46, 0x49, 0x7c, 0x02, + 0x89, 0x49, 0x49, 0x7b, 0x02, 0x89, 0x6b, 0x49, + 0x81, 0x02, 0x89, 0x87, 0x37, 0xad, 0x02, 0x89, + 0x88, 0x49, 0x88, 0x02, 0x89, 0xba, 0x49, 0x92, + 0x02, 0x89, 0xbb, 0x49, 0x93, 0x02, 0x8a, 0x1e, + 0x49, 0x9b, 0x02, 0x8a, 0x29, 0x49, 0x9c, 0x02, + 0x8a, 0x43, 0x49, 0xa0, 0x02, 0x8a, 0x71, 0x49, + 0x9f, 0x02, 0x8a, 0x99, 0x49, 0xa7, 0x02, 0x8a, + 0xcd, 0x49, 0xa8, 0x02, 0x8a, 0xdd, 0x49, 0xaf, + 0x02, 0x8a, 0xe4, 0x49, 0xae, 0x02, 0x8b, 0xc1, + 0x49, 0xba, 0x02, 0x8b, 0xef, 0x49, 0xbb, 0x02, + 0x8c, 0xdd, 0x1d, 0xd9, 0x02, 0x8d, 0x10, 0x49, + 0xc2, 0x02, 0x8d, 0x71, 0x49, 0xc3, 0x02, 0x8d, + 0xfb, 0x49, 0xc5, 0x02, 0x8e, 0x17, 0x37, 0xb0, + 0x02, 0x8e, 0x1f, 0x49, 0xc6, 0x02, 0x8e, 0x36, + 0x49, 0xca, 0x02, 0x8e, 0x89, 0x49, 0xcd, 0x02, + 0x8e, 0xeb, 0x49, 0xcf, 0x02, 0x8e, 0xf6, 0x1d, + 0xf9, 0x02, 0x8f, 0x32, 0x49, 0xd1, 0x02, 0x8f, + 0xf8, 0x49, 0xd7, 0x02, 0x92, 0xa0, 0x49, 0xe5, + 0x02, 0x92, 0xb1, 0x49, 0xe6, 0x02, 0x94, 0x90, + 0x49, 0xf7, 0x02, 0x95, 0xcf, 0x4a, 0x00, 0x02, + 0x96, 0x7f, 0x36, 0x19, 0x02, 0x96, 0xf0, 0x4a, + 0x0f, 0x02, 0x97, 0x19, 0x4a, 0x12, 0x02, 0x97, + 0x50, 0x4a, 0x16, 0x02, 0x98, 0xc6, 0x4a, 0x27, + 0x02, 0x9a, 0x72, 0x4a, 0x39, 0x02, 0x9d, 0x4b, + 0x35, 0x95, 0x02, 0x9d, 0xdb, 0x4a, 0x52, 0x02, + 0x9e, 0x15, 0x4a, 0x5c, 0x02, 0x9e, 0x3d, 0x4f, + 0x5b, 0x02, 0x9e, 0x49, 0x4a, 0x5e, 0x02, 0x9e, + 0x8a, 0x4a, 0x5d, 0x02, 0x9e, 0xc4, 0x4a, 0x66, + 0x02, 0x9e, 0xdb, 0x4a, 0x6e, 0x02, 0x9e, 0xe9, + 0x4a, 0x6b, 0x02, 0x9f, 0xce, 0x4a, 0x7f, 0x02, + 0x9f, 0xd7, 0x4a, 0x7f, 0x02, 0xa0, 0x1a, 0x4a, + 0x85, 0x02, 0xa0, 0x2f, 0x4a, 0x83, 0x02, 0xa0, + 0x82, 0x4a, 0x8c, 0x02, 0xa0, 0xf9, 0x4a, 0x8b, + 0x02, 0xa1, 0x90, 0x43, 0x4b, 0x02, 0xa2, 0xb2, + 0x4e, 0x68, 0x02, 0xa3, 0x8c, 0x4a, 0xa5, 0x02, + 0xa4, 0x37, 0x4a, 0xa7, 0x02, 0xa5, 0xf1, 0x4a, + 0xb3, 0x02, 0xa6, 0x02, 0x4a, 0xb5, 0x02, 0xa6, + 0x1a, 0x4f, 0x5c, 0x02, 0xa6, 0xb2, 0x4a, 0xb9, + 0x02, 0xa9, 0xe6, 0x37, 0x41, 0x02, 0xb7, 0x46, + 0x35, 0xd4, 0x02, 0xb7, 0x51, 0x36, 0x2a, 0x02, + 0xb7, 0x53, 0x4e, 0x78, 0x02, 0xb7, 0x5a, 0x4e, + 0x80, 0x02, 0xb7, 0x5c, 0x4e, 0x81, 0x02, 0xb7, + 0x65, 0x4f, 0x17, 0x02, 0xb7, 0x76, 0x4e, 0x92, + 0x02, 0xb7, 0x77, 0x35, 0xd6, 0x02, 0xb7, 0x7c, + 0x4e, 0x9d, 0x02, 0xb7, 0x82, 0x4e, 0xad, 0x02, + 0xb7, 0x89, 0x36, 0xf0, 0x02, 0xb7, 0x8b, 0x4e, + 0xb5, 0x02, 0xb7, 0x8e, 0x35, 0x9c, 0x02, 0xb7, + 0x94, 0x4e, 0xb9, 0x02, 0xb7, 0xac, 0x4e, 0xd0, + 0x02, 0xb7, 0xaf, 0x4e, 0xd4, 0x02, 0xb7, 0xbd, + 0x37, 0x5e, 0x02, 0xb7, 0xc9, 0x4e, 0xe2, 0x02, + 0xb7, 0xcf, 0x4e, 0xe9, 0x02, 0xb7, 0xd2, 0x4e, + 0xec, 0x02, 0xb7, 0xd8, 0x35, 0x53, 0x02, 0xb7, + 0xf0, 0x4f, 0x10, 0x02, 0xb8, 0x0d, 0x4f, 0x20, + 0x02, 0xb8, 0x17, 0x4f, 0x24, 0x02, 0xb8, 0x1a, + 0x37, 0xc6, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x34, + 0x02, 0x35, 0x81, 0x00, 0x4e, 0x08, 0x34, 0x97, + 0x00, 0x4e, 0x0e, 0x4e, 0x69, 0x00, 0x4e, 0x19, + 0x36, 0xb9, 0x00, 0x4e, 0x26, 0x4e, 0x6a, 0x00, + 0x4e, 0x30, 0x3c, 0x1a, 0x00, 0x4e, 0x39, 0x36, + 0x5a, 0x00, 0x4e, 0x3b, 0x35, 0xf4, 0x00, 0x4e, + 0x73, 0x36, 0x90, 0x00, 0x4e, 0xa1, 0x36, 0xcf, + 0x00, 0x4e, 0xa4, 0x34, 0x7f, 0x00, 0x4e, 0xca, + 0x35, 0xd4, 0x00, 0x4f, 0x34, 0x36, 0xa0, 0x00, + 0x4f, 0x4f, 0x35, 0xfc, 0x00, 0x4f, 0x60, 0x3c, + 0x1c, 0x00, 0x4f, 0x73, 0x4e, 0x6c, 0x00, 0x4f, + 0x75, 0x34, 0x47, 0x00, 0x4f, 0x7f, 0x34, 0x8a, + 0x00, 0x4f, 0xae, 0x34, 0x46, 0x00, 0x4f, 0xb5, + 0x36, 0x1b, 0x00, 0x4f, 0xbf, 0x34, 0xc2, 0x00, + 0x50, 0x24, 0x36, 0x5f, 0x00, 0x50, 0x26, 0x1d, + 0xfa, 0x00, 0x50, 0x49, 0x34, 0x61, 0x00, 0x50, + 0x4f, 0x36, 0xbe, 0x00, 0x50, 0x56, 0x4e, 0x6d, + 0x00, 0x50, 0x65, 0x34, 0x7b, 0x00, 0x50, 0x85, + 0x34, 0xd0, 0x00, 0x50, 0x91, 0x34, 0x79, 0x00, + 0x50, 0xc5, 0x1d, 0xee, 0x00, 0x50, 0xca, 0x1f, + 0x2e, 0x00, 0x50, 0xcf, 0x34, 0xa2, 0x00, 0x50, + 0xe7, 0x34, 0x30, 0x00, 0x50, 0xed, 0x4e, 0x6e, + 0x00, 0x50, 0xf2, 0x52, 0xac, 0x00, 0x51, 0x1a, + 0x37, 0x16, 0x00, 0x51, 0x32, 0x1e, 0x76, 0x00, + 0x51, 0x46, 0x34, 0xa5, 0x00, 0x51, 0x4d, 0x34, + 0x4d, 0x00, 0x51, 0x4e, 0x36, 0x7d, 0x00, 0x51, + 0x54, 0x10, 0x74, 0x00, 0x51, 0x68, 0x36, 0x42, + 0x00, 0x51, 0x6b, 0x4e, 0x6f, 0x00, 0x51, 0x6c, + 0x34, 0x80, 0x00, 0x51, 0x77, 0x35, 0xa5, 0x00, + 0x51, 0x7c, 0x35, 0xb4, 0x00, 0x51, 0x89, 0x1e, + 0x87, 0x00, 0x51, 0x8d, 0x08, 0x36, 0x00, 0x51, + 0x92, 0x36, 0xd6, 0x00, 0x51, 0x93, 0x34, 0xd1, + 0x00, 0x51, 0x95, 0x10, 0x82, 0x00, 0x51, 0xa4, + 0x1e, 0x89, 0x00, 0x51, 0xac, 0x0c, 0x59, 0x00, + 0x51, 0xb4, 0x34, 0x5c, 0x00, 0x51, 0xcb, 0x1e, + 0x3e, 0x00, 0x51, 0xdb, 0x34, 0xd2, 0x00, 0x51, + 0xde, 0x4f, 0x53, 0x00, 0x51, 0xe1, 0x36, 0xd9, + 0x00, 0x51, 0xfd, 0x4e, 0x72, 0x00, 0x52, 0x03, + 0x36, 0x22, 0x00, 0x52, 0x06, 0x34, 0xbb, 0x00, + 0x52, 0x24, 0x36, 0xa1, 0x00, 0x52, 0x38, 0x35, + 0xb5, 0x00, 0x52, 0x4a, 0x35, 0xdd, 0x00, 0x52, + 0x4d, 0x36, 0x41, 0x00, 0x52, 0x64, 0x4e, 0x74, + 0x00, 0x52, 0x71, 0x4e, 0x75, 0x00, 0x52, 0x72, + 0x05, 0xc2, 0x00, 0x52, 0x75, 0x1e, 0x2b, 0x00, + 0x52, 0x8d, 0x37, 0x1a, 0x00, 0x52, 0xc7, 0x36, + 0xf6, 0x00, 0x52, 0xc9, 0x0e, 0x29, 0x00, 0x52, + 0xd7, 0x37, 0x1b, 0x00, 0x52, 0xdd, 0x36, 0x05, + 0x00, 0x52, 0xe2, 0x36, 0x2a, 0x00, 0x52, 0xe4, + 0x34, 0x1a, 0x00, 0x52, 0xfa, 0x09, 0x07, 0x00, + 0x53, 0x00, 0x37, 0xcf, 0x00, 0x53, 0x05, 0x36, + 0xc3, 0x00, 0x53, 0x07, 0x20, 0xd4, 0x00, 0x53, + 0x15, 0x1f, 0x2f, 0x00, 0x53, 0x16, 0x35, 0x61, + 0x00, 0x53, 0x39, 0x36, 0xaa, 0x00, 0x53, 0x3f, + 0x4e, 0x77, 0x00, 0x53, 0x40, 0x34, 0xd4, 0x00, + 0x53, 0x4a, 0x36, 0xa2, 0x00, 0x53, 0x51, 0x0d, + 0x70, 0x00, 0x53, 0x5a, 0x36, 0x98, 0x00, 0x53, + 0x65, 0x52, 0xf3, 0x00, 0x53, 0x71, 0x35, 0x80, + 0x00, 0x53, 0x78, 0x35, 0x5f, 0x00, 0x53, 0x7f, + 0x06, 0xa2, 0x00, 0x53, 0xa9, 0x1d, 0xd8, 0x00, + 0x53, 0xc9, 0x4f, 0x39, 0x00, 0x53, 0xca, 0x35, + 0x8e, 0x00, 0x53, 0xce, 0x34, 0x8f, 0x00, 0x53, + 0xd7, 0x35, 0xf5, 0x00, 0x53, 0xdb, 0x1f, 0x2a, + 0x00, 0x53, 0xdf, 0x37, 0x1f, 0x00, 0x53, 0xe0, + 0x53, 0x00, 0x00, 0x53, 0xf1, 0x1e, 0x0c, 0x00, + 0x53, 0xf2, 0x34, 0x8b, 0x00, 0x54, 0x0f, 0x34, + 0xc9, 0x00, 0x54, 0x38, 0x35, 0x8f, 0x00, 0x54, + 0x40, 0x4e, 0x79, 0x00, 0x54, 0x48, 0x36, 0x76, + 0x00, 0x54, 0x68, 0x09, 0x2a, 0x00, 0x54, 0xac, + 0x4f, 0x35, 0x00, 0x54, 0xb2, 0x35, 0xdc, 0x00, + 0x54, 0xe8, 0x1e, 0x17, 0x00, 0x55, 0x10, 0x36, + 0x83, 0x00, 0x55, 0x33, 0x1e, 0x8b, 0x00, 0x55, + 0x39, 0x1e, 0x8a, 0x00, 0x55, 0x44, 0x1e, 0x32, + 0x00, 0x55, 0x46, 0x36, 0x06, 0x00, 0x55, 0x53, + 0x35, 0xaa, 0x00, 0x55, 0x61, 0x38, 0x39, 0x00, + 0x55, 0x84, 0x4e, 0x5e, 0x00, 0x55, 0x9c, 0x4e, + 0x7b, 0x00, 0x55, 0x9d, 0x1d, 0xe3, 0x00, 0x55, + 0xa9, 0x1f, 0x30, 0x00, 0x55, 0xab, 0x35, 0x8b, + 0x00, 0x55, 0xb0, 0x1d, 0xf0, 0x00, 0x55, 0xe4, + 0x1e, 0x8c, 0x00, 0x56, 0x05, 0x53, 0x2d, 0x00, + 0x56, 0x06, 0x0b, 0x70, 0x00, 0x56, 0x09, 0x4e, + 0x7d, 0x00, 0x56, 0x32, 0x1e, 0x8d, 0x00, 0x56, + 0x42, 0x1d, 0xda, 0x00, 0x56, 0x4c, 0x1e, 0x29, + 0x00, 0x56, 0x68, 0x34, 0x15, 0x00, 0x56, 0x74, + 0x34, 0xbc, 0x00, 0x56, 0x78, 0x1e, 0x52, 0x00, + 0x56, 0xa5, 0x1e, 0x8e, 0x00, 0x56, 0xae, 0x1f, + 0x31, 0x00, 0x56, 0xc0, 0x37, 0x24, 0x00, 0x56, + 0xc1, 0x34, 0xd7, 0x00, 0x56, 0xce, 0x4e, 0x82, + 0x00, 0x56, 0xee, 0x4e, 0x83, 0x00, 0x57, 0x0d, + 0x34, 0xd8, 0x00, 0x57, 0x47, 0x34, 0x78, 0x00, + 0x57, 0x6a, 0x36, 0x74, 0x00, 0x57, 0xce, 0x09, + 0xd3, 0x00, 0x57, 0xd6, 0x4e, 0x84, 0x00, 0x57, + 0xf4, 0x34, 0x98, 0x00, 0x58, 0x0b, 0x1e, 0x8f, + 0x00, 0x58, 0x19, 0x1f, 0x32, 0x00, 0x58, 0x35, + 0x1e, 0x49, 0x00, 0x58, 0x3d, 0x4e, 0x85, 0x00, + 0x58, 0x40, 0x34, 0x48, 0x00, 0x58, 0x58, 0x1e, + 0x4d, 0x00, 0x58, 0x59, 0x4e, 0x86, 0x00, 0x58, + 0x5a, 0x1e, 0x42, 0x00, 0x58, 0x9c, 0x36, 0x71, + 0x00, 0x58, 0xa8, 0x0e, 0x7d, 0x00, 0x58, 0xab, + 0x34, 0xd9, 0x00, 0x59, 0x06, 0x53, 0x7b, 0x00, + 0x59, 0x1b, 0x1f, 0x33, 0x00, 0x59, 0x27, 0x36, + 0x55, 0x00, 0x59, 0x4f, 0x4e, 0x87, 0x00, 0x59, + 0x51, 0x35, 0xab, 0x00, 0x59, 0x53, 0x37, 0xd1, + 0x00, 0x59, 0x60, 0x4e, 0x89, 0x00, 0x59, 0x62, + 0x4e, 0x8a, 0x00, 0x59, 0x73, 0x36, 0x04, 0x00, + 0x59, 0x84, 0x36, 0xe7, 0x00, 0x59, 0xa5, 0x36, + 0x4f, 0x00, 0x59, 0xc9, 0x34, 0x8c, 0x00, 0x59, + 0xda, 0x34, 0xda, 0x00, 0x59, 0xec, 0x36, 0xae, + 0x00, 0x59, 0xff, 0x35, 0xe0, 0x00, 0x5a, 0x1c, + 0x37, 0x26, 0x00, 0x5a, 0x29, 0x1e, 0x6f, 0x00, + 0x5a, 0x36, 0x34, 0xdb, 0x00, 0x5a, 0x66, 0x36, + 0xb2, 0x00, 0x5a, 0x9b, 0x1e, 0x68, 0x00, 0x5a, + 0xbe, 0x1e, 0x90, 0x00, 0x5a, 0xc2, 0x37, 0x27, + 0x00, 0x5a, 0xcc, 0x1d, 0xfb, 0x00, 0x5a, 0xda, + 0x4e, 0x8b, 0x00, 0x5b, 0x5a, 0x4e, 0x8c, 0x00, + 0x5b, 0x73, 0x4e, 0x8d, 0x00, 0x5b, 0x7c, 0x4e, + 0x8e, 0x00, 0x5b, 0xb3, 0x34, 0x6d, 0x00, 0x5b, + 0xb5, 0x36, 0x07, 0x00, 0x5b, 0xc3, 0x37, 0x29, + 0x00, 0x5b, 0xd2, 0x35, 0x78, 0x00, 0x5b, 0xdb, + 0x20, 0xf4, 0x00, 0x5b, 0xe7, 0x0c, 0xe1, 0x00, + 0x5b, 0xe8, 0x37, 0x42, 0x00, 0x5c, 0x06, 0x09, + 0x95, 0x00, 0x5c, 0x0a, 0x36, 0x4d, 0x00, 0x5c, + 0x0b, 0x36, 0x23, 0x00, 0x5c, 0x0e, 0x36, 0x8a, + 0x00, 0x5c, 0x0f, 0x36, 0x09, 0x00, 0x5c, 0x28, + 0x1f, 0x34, 0x00, 0x5c, 0x51, 0x1d, 0xf2, 0x00, + 0x5c, 0x60, 0x1e, 0x4a, 0x00, 0x5c, 0x64, 0x34, + 0x31, 0x00, 0x5c, 0x6e, 0x12, 0x32, 0x00, 0x5d, + 0x29, 0x36, 0xc4, 0x00, 0x5d, 0x4e, 0x34, 0xdd, + 0x00, 0x5d, 0x87, 0x34, 0xde, 0x00, 0x5d, 0xb2, + 0x3c, 0x2d, 0x00, 0x5d, 0xc9, 0x34, 0xdf, 0x00, + 0x5d, 0xcc, 0x34, 0x73, 0x00, 0x5d, 0xd3, 0x34, + 0xe0, 0x00, 0x5d, 0xe1, 0x35, 0xff, 0x00, 0x5d, + 0xe5, 0x35, 0xc3, 0x00, 0x5d, 0xe8, 0x35, 0x92, + 0x00, 0x5d, 0xf7, 0x1d, 0xff, 0x00, 0x5d, 0xfd, + 0x0b, 0x65, 0x00, 0x5e, 0x06, 0x36, 0xa3, 0x00, + 0x5e, 0x1d, 0x36, 0x77, 0x00, 0x5e, 0x30, 0x34, + 0x75, 0x00, 0x5e, 0x3d, 0x36, 0xd0, 0x00, 0x5e, + 0x43, 0x4e, 0x91, 0x00, 0x5e, 0x54, 0x37, 0x2d, + 0x00, 0x5e, 0x63, 0x36, 0xba, 0x00, 0x5e, 0x64, + 0x1e, 0x93, 0x00, 0x5e, 0x73, 0x36, 0xbb, 0x00, + 0x5e, 0x7e, 0x35, 0x84, 0x00, 0x5e, 0x96, 0x1e, + 0x70, 0x00, 0x5e, 0xa7, 0x4e, 0x92, 0x00, 0x5e, + 0xad, 0x34, 0xa9, 0x00, 0x5e, 0xc9, 0x0f, 0xbf, + 0x00, 0x5e, 0xca, 0x4f, 0x4f, 0x00, 0x5e, 0xcb, + 0x38, 0xae, 0x00, 0x5e, 0xcf, 0x1f, 0x36, 0x00, + 0x5e, 0xd0, 0x1f, 0x35, 0x00, 0x5e, 0xdf, 0x1e, + 0x6a, 0x00, 0x5e, 0xe0, 0x1e, 0x18, 0x00, 0x5e, + 0xe3, 0x37, 0x2f, 0x00, 0x5e, 0xf6, 0x34, 0x67, + 0x00, 0x5e, 0xf7, 0x34, 0xaa, 0x00, 0x5e, 0xfa, + 0x34, 0x7c, 0x00, 0x5e, 0xfb, 0x35, 0x69, 0x00, + 0x5f, 0x0a, 0x36, 0xbc, 0x00, 0x5f, 0x2d, 0x34, + 0xe1, 0x00, 0x5f, 0x31, 0x35, 0xf3, 0x00, 0x5f, + 0x38, 0x4e, 0x94, 0x00, 0x5f, 0x45, 0x37, 0xce, + 0x00, 0x5f, 0x50, 0x3c, 0x1f, 0x00, 0x5f, 0x62, + 0x4e, 0x5f, 0x00, 0x5f, 0x69, 0x35, 0xd7, 0x00, + 0x5f, 0x6b, 0x36, 0x68, 0x00, 0x5f, 0x80, 0x35, + 0x5d, 0x00, 0x5f, 0x98, 0x34, 0xe2, 0x00, 0x5f, + 0xa1, 0x4e, 0x95, 0x00, 0x5f, 0xae, 0x36, 0xa8, + 0x00, 0x5f, 0xb5, 0x36, 0x69, 0x00, 0x5f, 0xbd, + 0x1d, 0xea, 0x00, 0x5f, 0xcd, 0x36, 0x91, 0x00, + 0x5f, 0xd8, 0x36, 0xd1, 0x00, 0x5f, 0xd9, 0x36, + 0xd2, 0x00, 0x5f, 0xdd, 0x4e, 0x96, 0x00, 0x60, + 0x25, 0x35, 0x90, 0x00, 0x60, 0x50, 0x35, 0x99, + 0x00, 0x60, 0x62, 0x1d, 0xe0, 0x00, 0x60, 0x65, + 0x34, 0xa4, 0x00, 0x60, 0x75, 0x35, 0xac, 0x00, + 0x60, 0x94, 0x05, 0x79, 0x00, 0x60, 0x97, 0x1e, + 0x94, 0x00, 0x60, 0x9e, 0x54, 0x36, 0x00, 0x60, + 0xa4, 0x3c, 0x20, 0x00, 0x60, 0xb2, 0x34, 0xb3, + 0x00, 0x60, 0xc5, 0x36, 0x12, 0x00, 0x60, 0xd8, + 0x34, 0xe3, 0x00, 0x61, 0x08, 0x1e, 0x7a, 0x00, + 0x61, 0x09, 0x36, 0xf3, 0x00, 0x61, 0x0f, 0x35, + 0x47, 0x00, 0x61, 0x3d, 0x34, 0xe4, 0x00, 0x61, + 0x48, 0x4e, 0x60, 0x00, 0x61, 0x4c, 0x35, 0xc4, + 0x00, 0x61, 0x4e, 0x34, 0x2c, 0x00, 0x61, 0x62, + 0x4e, 0x97, 0x00, 0x61, 0x67, 0x1d, 0xf5, 0x00, + 0x61, 0x68, 0x34, 0x10, 0x00, 0x61, 0x8e, 0x0b, + 0x00, 0x00, 0x61, 0x90, 0x37, 0x10, 0x00, 0x61, + 0xa4, 0x34, 0xbd, 0x00, 0x61, 0xb2, 0x35, 0xb6, + 0x00, 0x61, 0xf2, 0x34, 0x39, 0x00, 0x61, 0xf8, + 0x4e, 0x99, 0x00, 0x61, 0xfe, 0x34, 0xe5, 0x00, + 0x62, 0x10, 0x36, 0x2b, 0x00, 0x62, 0x3b, 0x36, + 0xeb, 0x00, 0x62, 0x3f, 0x36, 0xd3, 0x00, 0x62, + 0x40, 0x36, 0x02, 0x00, 0x62, 0x41, 0x1f, 0x37, + 0x00, 0x62, 0x47, 0x36, 0x3b, 0x00, 0x62, 0x48, + 0x1e, 0xc2, 0x00, 0x62, 0x49, 0x1e, 0x63, 0x00, + 0x62, 0x68, 0x34, 0xe6, 0x00, 0x62, 0x71, 0x35, + 0x45, 0x00, 0x62, 0xb1, 0x36, 0xc5, 0x00, 0x62, + 0xcc, 0x37, 0x32, 0x00, 0x62, 0xcf, 0x34, 0xe7, + 0x00, 0x62, 0xd0, 0x1d, 0xe1, 0x00, 0x62, 0xd2, + 0x35, 0x93, 0x00, 0x62, 0xd4, 0x13, 0x5d, 0x00, + 0x62, 0xf3, 0x1f, 0x21, 0x00, 0x62, 0xf7, 0x34, + 0x88, 0x00, 0x63, 0x3a, 0x4f, 0x3e, 0x00, 0x63, + 0x3d, 0x1e, 0x62, 0x00, 0x63, 0x4c, 0x34, 0x5d, + 0x00, 0x63, 0x57, 0x1e, 0x3f, 0x00, 0x63, 0x67, + 0x34, 0xc3, 0x00, 0x63, 0x68, 0x35, 0xec, 0x00, + 0x63, 0x69, 0x1e, 0x95, 0x00, 0x63, 0x6e, 0x34, + 0x9d, 0x00, 0x63, 0x72, 0x1d, 0xfc, 0x00, 0x63, + 0x83, 0x36, 0x43, 0x00, 0x63, 0x88, 0x35, 0xf6, + 0x00, 0x63, 0x92, 0x34, 0xaf, 0x00, 0x63, 0xa1, + 0x35, 0xd8, 0x00, 0x63, 0xa7, 0x35, 0xc6, 0x00, + 0x63, 0xc3, 0x1f, 0x27, 0x00, 0x63, 0xc6, 0x37, + 0x34, 0x00, 0x63, 0xf4, 0x35, 0x57, 0x00, 0x64, + 0x06, 0x1e, 0x96, 0x00, 0x64, 0x0f, 0x34, 0xe9, + 0x00, 0x64, 0x1c, 0x37, 0x33, 0x00, 0x64, 0x28, + 0x37, 0x35, 0x00, 0x64, 0x42, 0x34, 0x9e, 0x00, + 0x64, 0x69, 0x36, 0xd7, 0x00, 0x64, 0x6f, 0x4f, + 0x28, 0x00, 0x64, 0x7a, 0x1e, 0x21, 0x00, 0x64, + 0xb0, 0x1e, 0x24, 0x00, 0x64, 0xe2, 0x1e, 0x45, + 0x00, 0x64, 0xf2, 0x34, 0xea, 0x00, 0x64, 0xf6, + 0x4e, 0x9e, 0x00, 0x65, 0x1d, 0x34, 0xe8, 0x00, + 0x65, 0x4f, 0x0d, 0xc4, 0x00, 0x65, 0x5d, 0x34, + 0xeb, 0x00, 0x65, 0x5e, 0x4e, 0xa1, 0x00, 0x65, + 0x62, 0x34, 0x71, 0x00, 0x65, 0x77, 0x36, 0xb3, + 0x00, 0x65, 0x83, 0x1e, 0x98, 0x00, 0x65, 0x87, + 0x4e, 0xa3, 0x00, 0x65, 0x89, 0x4e, 0xa4, 0x00, + 0x65, 0x8e, 0x4e, 0xa6, 0x00, 0x65, 0x90, 0x34, + 0xb5, 0x00, 0x65, 0x9c, 0x35, 0xed, 0x00, 0x65, + 0xa7, 0x4f, 0x41, 0x00, 0x65, 0xbc, 0x35, 0x5c, + 0x00, 0x65, 0xc5, 0x37, 0x08, 0x00, 0x65, 0xdf, + 0x54, 0xbe, 0x00, 0x65, 0xe1, 0x4e, 0xa9, 0x00, + 0x65, 0xe2, 0x06, 0x37, 0x00, 0x66, 0x0e, 0x36, + 0xe4, 0x00, 0x66, 0x1e, 0x21, 0x1c, 0x00, 0x66, + 0x5f, 0x34, 0xec, 0x00, 0x66, 0x66, 0x1d, 0xe2, + 0x00, 0x66, 0x67, 0x4e, 0xaa, 0x00, 0x66, 0x69, + 0x36, 0xa5, 0x00, 0x66, 0x6e, 0x4e, 0xab, 0x00, + 0x66, 0x74, 0x0a, 0x56, 0x00, 0x66, 0x77, 0x39, + 0x11, 0x00, 0x66, 0x81, 0x35, 0xa0, 0x00, 0x66, + 0x91, 0x34, 0x28, 0x00, 0x66, 0x96, 0x36, 0x5e, + 0x00, 0x66, 0x97, 0x35, 0x46, 0x00, 0x66, 0xb5, + 0x54, 0xda, 0x00, 0x66, 0xc1, 0x1f, 0x38, 0x00, + 0x66, 0xd9, 0x1e, 0x13, 0x00, 0x66, 0xdc, 0x36, + 0xfd, 0x00, 0x66, 0xf4, 0x34, 0x81, 0x00, 0x66, + 0xf5, 0x37, 0x3b, 0x00, 0x66, 0xf8, 0x36, 0x03, + 0x00, 0x66, 0xfb, 0x37, 0xcd, 0x00, 0x66, 0xfc, + 0x37, 0x20, 0x00, 0x67, 0x00, 0x4e, 0xaf, 0x00, + 0x67, 0x08, 0x35, 0xb2, 0x00, 0x67, 0x09, 0x36, + 0xf7, 0x00, 0x67, 0x0b, 0x36, 0xc6, 0x00, 0x67, + 0x0d, 0x36, 0xb7, 0x00, 0x67, 0x15, 0x36, 0x6f, + 0x00, 0x67, 0x17, 0x0f, 0xd5, 0x00, 0x67, 0x1b, + 0x36, 0xd4, 0x00, 0x67, 0x1d, 0x36, 0x6b, 0x00, + 0x67, 0x1f, 0x35, 0x86, 0x00, 0x67, 0x53, 0x1e, + 0x0f, 0x00, 0x67, 0x56, 0x4f, 0x3a, 0x00, 0x67, + 0x5e, 0x37, 0x3c, 0x00, 0x67, 0x61, 0x4e, 0xb0, + 0x00, 0x67, 0x7e, 0x34, 0x95, 0x00, 0x67, 0xa6, + 0x1e, 0x99, 0x00, 0x67, 0xa9, 0x34, 0xed, 0x00, + 0x67, 0xc4, 0x4e, 0xb1, 0x00, 0x67, 0xca, 0x1e, + 0x65, 0x00, 0x67, 0xd4, 0x34, 0x91, 0x00, 0x67, + 0xe7, 0x34, 0xee, 0x00, 0x67, 0xf1, 0x36, 0x65, + 0x00, 0x68, 0x01, 0x21, 0x2e, 0x00, 0x68, 0x02, + 0x4e, 0xb2, 0x00, 0x68, 0x13, 0x1e, 0x25, 0x00, + 0x68, 0x1f, 0x4e, 0x61, 0x00, 0x68, 0x21, 0x34, + 0x82, 0x00, 0x68, 0x43, 0x34, 0xac, 0x00, 0x68, + 0x52, 0x21, 0x2c, 0x00, 0x68, 0x5d, 0x34, 0xc5, + 0x00, 0x68, 0x7a, 0x36, 0xf0, 0x00, 0x68, 0x81, + 0x37, 0x09, 0x00, 0x68, 0x85, 0x0d, 0x15, 0x00, + 0x68, 0x8d, 0x37, 0x3e, 0x00, 0x68, 0x97, 0x4f, + 0x37, 0x00, 0x68, 0x9b, 0x1e, 0x9b, 0x00, 0x68, + 0x9d, 0x37, 0x3d, 0x00, 0x68, 0xa2, 0x1e, 0x19, + 0x00, 0x68, 0xc8, 0x37, 0xcc, 0x00, 0x68, 0xda, + 0x1e, 0x38, 0x00, 0x69, 0x0d, 0x34, 0x99, 0x00, + 0x69, 0x30, 0x34, 0xf0, 0x00, 0x69, 0x3d, 0x4e, + 0xb3, 0x00, 0x69, 0x5e, 0x4e, 0xb4, 0x00, 0x69, + 0x62, 0x1e, 0x58, 0x00, 0x69, 0x6b, 0x34, 0xef, + 0x00, 0x69, 0x6f, 0x34, 0x94, 0x00, 0x69, 0x82, + 0x34, 0x5b, 0x00, 0x69, 0x8a, 0x1e, 0x06, 0x00, + 0x69, 0x94, 0x1e, 0x84, 0x00, 0x69, 0xa7, 0x34, + 0xf1, 0x00, 0x69, 0xbb, 0x37, 0x43, 0x00, 0x69, + 0xc1, 0x35, 0x9a, 0x00, 0x69, 0xcb, 0x35, 0xc7, + 0x00, 0x69, 0xcc, 0x1e, 0x40, 0x00, 0x69, 0xd9, + 0x36, 0xdd, 0x00, 0x69, 0xea, 0x35, 0x6f, 0x00, + 0x69, 0xfe, 0x55, 0x1f, 0x00, 0x6a, 0x0b, 0x1e, + 0x64, 0x00, 0x6a, 0x3d, 0x1e, 0x3a, 0x00, 0x6a, + 0x44, 0x34, 0xf2, 0x00, 0x6a, 0x55, 0x55, 0x25, + 0x00, 0x6a, 0x5f, 0x35, 0x87, 0x00, 0x6a, 0x73, + 0x37, 0xd4, 0x00, 0x6a, 0x8e, 0x34, 0x7e, 0x00, + 0x6a, 0x90, 0x34, 0xf3, 0x00, 0x6a, 0x9c, 0x4e, + 0xb6, 0x00, 0x6a, 0xdb, 0x06, 0xf3, 0x00, 0x6b, + 0x04, 0x0f, 0x5d, 0x00, 0x6b, 0x1d, 0x1d, 0xd7, + 0x00, 0x6b, 0x21, 0x35, 0xe7, 0x00, 0x6b, 0x24, + 0x3c, 0x22, 0x00, 0x6b, 0x4e, 0x36, 0x5b, 0x00, + 0x6b, 0x96, 0x36, 0x16, 0x00, 0x6b, 0xba, 0x08, + 0x74, 0x00, 0x6b, 0xbb, 0x34, 0x70, 0x00, 0x6c, + 0x08, 0x1f, 0x39, 0x00, 0x6c, 0x13, 0x34, 0xf5, + 0x00, 0x6c, 0x38, 0x4e, 0xba, 0x00, 0x6c, 0x3a, + 0x39, 0x62, 0x00, 0x6c, 0x72, 0x1f, 0x1e, 0x00, + 0x6c, 0xaa, 0x37, 0x48, 0x00, 0x6c, 0xbf, 0x05, + 0x0a, 0x00, 0x6c, 0xe1, 0x1e, 0x71, 0x00, 0x6c, + 0xe8, 0x36, 0x66, 0x00, 0x6d, 0x3e, 0x34, 0xae, + 0x00, 0x6d, 0x69, 0x35, 0xc8, 0x00, 0x6d, 0x6e, + 0x36, 0xb4, 0x00, 0x6d, 0x77, 0x05, 0x82, 0x00, + 0x6d, 0x78, 0x36, 0x1d, 0x00, 0x6d, 0x88, 0x36, + 0x0c, 0x00, 0x6d, 0xe4, 0x4e, 0xbd, 0x00, 0x6d, + 0xeb, 0x1d, 0xd5, 0x00, 0x6d, 0xfb, 0x36, 0x7c, + 0x00, 0x6e, 0x08, 0x4e, 0xbf, 0x00, 0x6e, 0x1a, + 0x09, 0x77, 0x00, 0x6e, 0x23, 0x1f, 0x3a, 0x00, + 0x6e, 0x2f, 0x35, 0xc9, 0x00, 0x6e, 0x6e, 0x1e, + 0x9d, 0x00, 0x6e, 0x72, 0x4e, 0xc0, 0x00, 0x6e, + 0x7e, 0x34, 0xcf, 0x00, 0x6e, 0x9d, 0x1e, 0x01, + 0x00, 0x6e, 0xa2, 0x1d, 0xd3, 0x00, 0x6e, 0xba, + 0x1e, 0x46, 0x00, 0x6e, 0xcb, 0x35, 0xe9, 0x00, + 0x6e, 0xd5, 0x4e, 0xc2, 0x00, 0x6e, 0xdb, 0x4e, + 0xc3, 0x00, 0x6e, 0xec, 0x1f, 0x3b, 0x00, 0x6e, + 0xfe, 0x34, 0xf8, 0x00, 0x6f, 0x11, 0x34, 0xf7, + 0x00, 0x6f, 0x22, 0x34, 0x14, 0x00, 0x6f, 0x23, + 0x0f, 0xc2, 0x00, 0x6f, 0x3e, 0x34, 0xf9, 0x00, + 0x6f, 0x51, 0x36, 0x9e, 0x00, 0x6f, 0x54, 0x35, + 0xb0, 0x00, 0x6f, 0x5b, 0x4e, 0xc4, 0x00, 0x6f, + 0x64, 0x4e, 0xc6, 0x00, 0x6f, 0x6e, 0x0b, 0xc8, + 0x00, 0x6f, 0x74, 0x4e, 0xc7, 0x00, 0x6f, 0x98, + 0x37, 0x47, 0x00, 0x6f, 0xef, 0x1e, 0x33, 0x00, + 0x6f, 0xf9, 0x39, 0x95, 0x00, 0x70, 0x15, 0x1e, + 0x6b, 0x00, 0x70, 0x1b, 0x37, 0x4a, 0x00, 0x70, + 0x1e, 0x1e, 0x51, 0x00, 0x70, 0x26, 0x1e, 0x3d, + 0x00, 0x70, 0x27, 0x36, 0x57, 0x00, 0x70, 0x4a, + 0x39, 0x98, 0x00, 0x70, 0x58, 0x1e, 0x57, 0x00, + 0x70, 0x70, 0x35, 0x6a, 0x00, 0x70, 0x78, 0x4f, + 0x2e, 0x00, 0x70, 0x7c, 0x1e, 0x10, 0x00, 0x70, + 0xad, 0x36, 0x5c, 0x00, 0x71, 0x49, 0x0f, 0xc3, + 0x00, 0x71, 0x4e, 0x1e, 0x26, 0x00, 0x71, 0x52, + 0x55, 0xad, 0x00, 0x71, 0x59, 0x35, 0x59, 0x00, + 0x71, 0x62, 0x37, 0x4b, 0x00, 0x71, 0x6e, 0x08, + 0xfd, 0x00, 0x71, 0x7d, 0x1e, 0x27, 0x00, 0x71, + 0x94, 0x1e, 0x7d, 0x00, 0x71, 0xb3, 0x39, 0xae, + 0x00, 0x71, 0xd0, 0x37, 0x0a, 0x00, 0x71, 0xff, + 0x34, 0xfa, 0x00, 0x72, 0x28, 0x15, 0xdf, 0x00, + 0x72, 0x2b, 0x3c, 0x26, 0x00, 0x72, 0x35, 0x09, + 0x0b, 0x00, 0x72, 0x36, 0x34, 0xb9, 0x00, 0x72, + 0x3a, 0x4f, 0x46, 0x00, 0x72, 0x3b, 0x37, 0x4c, + 0x00, 0x72, 0x3e, 0x4e, 0xc9, 0x00, 0x72, 0x4c, + 0x1e, 0x5b, 0x00, 0x72, 0x59, 0x1f, 0x1d, 0x00, + 0x72, 0xe1, 0x4f, 0x36, 0x00, 0x73, 0x1c, 0x37, + 0x4e, 0x00, 0x73, 0x2a, 0x0b, 0xb4, 0x00, 0x73, + 0x36, 0x36, 0xf8, 0x00, 0x73, 0x37, 0x1e, 0x7c, + 0x00, 0x73, 0x87, 0x37, 0x05, 0x00, 0x73, 0x8b, + 0x35, 0xa1, 0x00, 0x73, 0xca, 0x1e, 0x0b, 0x00, + 0x73, 0xce, 0x1e, 0xa0, 0x00, 0x73, 0xe5, 0x34, + 0xfb, 0x00, 0x73, 0xed, 0x34, 0xb1, 0x00, 0x74, + 0x22, 0x0b, 0x56, 0x00, 0x74, 0x32, 0x34, 0xfc, + 0x00, 0x74, 0x5f, 0x34, 0xfd, 0x00, 0x74, 0x62, + 0x21, 0x71, 0x00, 0x74, 0xb0, 0x35, 0x79, 0x00, + 0x74, 0xbd, 0x4e, 0xcd, 0x00, 0x74, 0xca, 0x37, + 0x4f, 0x00, 0x74, 0xd8, 0x55, 0xf6, 0x00, 0x74, + 0xdc, 0x35, 0x50, 0x00, 0x74, 0xe0, 0x34, 0xfe, + 0x00, 0x74, 0xef, 0x55, 0xfa, 0x00, 0x75, 0x04, + 0x1e, 0xa1, 0x00, 0x75, 0x0c, 0x34, 0xff, 0x00, + 0x75, 0x0d, 0x1e, 0xa2, 0x00, 0x75, 0x11, 0x1e, + 0x04, 0x00, 0x75, 0x15, 0x1e, 0xa3, 0x00, 0x75, + 0x26, 0x4f, 0x3b, 0x00, 0x75, 0x54, 0x36, 0xa4, + 0x00, 0x75, 0x5d, 0x4e, 0xce, 0x00, 0x75, 0xbc, + 0x4e, 0xcf, 0x00, 0x75, 0xc5, 0x36, 0xb1, 0x00, + 0x76, 0x08, 0x4e, 0xd1, 0x00, 0x76, 0x26, 0x1e, + 0x2d, 0x00, 0x76, 0x52, 0x1e, 0x7b, 0x00, 0x76, + 0x64, 0x4e, 0xd2, 0x00, 0x76, 0x69, 0x4e, 0xd3, + 0x00, 0x76, 0x72, 0x35, 0x00, 0x00, 0x76, 0x84, + 0x36, 0x79, 0x00, 0x76, 0x93, 0x1e, 0xa4, 0x00, + 0x76, 0xc6, 0x34, 0xc4, 0x00, 0x76, 0xca, 0x21, + 0x7b, 0x00, 0x76, 0xd4, 0x56, 0x1d, 0x00, 0x76, + 0xdb, 0x36, 0x2c, 0x00, 0x76, 0xdf, 0x36, 0xe5, + 0x00, 0x76, 0xf2, 0x36, 0xe9, 0x00, 0x76, 0xf4, + 0x36, 0x6e, 0x00, 0x77, 0x1e, 0x16, 0xb8, 0x00, + 0x77, 0x1f, 0x36, 0x1e, 0x00, 0x77, 0x37, 0x4e, + 0xd5, 0x00, 0x77, 0x3a, 0x34, 0xa6, 0x00, 0x77, + 0x7e, 0x4e, 0xd6, 0x00, 0x77, 0x8d, 0x56, 0x2e, + 0x00, 0x77, 0xa2, 0x56, 0x2f, 0x00, 0x77, 0xa5, + 0x1e, 0x6e, 0x00, 0x77, 0xac, 0x34, 0x92, 0x00, + 0x77, 0xe9, 0x35, 0xa4, 0x00, 0x78, 0x32, 0x36, + 0xc7, 0x00, 0x78, 0x3a, 0x36, 0x7f, 0x00, 0x78, + 0x5d, 0x36, 0x0d, 0x00, 0x78, 0x6c, 0x34, 0x83, + 0x00, 0x78, 0x7c, 0x1e, 0xa5, 0x00, 0x78, 0x91, + 0x0d, 0x7e, 0x00, 0x78, 0xd4, 0x35, 0x02, 0x00, + 0x78, 0xe8, 0x36, 0xda, 0x00, 0x78, 0xef, 0x35, + 0x4b, 0x00, 0x79, 0x2a, 0x35, 0x01, 0x00, 0x79, + 0x34, 0x3a, 0x38, 0x00, 0x79, 0x3a, 0x08, 0xd4, + 0x00, 0x79, 0x3c, 0x21, 0x83, 0x00, 0x79, 0x3e, + 0x34, 0x24, 0x00, 0x79, 0x40, 0x37, 0x57, 0x00, + 0x79, 0x41, 0x1d, 0xf4, 0x00, 0x79, 0x47, 0x1d, + 0xeb, 0x00, 0x79, 0x48, 0x06, 0x41, 0x00, 0x79, + 0x49, 0x34, 0x21, 0x00, 0x79, 0x50, 0x0f, 0x1e, + 0x00, 0x79, 0x53, 0x37, 0x58, 0x00, 0x79, 0x56, + 0x34, 0x2f, 0x00, 0x79, 0x5d, 0x09, 0x55, 0x00, + 0x79, 0x5e, 0x0a, 0x06, 0x00, 0x79, 0x62, 0x1f, + 0x29, 0x00, 0x79, 0x65, 0x09, 0xb5, 0x00, 0x79, + 0x8d, 0x05, 0x52, 0x00, 0x79, 0x8e, 0x34, 0x3b, + 0x00, 0x79, 0x8f, 0x21, 0x87, 0x00, 0x79, 0xa7, + 0x4e, 0xd7, 0x00, 0x79, 0xae, 0x37, 0x5b, 0x00, + 0x79, 0xb0, 0x1e, 0x59, 0x00, 0x79, 0xb1, 0x4e, + 0xd8, 0x00, 0x79, 0xba, 0x35, 0x03, 0x00, 0x79, + 0xe4, 0x1e, 0x5d, 0x00, 0x7a, 0x0b, 0x36, 0x78, + 0x00, 0x7a, 0x17, 0x1e, 0x66, 0x00, 0x7a, 0x19, + 0x35, 0x04, 0x00, 0x7a, 0x31, 0x1e, 0xa6, 0x00, + 0x7a, 0x40, 0x08, 0x04, 0x00, 0x7a, 0x60, 0x3a, + 0x4e, 0x00, 0x7a, 0x74, 0x34, 0x7a, 0x00, 0x7a, + 0x7a, 0x35, 0xa7, 0x00, 0x7a, 0x7f, 0x1f, 0x25, + 0x00, 0x7a, 0x81, 0x34, 0x3d, 0x00, 0x7a, 0x95, + 0x35, 0x05, 0x00, 0x7a, 0x97, 0x1f, 0x3c, 0x00, + 0x7a, 0xae, 0x34, 0x77, 0x00, 0x7a, 0xbe, 0x4e, + 0xd9, 0x00, 0x7a, 0xc6, 0x3c, 0x27, 0x00, 0x7a, + 0xc8, 0x4f, 0x3d, 0x00, 0x7b, 0x08, 0x1f, 0x1f, + 0x00, 0x7b, 0x51, 0x36, 0x63, 0x00, 0x7b, 0x75, + 0x4f, 0x2a, 0x00, 0x7b, 0x99, 0x1e, 0xa8, 0x00, + 0x7b, 0xad, 0x1f, 0x26, 0x00, 0x7b, 0xb8, 0x1e, + 0x5f, 0x00, 0x7b, 0xc0, 0x34, 0x2e, 0x00, 0x7b, + 0xc7, 0x1f, 0x2b, 0x00, 0x7b, 0xc9, 0x36, 0x61, + 0x00, 0x7b, 0xdd, 0x1f, 0x3d, 0x00, 0x7b, 0xe0, + 0x4e, 0xda, 0x00, 0x7c, 0x14, 0x37, 0x5f, 0x00, + 0x7c, 0x3e, 0x1f, 0x2d, 0x00, 0x7c, 0x3f, 0x36, + 0xc2, 0x00, 0x7c, 0x4d, 0x36, 0x36, 0x00, 0x7c, + 0x50, 0x37, 0x61, 0x00, 0x7c, 0x58, 0x37, 0x62, + 0x00, 0x7c, 0x69, 0x56, 0xaa, 0x00, 0x7c, 0x7e, + 0x1e, 0x78, 0x00, 0x7c, 0x82, 0x4f, 0x30, 0x00, + 0x7c, 0x89, 0x34, 0xbe, 0x00, 0x7c, 0x90, 0x1e, + 0xa9, 0x00, 0x7c, 0xae, 0x1e, 0xaa, 0x00, 0x7c, + 0xbe, 0x0a, 0x5e, 0x00, 0x7c, 0xd6, 0x0c, 0x76, + 0x00, 0x7c, 0xf2, 0x35, 0x06, 0x00, 0x7d, 0x04, + 0x36, 0xee, 0x00, 0x7d, 0x09, 0x4e, 0xdc, 0x00, + 0x7d, 0x0b, 0x36, 0xec, 0x00, 0x7d, 0x0d, 0x36, + 0x94, 0x00, 0x7d, 0x1a, 0x35, 0x91, 0x00, 0x7d, + 0x1b, 0x34, 0xbf, 0x00, 0x7d, 0x42, 0x35, 0xf8, + 0x00, 0x7d, 0x46, 0x37, 0x63, 0x00, 0x7d, 0x5c, + 0x21, 0x90, 0x00, 0x7d, 0x5e, 0x34, 0x84, 0x00, + 0x7d, 0x63, 0x37, 0x64, 0x00, 0x7d, 0x73, 0x35, + 0x07, 0x00, 0x7d, 0x9b, 0x1e, 0xab, 0x00, 0x7d, + 0x9f, 0x1e, 0xad, 0x00, 0x7d, 0xae, 0x1e, 0xac, + 0x00, 0x7d, 0xb2, 0x4e, 0xdd, 0x00, 0x7d, 0xcb, + 0x34, 0xb6, 0x00, 0x7d, 0xcf, 0x34, 0xa0, 0x00, + 0x7d, 0xdd, 0x35, 0x08, 0x00, 0x7d, 0xe8, 0x36, + 0xbf, 0x00, 0x7d, 0xe9, 0x35, 0x7a, 0x00, 0x7d, + 0xef, 0x34, 0x62, 0x00, 0x7d, 0xf4, 0x0f, 0xc5, + 0x00, 0x7e, 0x09, 0x47, 0xbe, 0x00, 0x7e, 0x1b, + 0x36, 0x9b, 0x00, 0x7e, 0x22, 0x37, 0x65, 0x00, + 0x7e, 0x2b, 0x36, 0xc8, 0x00, 0x7e, 0x35, 0x35, + 0x09, 0x00, 0x7e, 0x41, 0x34, 0x40, 0x00, 0x7e, + 0x43, 0x37, 0x69, 0x00, 0x7e, 0x6d, 0x36, 0xe1, + 0x00, 0x7e, 0x8c, 0x37, 0x6a, 0x00, 0x7f, 0x3e, + 0x4e, 0xdf, 0x00, 0x7f, 0x50, 0x37, 0x6b, 0x00, + 0x7f, 0x61, 0x3c, 0x28, 0x00, 0x7f, 0x6a, 0x34, + 0x89, 0x00, 0x7f, 0x6e, 0x36, 0x60, 0x00, 0x7f, + 0x72, 0x09, 0x7a, 0x00, 0x7f, 0x80, 0x56, 0xda, + 0x00, 0x7f, 0x8a, 0x0f, 0x3d, 0x00, 0x7f, 0xa1, + 0x36, 0x3d, 0x00, 0x7f, 0xae, 0x35, 0x0a, 0x00, + 0x7f, 0xbd, 0x04, 0xcb, 0x00, 0x7f, 0xc1, 0x34, + 0x6a, 0x00, 0x7f, 0xc5, 0x37, 0x6f, 0x00, 0x7f, + 0xc6, 0x37, 0x70, 0x00, 0x7f, 0xcc, 0x37, 0x01, + 0x00, 0x7f, 0xd2, 0x35, 0xf9, 0x00, 0x7f, 0xd4, + 0x1e, 0xae, 0x00, 0x7f, 0xe0, 0x1e, 0x20, 0x00, + 0x7f, 0xe1, 0x35, 0x0b, 0x00, 0x7f, 0xe9, 0x1f, + 0x3e, 0x00, 0x7f, 0xeb, 0x1d, 0xe9, 0x00, 0x7f, + 0xf0, 0x1d, 0xe8, 0x00, 0x7f, 0xfb, 0x36, 0xd8, + 0x00, 0x7f, 0xfc, 0x34, 0xc8, 0x00, 0x80, 0x00, + 0x1e, 0x7e, 0x00, 0x80, 0x03, 0x34, 0x85, 0x00, + 0x80, 0x05, 0x34, 0x25, 0x00, 0x80, 0x12, 0x4e, + 0xe1, 0x00, 0x80, 0x15, 0x35, 0xca, 0x00, 0x80, + 0x17, 0x36, 0xea, 0x00, 0x80, 0x36, 0x34, 0xc7, + 0x00, 0x80, 0x56, 0x36, 0x2d, 0x00, 0x80, 0x5a, + 0x35, 0x0c, 0x00, 0x80, 0x5f, 0x35, 0x0d, 0x00, + 0x80, 0x61, 0x34, 0xa1, 0x00, 0x80, 0x6f, 0x34, + 0xcd, 0x00, 0x80, 0x70, 0x35, 0x0f, 0x00, 0x80, + 0x71, 0x3c, 0x29, 0x00, 0x80, 0x73, 0x35, 0x0e, + 0x00, 0x80, 0x74, 0x34, 0xa7, 0x00, 0x80, 0x76, + 0x35, 0x10, 0x00, 0x80, 0x77, 0x34, 0x9a, 0x00, + 0x80, 0x7e, 0x34, 0xce, 0x00, 0x80, 0x87, 0x36, + 0x9c, 0x00, 0x80, 0x89, 0x36, 0x8f, 0x00, 0x80, + 0x96, 0x36, 0x0e, 0x00, 0x80, 0x9e, 0x3c, 0x2a, + 0x00, 0x80, 0xa9, 0x35, 0xb8, 0x00, 0x80, 0xba, + 0x36, 0x97, 0x00, 0x80, 0xd6, 0x4e, 0xe3, 0x00, + 0x80, 0xde, 0x36, 0xc9, 0x00, 0x81, 0x06, 0x36, + 0x34, 0x00, 0x81, 0x08, 0x34, 0xc6, 0x00, 0x81, + 0x09, 0x4e, 0xe4, 0x00, 0x81, 0x29, 0x4e, 0xe5, + 0x00, 0x81, 0x53, 0x35, 0x11, 0x00, 0x81, 0x54, + 0x35, 0xcb, 0x00, 0x81, 0x70, 0x35, 0xd1, 0x00, + 0x81, 0x71, 0x4f, 0x33, 0x00, 0x81, 0x7f, 0x1e, + 0x30, 0x00, 0x81, 0x8a, 0x35, 0x12, 0x00, 0x81, + 0xb5, 0x35, 0x13, 0x00, 0x81, 0xcd, 0x35, 0x14, + 0x00, 0x81, 0xed, 0x34, 0x26, 0x00, 0x82, 0x00, + 0x57, 0x0f, 0x00, 0x82, 0x0c, 0x4e, 0xe6, 0x00, + 0x82, 0x18, 0x35, 0x7f, 0x00, 0x82, 0x1b, 0x4e, + 0xe7, 0x00, 0x82, 0x1c, 0x34, 0x93, 0x00, 0x82, + 0x1f, 0x35, 0xb3, 0x00, 0x82, 0x2e, 0x1e, 0xaf, + 0x00, 0x82, 0x39, 0x34, 0x9f, 0x00, 0x82, 0x40, + 0x4e, 0xe8, 0x00, 0x82, 0x47, 0x34, 0xab, 0x00, + 0x82, 0x58, 0x37, 0x74, 0x00, 0x82, 0x79, 0x37, + 0x77, 0x00, 0x82, 0x8d, 0x1e, 0xb0, 0x00, 0x82, + 0x92, 0x4f, 0x44, 0x00, 0x82, 0xa6, 0x1f, 0x19, + 0x00, 0x82, 0xb1, 0x35, 0x62, 0x00, 0x82, 0xbd, + 0x05, 0x6a, 0x00, 0x82, 0xc5, 0x35, 0x77, 0x00, + 0x82, 0xd2, 0x1e, 0xb1, 0x00, 0x82, 0xe3, 0x37, + 0x78, 0x00, 0x83, 0x23, 0x1e, 0xb2, 0x00, 0x83, + 0x28, 0x1f, 0x1a, 0x00, 0x83, 0x52, 0x35, 0xcc, + 0x00, 0x83, 0x75, 0x1e, 0xb3, 0x00, 0x83, 0xbd, + 0x37, 0x7c, 0x00, 0x83, 0xd3, 0x35, 0x63, 0x00, + 0x83, 0xd4, 0x4e, 0xea, 0x00, 0x83, 0xdc, 0x35, + 0xda, 0x00, 0x83, 0xdf, 0x1e, 0x4b, 0x00, 0x83, + 0xf2, 0x35, 0x15, 0x00, 0x84, 0x0c, 0x36, 0xca, + 0x00, 0x84, 0x0f, 0x4e, 0xeb, 0x00, 0x84, 0x20, + 0x37, 0x7b, 0x00, 0x84, 0x22, 0x1f, 0x3f, 0x00, + 0x84, 0x57, 0x34, 0x37, 0x00, 0x84, 0x5b, 0x1d, + 0xe4, 0x00, 0x84, 0x5c, 0x57, 0x45, 0x00, 0x84, + 0x7a, 0x34, 0xba, 0x00, 0x84, 0xea, 0x4e, 0xed, + 0x00, 0x84, 0xec, 0x1e, 0x72, 0x00, 0x84, 0xee, + 0x0f, 0xc7, 0x00, 0x84, 0xf4, 0x37, 0x7d, 0x00, + 0x85, 0x11, 0x36, 0xbd, 0x00, 0x85, 0x17, 0x1e, + 0xb4, 0x00, 0x85, 0x3d, 0x1e, 0x6d, 0x00, 0x85, + 0x43, 0x36, 0xa6, 0x00, 0x85, 0x51, 0x4e, 0xef, + 0x00, 0x85, 0x55, 0x35, 0x16, 0x00, 0x85, 0x5d, + 0x57, 0x64, 0x00, 0x85, 0x63, 0x4e, 0xf0, 0x00, + 0x85, 0x84, 0x36, 0x99, 0x00, 0x85, 0x87, 0x37, + 0x7f, 0x00, 0x85, 0xa9, 0x1e, 0x08, 0x00, 0x85, + 0xaf, 0x1e, 0x15, 0x00, 0x85, 0xcf, 0x4e, 0xf1, + 0x00, 0x85, 0xd5, 0x35, 0x17, 0x00, 0x85, 0xe4, + 0x36, 0x85, 0x00, 0x85, 0xf7, 0x1e, 0x16, 0x00, + 0x86, 0x12, 0x21, 0xa4, 0x00, 0x86, 0x2d, 0x37, + 0x04, 0x00, 0x86, 0x4e, 0x4e, 0xf2, 0x00, 0x86, + 0x50, 0x35, 0x8c, 0x00, 0x86, 0x54, 0x4f, 0x32, + 0x00, 0x86, 0x5c, 0x0f, 0x82, 0x00, 0x86, 0x5e, + 0x35, 0xa6, 0x00, 0x86, 0x62, 0x4e, 0xf3, 0x00, + 0x86, 0x8a, 0x4e, 0xf4, 0x00, 0x86, 0xdb, 0x34, + 0x5e, 0x00, 0x86, 0xf8, 0x1e, 0x35, 0x00, 0x87, + 0x03, 0x4f, 0x48, 0x00, 0x87, 0x1a, 0x35, 0x18, + 0x00, 0x87, 0x37, 0x37, 0x82, 0x00, 0x87, 0x3b, + 0x37, 0x83, 0x00, 0x87, 0x55, 0x1e, 0x1d, 0x00, + 0x87, 0x59, 0x1f, 0x40, 0x00, 0x87, 0x82, 0x1e, + 0xb6, 0x00, 0x87, 0xa3, 0x57, 0xaa, 0x00, 0x87, + 0xbd, 0x37, 0x85, 0x00, 0x87, 0xd2, 0x1e, 0xb7, + 0x00, 0x88, 0x03, 0x3b, 0x03, 0x00, 0x88, 0x05, + 0x37, 0x84, 0x00, 0x88, 0x0e, 0x1f, 0x41, 0x00, + 0x88, 0x36, 0x35, 0x19, 0x00, 0x88, 0x42, 0x4e, + 0xf5, 0x00, 0x88, 0x46, 0x35, 0xfa, 0x00, 0x88, + 0x4b, 0x57, 0xc3, 0x00, 0x88, 0x53, 0x35, 0xfd, + 0x00, 0x88, 0x5b, 0x34, 0x66, 0x00, 0x88, 0x5e, + 0x35, 0x53, 0x00, 0x88, 0x63, 0x35, 0x48, 0x00, + 0x88, 0x70, 0x36, 0x27, 0x00, 0x88, 0x77, 0x4e, + 0xf6, 0x00, 0x88, 0x9e, 0x35, 0x1a, 0x00, 0x88, + 0xd8, 0x35, 0x1b, 0x00, 0x88, 0xf4, 0x35, 0x1c, + 0x00, 0x89, 0x0a, 0x1e, 0xb8, 0x00, 0x89, 0x10, + 0x34, 0x13, 0x00, 0x89, 0x1c, 0x37, 0xcb, 0x00, + 0x89, 0x2b, 0x35, 0x1d, 0x00, 0x89, 0x3b, 0x35, + 0x1e, 0x00, 0x89, 0x41, 0x4e, 0xf7, 0x00, 0x89, + 0x56, 0x1d, 0xdd, 0x00, 0x89, 0x6a, 0x35, 0x1f, + 0x00, 0x89, 0x6f, 0x35, 0x20, 0x00, 0x89, 0x81, + 0x36, 0xff, 0x00, 0x89, 0x86, 0x36, 0xb8, 0x00, + 0x89, 0x87, 0x36, 0x95, 0x00, 0x89, 0x96, 0x34, + 0x22, 0x00, 0x89, 0xaa, 0x34, 0x9b, 0x00, 0x89, + 0xaf, 0x1e, 0xb9, 0x00, 0x89, 0xbd, 0x37, 0x8a, + 0x00, 0x89, 0xd2, 0x05, 0xaf, 0x00, 0x8a, 0x0a, + 0x36, 0x24, 0x00, 0x8a, 0x12, 0x37, 0xd7, 0x00, + 0x8a, 0x1d, 0x35, 0x21, 0x00, 0x8a, 0x1f, 0x34, + 0x96, 0x00, 0x8a, 0x3b, 0x1e, 0x3c, 0x00, 0x8a, + 0x55, 0x36, 0xaf, 0x00, 0x8a, 0x6e, 0x1e, 0x28, + 0x00, 0x8a, 0x8d, 0x36, 0x92, 0x00, 0x8a, 0x95, + 0x34, 0xa3, 0x00, 0x8a, 0xa0, 0x36, 0x2f, 0x00, + 0x8a, 0xa4, 0x35, 0xc2, 0x00, 0x8a, 0xb9, 0x34, + 0xb7, 0x00, 0x8a, 0xbf, 0x36, 0x6d, 0x00, 0x8a, + 0xcb, 0x36, 0x30, 0x00, 0x8a, 0xdb, 0x37, 0x8b, + 0x00, 0x8a, 0xde, 0x1e, 0xba, 0x00, 0x8a, 0xed, + 0x0f, 0x0b, 0x00, 0x8a, 0xee, 0x35, 0xe3, 0x00, + 0x8a, 0xf8, 0x09, 0x7e, 0x00, 0x8a, 0xfa, 0x1d, + 0xfe, 0x00, 0x8b, 0x01, 0x04, 0xfc, 0x00, 0x8b, + 0x04, 0x36, 0x86, 0x00, 0x8b, 0x0e, 0x1e, 0x56, + 0x00, 0x8b, 0x19, 0x35, 0xb9, 0x00, 0x8b, 0x1b, + 0x35, 0xcd, 0x00, 0x8b, 0x1d, 0x34, 0x8d, 0x00, + 0x8b, 0x2c, 0x1e, 0x69, 0x00, 0x8b, 0x39, 0x06, + 0xd8, 0x00, 0x8b, 0x3e, 0x37, 0x8c, 0x00, 0x8b, + 0x41, 0x1e, 0xbb, 0x00, 0x8b, 0x56, 0x4e, 0xf8, + 0x00, 0x8b, 0x5a, 0x37, 0x8d, 0x00, 0x8b, 0x5c, + 0x4e, 0xfa, 0x00, 0x8b, 0x7f, 0x52, 0x52, 0x00, + 0x8c, 0x6a, 0x4e, 0xfd, 0x00, 0x8c, 0x79, 0x4e, + 0xfe, 0x00, 0x8c, 0x9b, 0x58, 0x37, 0x00, 0x8c, + 0xa0, 0x36, 0xb5, 0x00, 0x8c, 0xa7, 0x34, 0xb8, + 0x00, 0x8c, 0xa8, 0x35, 0x64, 0x00, 0x8c, 0xab, + 0x34, 0x72, 0x00, 0x8c, 0xc7, 0x35, 0xe5, 0x00, + 0x8c, 0xca, 0x36, 0x4c, 0x00, 0x8c, 0xd3, 0x0d, + 0xc2, 0x00, 0x8c, 0xed, 0x1e, 0x4c, 0x00, 0x8c, + 0xfc, 0x34, 0x86, 0x00, 0x8d, 0x05, 0x35, 0x22, + 0x00, 0x8d, 0x08, 0x34, 0x34, 0x00, 0x8d, 0x0f, + 0x35, 0x23, 0x00, 0x8d, 0x67, 0x4f, 0x00, 0x00, + 0x8d, 0x70, 0x36, 0x46, 0x00, 0x8d, 0x73, 0x37, + 0x8e, 0x00, 0x8d, 0x77, 0x35, 0x88, 0x00, 0x8d, + 0x99, 0x37, 0x8f, 0x00, 0x8d, 0xda, 0x1e, 0xbc, + 0x00, 0x8d, 0xdd, 0x35, 0x94, 0x00, 0x8d, 0xf3, + 0x34, 0xa8, 0x00, 0x8e, 0x09, 0x1e, 0xbd, 0x00, + 0x8e, 0x34, 0x37, 0x91, 0x00, 0x8e, 0x4a, 0x37, + 0x92, 0x00, 0x8e, 0x8d, 0x36, 0xef, 0x00, 0x8e, + 0x91, 0x35, 0x25, 0x00, 0x8e, 0xa1, 0x35, 0x26, + 0x00, 0x8e, 0xcc, 0x34, 0x76, 0x00, 0x8e, 0xd4, + 0x3b, 0x4a, 0x00, 0x8f, 0x03, 0x4f, 0x02, 0x00, + 0x8f, 0x13, 0x1e, 0xbe, 0x00, 0x8f, 0x29, 0x34, + 0xb0, 0x00, 0x8f, 0x2f, 0x34, 0x90, 0x00, 0x8f, + 0x38, 0x36, 0xf5, 0x00, 0x8f, 0x44, 0x35, 0x75, + 0x00, 0x8f, 0xb6, 0x3c, 0x2b, 0x00, 0x8f, 0xbb, + 0x20, 0x4b, 0x00, 0x8f, 0xbc, 0x35, 0xd3, 0x00, + 0x8f, 0xbf, 0x1e, 0x37, 0x00, 0x8f, 0xc2, 0x1d, + 0xd6, 0x00, 0x8f, 0xc4, 0x1f, 0x2c, 0x00, 0x8f, + 0xc5, 0x36, 0x26, 0x00, 0x8f, 0xc6, 0x3b, 0x51, + 0x00, 0x8f, 0xce, 0x35, 0xae, 0x00, 0x8f, 0xd1, + 0x35, 0xa2, 0x00, 0x8f, 0xd4, 0x36, 0xc0, 0x00, + 0x8f, 0xe6, 0x1d, 0xdf, 0x00, 0x8f, 0xe9, 0x1e, + 0xc0, 0x00, 0x8f, 0xea, 0x1e, 0xbf, 0x00, 0x8f, + 0xeb, 0x36, 0x9a, 0x00, 0x8f, 0xed, 0x36, 0x7b, + 0x00, 0x8f, 0xef, 0x37, 0x93, 0x00, 0x8f, 0xf0, + 0x35, 0xfe, 0x00, 0x8f, 0xf6, 0x4f, 0x06, 0x00, + 0x8f, 0xf7, 0x36, 0xe6, 0x00, 0x8f, 0xfa, 0x37, + 0x95, 0x00, 0x8f, 0xfd, 0x36, 0x72, 0x00, 0x90, + 0x00, 0x36, 0x51, 0x00, 0x90, 0x01, 0x36, 0x47, + 0x00, 0x90, 0x03, 0x34, 0xad, 0x00, 0x90, 0x06, + 0x35, 0x8d, 0x00, 0x90, 0x0e, 0x35, 0x28, 0x00, + 0x90, 0x0f, 0x36, 0x88, 0x00, 0x90, 0x10, 0x36, + 0x64, 0x00, 0x90, 0x14, 0x36, 0x7e, 0x00, 0x90, + 0x17, 0x1e, 0x1f, 0x00, 0x90, 0x19, 0x1e, 0x5c, + 0x00, 0x90, 0x1a, 0x36, 0x73, 0x00, 0x90, 0x1d, + 0x1e, 0x22, 0x00, 0x90, 0x1e, 0x37, 0x96, 0x00, + 0x90, 0x1f, 0x36, 0x4b, 0x00, 0x90, 0x20, 0x36, + 0x49, 0x00, 0x90, 0x22, 0x20, 0x4a, 0x00, 0x90, + 0x23, 0x0f, 0xc8, 0x00, 0x90, 0x2e, 0x36, 0x52, + 0x00, 0x90, 0x31, 0x35, 0xfb, 0x00, 0x90, 0x32, + 0x36, 0x1f, 0x00, 0x90, 0x35, 0x37, 0x97, 0x00, + 0x90, 0x38, 0x34, 0x08, 0x00, 0x90, 0x39, 0x36, + 0x58, 0x00, 0x90, 0x3c, 0x1e, 0x67, 0x00, 0x90, + 0x41, 0x1e, 0x53, 0x00, 0x90, 0x42, 0x34, 0x9c, + 0x00, 0x90, 0x47, 0x35, 0xa8, 0x00, 0x90, 0x4a, + 0x36, 0xfc, 0x00, 0x90, 0x4b, 0x35, 0x51, 0x00, + 0x90, 0x4d, 0x36, 0xc1, 0x00, 0x90, 0x4e, 0x35, + 0x65, 0x00, 0x90, 0x50, 0x37, 0x98, 0x00, 0x90, + 0x52, 0x35, 0x27, 0x00, 0x90, 0x53, 0x36, 0x8b, + 0x00, 0x90, 0x54, 0x36, 0x58, 0x00, 0x90, 0x55, + 0x34, 0x63, 0x00, 0x90, 0x58, 0x1e, 0xc1, 0x00, + 0x90, 0x5c, 0x1e, 0x2e, 0x00, 0x90, 0x60, 0x35, + 0x5a, 0x00, 0x90, 0x61, 0x1e, 0x2a, 0x00, 0x90, + 0x63, 0x35, 0xba, 0x00, 0x90, 0x69, 0x36, 0x7a, + 0x00, 0x90, 0x6d, 0x36, 0x48, 0x00, 0x90, 0x6e, + 0x1e, 0x0e, 0x00, 0x90, 0x75, 0x36, 0x00, 0x00, + 0x90, 0x77, 0x36, 0x40, 0x00, 0x90, 0x78, 0x36, + 0x3f, 0x00, 0x90, 0x7a, 0x35, 0x4a, 0x00, 0x90, + 0x7c, 0x1e, 0x80, 0x00, 0x90, 0x7f, 0x36, 0xa7, + 0x00, 0x90, 0x81, 0x37, 0x9a, 0x00, 0x90, 0x83, + 0x37, 0x5c, 0x00, 0x90, 0x84, 0x35, 0x7c, 0x00, + 0x90, 0x87, 0x37, 0x94, 0x00, 0x90, 0x89, 0x34, + 0x5f, 0x00, 0x90, 0x8a, 0x37, 0x9b, 0x00, 0x90, + 0xa3, 0x1e, 0x55, 0x00, 0x90, 0xa6, 0x36, 0xcb, + 0x00, 0x90, 0xa8, 0x4f, 0x0b, 0x00, 0x90, 0xaa, + 0x34, 0x8e, 0x00, 0x90, 0xf7, 0x35, 0x9d, 0x00, + 0x90, 0xfd, 0x0c, 0x4e, 0x00, 0x91, 0x2d, 0x1e, + 0x44, 0x00, 0x91, 0x30, 0x35, 0x29, 0x00, 0x91, + 0x4b, 0x1e, 0x12, 0x00, 0x91, 0x4c, 0x35, 0xf2, + 0x00, 0x91, 0x4d, 0x4f, 0x0c, 0x00, 0x91, 0x56, + 0x35, 0x2a, 0x00, 0x91, 0x58, 0x35, 0x2b, 0x00, + 0x91, 0x65, 0x35, 0x2c, 0x00, 0x91, 0x72, 0x35, + 0x2e, 0x00, 0x91, 0x73, 0x35, 0x2d, 0x00, 0x91, + 0x77, 0x35, 0xd0, 0x00, 0x91, 0xa2, 0x35, 0x2f, + 0x00, 0x91, 0xaa, 0x35, 0x31, 0x00, 0x91, 0xaf, + 0x35, 0x30, 0x00, 0x91, 0xb1, 0x36, 0x9f, 0x00, + 0x91, 0xb4, 0x35, 0x32, 0x00, 0x91, 0xba, 0x35, + 0x33, 0x00, 0x91, 0xc1, 0x1e, 0xc3, 0x00, 0x91, + 0xc7, 0x1e, 0x05, 0x00, 0x91, 0xdc, 0x4f, 0x42, + 0x00, 0x91, 0xe3, 0x36, 0x75, 0x00, 0x91, 0xfc, + 0x3c, 0x2c, 0x00, 0x92, 0x37, 0x34, 0x7d, 0x00, + 0x92, 0x5b, 0x34, 0x69, 0x00, 0x92, 0xe9, 0x4f, + 0x0d, 0x00, 0x93, 0x06, 0x1e, 0x0a, 0x00, 0x93, + 0x35, 0x4f, 0x0e, 0x00, 0x93, 0x65, 0x3b, 0x86, + 0x00, 0x93, 0x75, 0x4f, 0x34, 0x00, 0x93, 0x8b, + 0x4f, 0x0f, 0x00, 0x93, 0x8c, 0x35, 0x76, 0x00, + 0x93, 0x96, 0x35, 0xd5, 0x00, 0x93, 0x9a, 0x1e, + 0x41, 0x00, 0x93, 0xa1, 0x59, 0x04, 0x00, 0x93, + 0xae, 0x34, 0x3a, 0x00, 0x93, 0xdd, 0x37, 0xae, + 0x00, 0x94, 0x3a, 0x4f, 0x10, 0x00, 0x94, 0x53, + 0x1e, 0x79, 0x00, 0x94, 0x77, 0x35, 0x34, 0x00, + 0x95, 0x92, 0x35, 0x7d, 0x00, 0x95, 0xab, 0x3b, + 0x9a, 0x00, 0x95, 0xbb, 0x1e, 0xc4, 0x00, 0x95, + 0xbc, 0x37, 0xaf, 0x00, 0x95, 0xcd, 0x4f, 0x11, + 0x00, 0x96, 0x2a, 0x4f, 0x12, 0x00, 0x96, 0x4d, + 0x34, 0x87, 0x00, 0x96, 0x86, 0x34, 0x51, 0x00, + 0x96, 0x8a, 0x36, 0x53, 0x00, 0x96, 0x94, 0x35, + 0x73, 0x00, 0x96, 0x98, 0x35, 0x35, 0x00, 0x96, + 0x99, 0x4f, 0x31, 0x00, 0x96, 0xa3, 0x34, 0xca, + 0x00, 0x96, 0xa7, 0x4f, 0x14, 0x00, 0x96, 0xb2, + 0x37, 0xb1, 0x00, 0x96, 0xbb, 0x36, 0x35, 0x00, + 0x96, 0xc5, 0x34, 0x6c, 0x00, 0x96, 0xc7, 0x35, + 0xbe, 0x00, 0x96, 0xd9, 0x34, 0xd5, 0x00, 0x96, + 0xda, 0x59, 0x3b, 0x00, 0x96, 0xe3, 0x0c, 0xc9, + 0x00, 0x96, 0xe8, 0x35, 0x4d, 0x00, 0x96, 0xea, + 0x36, 0x39, 0x00, 0x96, 0xf0, 0x34, 0xc0, 0x00, + 0x97, 0x21, 0x59, 0x41, 0x00, 0x97, 0x24, 0x1e, + 0xc6, 0x00, 0x97, 0x3d, 0x35, 0x36, 0x00, 0x97, + 0x55, 0x21, 0xf8, 0x00, 0x97, 0x56, 0x21, 0x8b, + 0x00, 0x97, 0x59, 0x37, 0xb2, 0x00, 0x97, 0x5c, + 0x36, 0x31, 0x00, 0x97, 0x60, 0x1e, 0xc7, 0x00, + 0x97, 0x6d, 0x1e, 0xc8, 0x00, 0x97, 0x71, 0x1e, + 0x1e, 0x00, 0x97, 0x74, 0x1d, 0xf3, 0x00, 0x97, + 0x84, 0x1d, 0xe5, 0x00, 0x97, 0x98, 0x1e, 0x1c, + 0x00, 0x97, 0xad, 0x4f, 0x43, 0x00, 0x97, 0xd3, + 0x35, 0x7e, 0x00, 0x97, 0xde, 0x3c, 0x2e, 0x00, + 0x97, 0xf3, 0x35, 0x60, 0x00, 0x97, 0xff, 0x34, + 0x19, 0x00, 0x98, 0x0c, 0x35, 0x39, 0x00, 0x98, + 0x11, 0x34, 0x74, 0x00, 0x98, 0x12, 0x34, 0xb2, + 0x00, 0x98, 0x13, 0x1e, 0x54, 0x00, 0x98, 0x24, + 0x1e, 0xc9, 0x00, 0x98, 0x3b, 0x0d, 0xc3, 0x00, + 0x98, 0x5e, 0x0f, 0xa8, 0x00, 0x98, 0x67, 0x35, + 0xbf, 0x00, 0x98, 0x73, 0x35, 0x3a, 0x00, 0x98, + 0xc3, 0x35, 0x3b, 0x00, 0x98, 0xdf, 0x36, 0x17, + 0x00, 0x98, 0xe2, 0x35, 0x89, 0x00, 0x98, 0xeb, + 0x37, 0xb4, 0x00, 0x98, 0xef, 0x0d, 0x67, 0x00, + 0x98, 0xf4, 0x1d, 0xd2, 0x00, 0x98, 0xfc, 0x21, + 0xfc, 0x00, 0x98, 0xfd, 0x36, 0xcd, 0x00, 0x98, + 0xfe, 0x36, 0x14, 0x00, 0x99, 0x03, 0x37, 0xb5, + 0x00, 0x99, 0x05, 0x1e, 0x77, 0x00, 0x99, 0x09, + 0x37, 0xb6, 0x00, 0x99, 0x0a, 0x37, 0x00, 0x00, + 0x99, 0x0c, 0x1d, 0xdb, 0x00, 0x99, 0x10, 0x1f, + 0x22, 0x00, 0x99, 0x13, 0x35, 0x68, 0x00, 0x99, + 0x21, 0x4f, 0x18, 0x00, 0x99, 0x28, 0x21, 0xfe, + 0x00, 0x99, 0x45, 0x37, 0xb7, 0x00, 0x99, 0x4b, + 0x37, 0xb9, 0x00, 0x99, 0x57, 0x1f, 0x20, 0x00, + 0x99, 0xc1, 0x4f, 0x40, 0x00, 0x99, 0xd0, 0x36, + 0x67, 0x00, 0x9a, 0x19, 0x1f, 0x43, 0x00, 0x9a, + 0x30, 0x36, 0x89, 0x00, 0x9a, 0x45, 0x35, 0x3c, + 0x00, 0x9a, 0x4a, 0x59, 0x88, 0x00, 0x9a, 0x5f, + 0x37, 0xbb, 0x00, 0x9a, 0x65, 0x37, 0xbc, 0x00, + 0x9a, 0xef, 0x37, 0xbd, 0x00, 0x9b, 0x18, 0x37, + 0xbe, 0x00, 0x9b, 0x2d, 0x34, 0x3c, 0x00, 0x9b, + 0x2e, 0x1e, 0xca, 0x00, 0x9b, 0x35, 0x59, 0xa4, + 0x00, 0x9b, 0x4d, 0x35, 0x3d, 0x00, 0x9b, 0x54, + 0x36, 0xdb, 0x00, 0x9b, 0x58, 0x35, 0x3e, 0x00, + 0x9b, 0x97, 0x1e, 0xcb, 0x00, 0x9b, 0xa8, 0x4f, + 0x1a, 0x00, 0x9b, 0xab, 0x4f, 0x38, 0x00, 0x9b, + 0xae, 0x4f, 0x1b, 0x00, 0x9b, 0xb9, 0x4f, 0x1c, + 0x00, 0x9b, 0xc6, 0x35, 0x3f, 0x00, 0x9b, 0xd6, + 0x1e, 0x09, 0x00, 0x9b, 0xdb, 0x36, 0x54, 0x00, + 0x9b, 0xe1, 0x35, 0x40, 0x00, 0x9b, 0xf1, 0x35, + 0x41, 0x00, 0x9b, 0xf2, 0x1e, 0xcc, 0x00, 0x9c, + 0x08, 0x4f, 0x1d, 0x00, 0x9c, 0x24, 0x4f, 0x1e, + 0x00, 0x9c, 0x2f, 0x1d, 0xd4, 0x00, 0x9c, 0x3b, + 0x4f, 0x1f, 0x00, 0x9c, 0x48, 0x1e, 0x39, 0x00, + 0x9c, 0x52, 0x1e, 0x74, 0x00, 0x9c, 0x57, 0x37, + 0x0c, 0x00, 0x9c, 0xe6, 0x4f, 0x21, 0x00, 0x9d, + 0x07, 0x1e, 0x4f, 0x00, 0x9d, 0x08, 0x37, 0xc1, + 0x00, 0x9d, 0x09, 0x37, 0xc0, 0x00, 0x9d, 0x48, + 0x35, 0x42, 0x00, 0x9d, 0x60, 0x1e, 0x03, 0x00, + 0x9d, 0x6c, 0x36, 0xce, 0x00, 0x9d, 0xb4, 0x0b, + 0xfd, 0x00, 0x9d, 0xbf, 0x59, 0xde, 0x00, 0x9d, + 0xc0, 0x4f, 0x22, 0x00, 0x9d, 0xc2, 0x4f, 0x23, + 0x00, 0x9d, 0xcf, 0x35, 0x43, 0x00, 0x9e, 0x97, + 0x34, 0xcc, 0x00, 0x9e, 0x9f, 0x34, 0xcb, 0x00, + 0x9e, 0xa5, 0x37, 0xc2, 0x00, 0x9e, 0xaa, 0x1e, + 0xcd, 0x00, 0x9e, 0xad, 0x1f, 0x44, 0x00, 0x9e, + 0xbb, 0x36, 0xdc, 0x00, 0x9e, 0xbf, 0x36, 0xe2, + 0x00, 0x9e, 0xcc, 0x37, 0xc3, 0x00, 0x9e, 0xdb, + 0x1e, 0x31, 0x00, 0x9f, 0x08, 0x35, 0x44, 0x00, + 0x9f, 0x3b, 0x36, 0xa9, 0x00, 0x9f, 0x4a, 0x37, + 0xc5, 0x00, 0x9f, 0x4b, 0x37, 0x5a, 0x00, 0x9f, + 0x4e, 0x35, 0x24, 0x00, 0x9f, 0x67, 0x37, 0xc7, + 0x00, 0x9f, 0x8d, 0x37, 0x06, 0x00, 0x9f, 0x9c, + 0x1e, 0xce, 0x00, 0x9f, 0x9d, 0x1e, 0xa7, 0x00, + 0xfa, 0x11, 0x20, 0xfb, 0x00, 0xfa, 0x24, 0x21, + 0xb8, 0x02, 0x35, 0xc4, 0x3c, 0x44, 0x02, 0x36, + 0x3a, 0x35, 0x9b, 0x02, 0x38, 0x3d, 0x4f, 0x26, + 0x02, 0x42, 0xee, 0x37, 0xc9, 0x02, 0x62, 0x70, + 0x37, 0x6e, 0x02, 0x9d, 0x4b, 0x35, 0x96, 0x02, + 0x9e, 0x3d, 0x3c, 0x4d, 0x02, 0xa6, 0x1a, 0x37, + 0xc8, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x34, 0x02, + 0x35, 0x83, 0x00, 0x50, 0x91, 0x35, 0xaf, 0x00, + 0x50, 0xca, 0x37, 0x15, 0x00, 0x51, 0x54, 0x37, + 0x17, 0x00, 0x51, 0x95, 0x37, 0x18, 0x00, 0x51, + 0xb4, 0x35, 0xdb, 0x00, 0x51, 0xde, 0x38, 0x10, + 0x00, 0x52, 0x72, 0x4e, 0x76, 0x00, 0x53, 0x7f, + 0x1d, 0xed, 0x00, 0x53, 0xa9, 0x1f, 0x1c, 0x00, + 0x55, 0x33, 0x37, 0x21, 0x00, 0x55, 0xa9, 0x34, + 0xd6, 0x00, 0x55, 0xab, 0x4e, 0x7c, 0x00, 0x55, + 0xe4, 0x37, 0x22, 0x00, 0x56, 0xae, 0x4e, 0x7e, + 0x00, 0x57, 0xf4, 0x36, 0x13, 0x00, 0x58, 0x5a, + 0x20, 0xe6, 0x00, 0x59, 0x51, 0x4e, 0x88, 0x00, + 0x59, 0xff, 0x35, 0xe1, 0x00, 0x5a, 0xbe, 0x34, + 0xdc, 0x00, 0x5b, 0xb3, 0x35, 0x6b, 0x00, 0x5c, + 0x0a, 0x36, 0x4e, 0x00, 0x5c, 0x0f, 0x36, 0x0a, + 0x00, 0x5e, 0xca, 0x34, 0x59, 0x00, 0x5e, 0xe3, + 0x4e, 0x93, 0x00, 0x5e, 0xf6, 0x35, 0x56, 0x00, + 0x60, 0x62, 0x4f, 0x2d, 0x00, 0x60, 0x97, 0x37, + 0x30, 0x00, 0x61, 0x67, 0x35, 0xad, 0x00, 0x61, + 0x68, 0x34, 0x6e, 0x00, 0x61, 0xb2, 0x4e, 0x98, + 0x00, 0x61, 0xf2, 0x36, 0x6a, 0x00, 0x62, 0x49, + 0x34, 0xb4, 0x00, 0x66, 0x5f, 0x37, 0x38, 0x00, + 0x66, 0xc1, 0x4e, 0xac, 0x00, 0x67, 0x15, 0x36, + 0x70, 0x00, 0x67, 0x17, 0x21, 0x29, 0x00, 0x67, + 0x1b, 0x36, 0xd5, 0x00, 0x68, 0x5d, 0x36, 0xde, + 0x00, 0x68, 0x7a, 0x36, 0xf1, 0x00, 0x69, 0x0d, + 0x36, 0x15, 0x00, 0x69, 0x82, 0x34, 0x6f, 0x00, + 0x6a, 0xdb, 0x35, 0xa9, 0x00, 0x6b, 0x21, 0x35, + 0xe8, 0x00, 0x6c, 0x08, 0x34, 0xf4, 0x00, 0x6c, + 0xaa, 0x4e, 0xbb, 0x00, 0x6c, 0xbf, 0x34, 0x68, + 0x00, 0x6c, 0xe8, 0x32, 0x45, 0x00, 0x6d, 0x3e, + 0x36, 0x96, 0x00, 0x6e, 0x23, 0x34, 0xf6, 0x00, + 0x6e, 0xa2, 0x52, 0x4f, 0x00, 0x6e, 0xcb, 0x4e, + 0xc1, 0x00, 0x6f, 0x11, 0x37, 0x45, 0x00, 0x6f, + 0x5b, 0x4e, 0xc5, 0x00, 0x71, 0x7d, 0x1f, 0x24, + 0x00, 0x72, 0x35, 0x35, 0xf0, 0x00, 0x73, 0x36, + 0x36, 0xf9, 0x00, 0x73, 0x37, 0x36, 0xfa, 0x00, + 0x73, 0xca, 0x4e, 0xcc, 0x00, 0x75, 0x11, 0x35, + 0xd2, 0x00, 0x75, 0x15, 0x4f, 0x2b, 0x00, 0x79, + 0x53, 0x37, 0x59, 0x00, 0x7a, 0x74, 0x35, 0xb1, + 0x00, 0x7b, 0x08, 0x4f, 0x27, 0x00, 0x7b, 0xc0, + 0x36, 0x37, 0x00, 0x7c, 0x3e, 0x4f, 0x29, 0x00, + 0x7c, 0x50, 0x4e, 0xdb, 0x00, 0x7c, 0x7e, 0x4f, + 0x45, 0x00, 0x7d, 0xb2, 0x4e, 0xde, 0x00, 0x7e, + 0x22, 0x37, 0x66, 0x00, 0x7e, 0x35, 0x37, 0x68, + 0x00, 0x7f, 0xc1, 0x35, 0x5e, 0x00, 0x7f, 0xe1, + 0x4e, 0xe0, 0x00, 0x7f, 0xe9, 0x37, 0x71, 0x00, + 0x7f, 0xfc, 0x37, 0x02, 0x00, 0x81, 0x08, 0x36, + 0xe3, 0x00, 0x82, 0x39, 0x36, 0x3e, 0x00, 0x82, + 0x79, 0x37, 0x76, 0x00, 0x82, 0xbd, 0x34, 0x6b, + 0x00, 0x83, 0xdf, 0x1f, 0x28, 0x00, 0x85, 0x3d, + 0x34, 0xc1, 0x00, 0x86, 0x12, 0x52, 0x51, 0x00, + 0x87, 0xd2, 0x1f, 0x42, 0x00, 0x88, 0x05, 0x4f, + 0x47, 0x00, 0x88, 0x36, 0x37, 0x87, 0x00, 0x8a, + 0x0a, 0x36, 0x25, 0x00, 0x8a, 0x1d, 0x4f, 0x2c, + 0x00, 0x8a, 0x95, 0x36, 0x5d, 0x00, 0x8a, 0xee, + 0x35, 0xe4, 0x00, 0x8b, 0x56, 0x4e, 0xf9, 0x00, + 0x8c, 0xa0, 0x36, 0xb6, 0x00, 0x8c, 0xc7, 0x35, + 0xe6, 0x00, 0x8c, 0xca, 0x4e, 0xff, 0x00, 0x8c, + 0xfc, 0x35, 0xce, 0x00, 0x8f, 0x44, 0x4f, 0x03, + 0x00, 0x8f, 0xc5, 0x4f, 0x04, 0x00, 0x8f, 0xd4, + 0x4f, 0x05, 0x00, 0x90, 0x03, 0x36, 0x87, 0x00, + 0x90, 0x22, 0x34, 0x60, 0x00, 0x90, 0x38, 0x21, + 0xb9, 0x00, 0x90, 0x41, 0x4f, 0x3f, 0x00, 0x90, + 0x42, 0x36, 0x28, 0x00, 0x90, 0x55, 0x35, 0x49, + 0x00, 0x90, 0x75, 0x36, 0x01, 0x00, 0x90, 0x77, + 0x4f, 0x07, 0x00, 0x90, 0x89, 0x37, 0xa1, 0x00, + 0x90, 0x8a, 0x37, 0x9c, 0x00, 0x90, 0xa6, 0x36, + 0xcc, 0x00, 0x90, 0xaa, 0x35, 0xee, 0x00, 0x92, + 0x5b, 0x35, 0x5b, 0x00, 0x96, 0x86, 0x21, 0xee, + 0x00, 0x96, 0x98, 0x4f, 0x13, 0x00, 0x96, 0xa3, + 0x37, 0x0b, 0x00, 0x96, 0xc5, 0x35, 0x67, 0x00, + 0x97, 0x5c, 0x36, 0x32, 0x00, 0x97, 0x60, 0x35, + 0x37, 0x00, 0x97, 0x6d, 0x1f, 0x23, 0x00, 0x97, + 0x71, 0x35, 0x38, 0x00, 0x97, 0xff, 0x35, 0x9e, + 0x00, 0x98, 0xef, 0x4f, 0x25, 0x00, 0x99, 0x0c, + 0x34, 0x65, 0x00, 0x99, 0x45, 0x37, 0xb8, 0x00, + 0x99, 0x57, 0x35, 0x9f, 0x00, 0x9e, 0x9f, 0x37, + 0x0d, 0x00, 0x9f, 0x08, 0x37, 0xc4, 0x00, 0x9f, + 0x8d, 0x37, 0x07, 0x02, 0x36, 0x3a, 0x35, 0x9c, + 0x00, 0x00, 0x00, 0x11, 0x00, 0x51, 0xde, 0x4e, + 0x71, 0x00, 0x53, 0xa9, 0x34, 0x64, 0x00, 0x56, + 0xae, 0x4e, 0x7f, 0x00, 0x5b, 0xb3, 0x4e, 0x8f, + 0x00, 0x61, 0x68, 0x35, 0x6c, 0x00, 0x61, 0xf2, + 0x52, 0x50, 0x00, 0x66, 0x5f, 0x37, 0x39, 0x00, + 0x67, 0x17, 0x37, 0x12, 0x00, 0x69, 0x82, 0x35, + 0x70, 0x00, 0x75, 0x11, 0x4f, 0x3c, 0x00, 0x83, + 0xdf, 0x4e, 0xe9, 0x00, 0x90, 0x77, 0x4f, 0x08, + 0x00, 0x90, 0x89, 0x37, 0xa2, 0x00, 0x90, 0x8a, + 0x37, 0x9d, 0x00, 0x97, 0xff, 0x4f, 0x15, 0x00, + 0x99, 0x0c, 0x35, 0x52, 0x00, 0x99, 0x57, 0x4f, + 0x19, 0x00, 0x00, 0x00, 0x06, 0x00, 0x51, 0xde, + 0x21, 0x5e, 0x00, 0x53, 0xa9, 0x35, 0x4f, 0x00, + 0x61, 0x68, 0x35, 0x6d, 0x00, 0x90, 0x89, 0x37, + 0xa3, 0x00, 0x90, 0x8a, 0x37, 0x9e, 0x00, 0x97, + 0xff, 0x4f, 0x16, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x53, 0xa9, 0x4f, 0x2f, 0x00, 0x61, 0x68, 0x35, + 0x6e, 0x00, 0x90, 0x89, 0x37, 0xa4, 0x00, 0x90, + 0x8a, 0x37, 0x9f, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x90, 0x89, 0x37, 0xa5, 0x00, 0x90, 0x8a, 0x37, + 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x90, 0x89, + 0x37, 0xa6, 0x00, 0x90, 0x8a, 0x4f, 0x0a, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x90, 0x89, 0x37, 0xa7, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x90, 0x89, 0x37, + 0xa8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x90, 0x89, + 0x37, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x00, 0x90, + 0x89, 0x37, 0xaa, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x90, 0x89, 0x37, 0xab, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x90, 0x89, 0x37, 0xac, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x90, 0x89, 0x4f, 0x09 + }; From 745d3809b6b0cc594a3e1f5dd24cd043b4c3532d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Sun, 15 Sep 2013 21:43:32 +0200 Subject: [PATCH 157/321] Fix compilation for GNUStep due to font changes. * font.c (syms_of_font): Check MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 for syms_of_macfont. * nsfns.m (Fx_create_frame): Fix font driver registration for GNUStep. --- src/ChangeLog | 6 ++++++ src/font.c | 2 ++ src/nsfns.m | 9 ++++----- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e3b29c9b21d..0050d949dd2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,11 @@ 2013-09-15 Jan Djärv + * nsfns.m (Fx_create_frame): Fix font driver registration for + GNUStep. + + * font.c (syms_of_font): Check MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + for syms_of_macfont. + * nsterm.m: Include macfont.h. (ns_tmp_flags, ns_tmp_font): Remove. (ns_compute_glyph_string_overhangs): Check for driver Qns. diff --git a/src/font.c b/src/font.c index 27f4f5dca91..cc832f9a88a 100644 --- a/src/font.c +++ b/src/font.c @@ -5199,7 +5199,9 @@ EMACS_FONT_LOG is set. Otherwise, it is set to t. */); #endif /* HAVE_NTGUI */ #ifdef HAVE_NS syms_of_nsfont (); +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 syms_of_macfont (); +#endif #endif /* HAVE_NS */ #endif /* HAVE_WINDOW_SYSTEM */ } diff --git a/src/nsfns.m b/src/nsfns.m index 1b4e6b7f57e..574239873a0 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1175,15 +1175,14 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side block_input (); -#ifdef NS_IMPL_GNUSTEP || \ - MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 - register_font_driver (&nsfont_driver, f); -#else +#ifdef NS_IMPL_COCOA +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 if (CTGetCoreTextVersion != NULL && CTGetCoreTextVersion () >= kCTVersionNumber10_5) mac_register_font_driver (f); - register_font_driver (&nsfont_driver, f); #endif +#endif + register_font_driver (&nsfont_driver, f); x_default_parameter (f, parms, Qfont_backend, Qnil, "fontBackend", "FontBackend", RES_TYPE_STRING); From 578c21bc0316661f211dd73a9eb65c8213bd372f Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Mon, 16 Sep 2013 02:42:26 +0300 Subject: [PATCH 158/321] * lisp/progmodes/ruby-mode.el (ruby-operator-re): Consider line continuation character an operator, as far as indentation is concerned. Fixes: debbugs:15369 --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/ruby-mode.el | 2 +- test/indent/ruby.rb | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 01400a96009..44a81ee32fc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-09-15 Dmitry Gutov + + * progmodes/ruby-mode.el (ruby-operator-re): Consider line + continuation character an operator, as far as indentation is + concerned (Bug#15369). + 2013-09-15 Martin Rudalics * window.el (window--state-put-2): Don't process buffer state diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 902616e3023..95206c15390 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -132,7 +132,7 @@ This should only be called after matching against `ruby-here-doc-beg-re'." ruby-block-end-re "\\|}\\|\\]\\)") "Regexp to match where the indentation gets shallower.") -(defconst ruby-operator-re "[-,.+*/%&|^~=<>:]" +(defconst ruby-operator-re "[-,.+*/%&|^~=<>:]\\|\\\\$" "Regexp to match operators.") (defconst ruby-symbol-chars "a-zA-Z0-9_" diff --git a/test/indent/ruby.rb b/test/indent/ruby.rb index af1bbb9d8ab..6c9b9775b48 100644 --- a/test/indent/ruby.rb +++ b/test/indent/ruby.rb @@ -71,3 +71,7 @@ def test2 (arg) if something == :== do_something end + +# Bug#15369 +MSG = 'Separate every 3 digits in the integer portion of a number' \ + 'with underscores(_).' From f8eb15727ae6a5c629e27ab9755e638766b27822 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 16 Sep 2013 11:27:51 +0400 Subject: [PATCH 159/321] Fix X event waiting to handle multiple frames. * frame.h (struct frame) [HAVE_X_WINDOWS]: New member wait_event_type. * xterm.c (pending_event_wait): Remove. Adjust users. (x_detect_focus_change): Pass frame arg. (handle_one_xevent): Find related frame early and clear per-frame wait_event_type only if this is an event for the relevant frame. (x_wait_for_event): Use per-frame wait_event_type. --- src/ChangeLog | 10 ++++++++ src/frame.h | 5 ++++ src/xterm.c | 67 +++++++++++++++++++++------------------------------ 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0050d949dd2..10349aea412 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2013-09-16 Dmitry Antipov + + Fix X event waiting to handle multiple frames. + * frame.h (struct frame) [HAVE_X_WINDOWS]: New member wait_event_type. + * xterm.c (pending_event_wait): Remove. Adjust users. + (x_detect_focus_change): Pass frame arg. + (handle_one_xevent): Find related frame early and clear per-frame + wait_event_type only if this is an event for the relevant frame. + (x_wait_for_event): Use per-frame wait_event_type. + 2013-09-15 Jan Djärv * nsfns.m (Fx_create_frame): Fix font driver registration for diff --git a/src/frame.h b/src/frame.h index d8a6d380090..c5ad71628ab 100644 --- a/src/frame.h +++ b/src/frame.h @@ -328,6 +328,11 @@ struct frame unsigned int external_menu_bar : 1; #endif +#if defined (HAVE_X_WINDOWS) + /* Used by x_wait_for_event when watching for an X event on this frame. */ + int wait_event_type; +#endif + /* Next two bitfields are mutually exclusive. They might both be zero if the frame has been made invisible without an icon. */ diff --git a/src/xterm.c b/src/xterm.c index 4086d913c8a..ea75df11048 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -159,13 +159,6 @@ Lisp_Object x_display_name_list; static struct frame *pending_autoraise_frame; -/* This is a frame waiting for an event matching mask, within XTread_socket. */ - -static struct { - struct frame *f; - int eventtype; -} pending_event_wait; - #ifdef USE_X_TOOLKIT /* The application context for Xt use. */ XtAppContext Xt_app_con; @@ -293,8 +286,6 @@ static void frame_unhighlight (struct frame *); static void x_new_focus_frame (struct x_display_info *, struct frame *); static void x_focus_changed (int, int, struct x_display_info *, struct frame *, struct input_event *); -static void x_detect_focus_change (struct x_display_info *, - XEvent *, struct input_event *); static void XTframe_rehighlight (struct frame *); static void x_frame_rehighlight (struct x_display_info *); static void x_draw_hollow_cursor (struct window *, struct glyph_row *); @@ -3549,12 +3540,10 @@ x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc) Returns FOCUS_IN_EVENT event in *BUFP. */ static void -x_detect_focus_change (struct x_display_info *dpyinfo, XEvent *event, struct input_event *bufp) +x_detect_focus_change (struct x_display_info *dpyinfo, struct frame *frame, + XEvent *event, struct input_event *bufp) { - struct frame *frame; - - frame = x_any_window_to_frame (dpyinfo, event->xany.window); - if (! frame) + if (!frame) return; switch (event->type) @@ -5883,7 +5872,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, int count = 0; int do_help = 0; ptrdiff_t nbytes = 0; - struct frame *f = NULL; + struct frame *any, *f = NULL; struct coding_system coding; XEvent event = *eventptr; Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight; @@ -5901,8 +5890,10 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, inev.ie.kind = NO_EVENT; inev.ie.arg = Qnil; - if (pending_event_wait.eventtype == event.type) - pending_event_wait.eventtype = 0; /* Indicates we got it. */ + any = x_any_window_to_frame (dpyinfo, event.xany.window); + + if (any && any->wait_event_type == event.type) + any->wait_event_type = 0; /* Indicates we got it. */ switch (event.type) { @@ -5915,10 +5906,10 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, if (event.xclient.data.l[0] == dpyinfo->Xatom_wm_take_focus) { - /* Use x_any_window_to_frame because this - could be the shell widget window - if the frame has no title bar. */ - f = x_any_window_to_frame (dpyinfo, event.xclient.window); + /* Use the value returned by x_any_window_to_frame + because this could be the shell widget window + if the frame has no title bar. */ + f = any; #ifdef HAVE_X_I18N /* Not quite sure this is needed -pd */ if (f && FRAME_XIC (f)) @@ -5995,8 +5986,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, if (event.xclient.data.l[0] == dpyinfo->Xatom_wm_delete_window) { - f = x_any_window_to_frame (dpyinfo, - event.xclient.window); + f = any; if (!f) goto OTHER; /* May be a dialog that is to be removed */ @@ -6035,7 +6025,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, if (event.xclient.message_type == dpyinfo->Xatom_editres) { - f = x_any_window_to_frame (dpyinfo, event.xclient.window); + f = any; if (f) _XEditResCheckMessages (f->output_data.x->widget, NULL, &event, NULL); @@ -6079,7 +6069,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, { enum xembed_message msg = event.xclient.data.l[1]; if (msg == XEMBED_FOCUS_IN || msg == XEMBED_FOCUS_OUT) - x_detect_focus_change (dpyinfo, &event, &inev.ie); + x_detect_focus_change (dpyinfo, any, &event, &inev.ie); *finish = X_EVENT_GOTO_OUT; goto done; @@ -6087,7 +6077,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, xft_settings_event (dpyinfo, &event); - f = x_any_window_to_frame (dpyinfo, event.xclient.window); + f = any; if (!f) goto OTHER; if (x_handle_dnd_message (f, &event.xclient, dpyinfo, &inev.ie)) @@ -6349,7 +6339,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, goto OTHER; #endif - f = x_any_window_to_frame (dpyinfo, event.xkey.window); + f = any; #if ! defined (USE_GTK) /* If mouse-highlight is an integer, input clears out @@ -6683,9 +6673,9 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, case EnterNotify: dpyinfo->last_user_time = event.xcrossing.time; - x_detect_focus_change (dpyinfo, &event, &inev.ie); + x_detect_focus_change (dpyinfo, any, &event, &inev.ie); - f = x_any_window_to_frame (dpyinfo, event.xcrossing.window); + f = any; if (f && x_mouse_click_focus_ignore_position) ignore_next_mouse_click_timeout = event.xmotion.time + 200; @@ -6703,12 +6693,12 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, goto OTHER; case FocusIn: - x_detect_focus_change (dpyinfo, &event, &inev.ie); + x_detect_focus_change (dpyinfo, any, &event, &inev.ie); goto OTHER; case LeaveNotify: dpyinfo->last_user_time = event.xcrossing.time; - x_detect_focus_change (dpyinfo, &event, &inev.ie); + x_detect_focus_change (dpyinfo, any, &event, &inev.ie); f = x_top_window_to_frame (dpyinfo, event.xcrossing.window); if (f) @@ -6736,7 +6726,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, goto OTHER; case FocusOut: - x_detect_focus_change (dpyinfo, &event, &inev.ie); + x_detect_focus_change (dpyinfo, any, &event, &inev.ie); goto OTHER; case MotionNotify: @@ -6822,7 +6812,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, f = x_top_window_to_frame (dpyinfo, event.xconfigure.window); #ifdef USE_GTK if (!f - && (f = x_any_window_to_frame (dpyinfo, event.xconfigure.window)) + && (f = any) && event.xconfigure.window == FRAME_X_WINDOW (f)) { xg_frame_resized (f, event.xconfigure.width, @@ -8733,15 +8723,14 @@ x_wait_for_event (struct frame *f, int eventtype) struct timespec tmo, tmo_at, time_now; int fd = ConnectionNumber (FRAME_X_DISPLAY (f)); - pending_event_wait.f = f; - pending_event_wait.eventtype = eventtype; + f->wait_event_type = eventtype; /* Set timeout to 0.1 second. Hopefully not noticeable. Maybe it should be configurable. */ tmo = make_timespec (0, 100 * 1000 * 1000); tmo_at = timespec_add (current_timespec (), tmo); - while (pending_event_wait.eventtype) + while (f->wait_event_type) { pending_signals = 1; totally_unblock_input (); @@ -8760,8 +8749,8 @@ x_wait_for_event (struct frame *f, int eventtype) if (pselect (fd + 1, &fds, NULL, NULL, &tmo, NULL) == 0) break; /* Timeout */ } - pending_event_wait.f = 0; - pending_event_wait.eventtype = 0; + + f->wait_event_type = 0; } @@ -10684,8 +10673,6 @@ x_initialize (void) #endif pending_autoraise_frame = 0; - pending_event_wait.f = 0; - pending_event_wait.eventtype = 0; /* Note that there is no real way portable across R3/R4 to get the original error handler. */ From c6ad9bcaded7363a11128e7a005e45fb53c7dd87 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Sep 2013 06:17:41 -0400 Subject: [PATCH 160/321] Auto-commit of generated files. --- autogen/configure | 51 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/autogen/configure b/autogen/configure index a0f302b4ac0..72439e795d6 100755 --- a/autogen/configure +++ b/autogen/configure @@ -10041,7 +10041,11 @@ fi - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + macfont_file="" + if test "${NS_IMPL_COCOA}" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OSX 10.4 or newer" >&5 +$as_echo_n "checking for OSX 10.4 or newer... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -10066,6 +10070,45 @@ else ns_osx_have_104=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ns_osx_have_104" >&5 +$as_echo "$ns_osx_have_104" >&6; } + + if test $ns_osx_have_104 = no; then + as_fn_error "\`OSX 10.4 or newer is required'" "$LINENO" 5; + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OSX 10.5 or newer" >&5 +$as_echo_n "checking for OSX 10.5 or newer... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + +#ifdef MAC_OS_X_VERSION_MAX_ALLOWED +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + ; /* OK */ +#else +#error "OSX 10.5 not found" +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ns_osx_have_105=yes +else + ns_osx_have_105=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ns_osx_have_105" >&5 +$as_echo "$ns_osx_have_105" >&6; } + if test $ns_osx_have_105 = yes; then + macfont_file="macfont.o" + fi + fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -10083,9 +10126,6 @@ else ns_have_nsinteger=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ns_osx_have_104 = no; then - as_fn_error "\`OSX 10.4 or newer is required'" "$LINENO" 5; - fi if test $ns_have_nsinteger = yes; then $as_echo "#define NS_HAVE_NSINTEGER 1" >>confdefs.h @@ -10120,7 +10160,8 @@ if test "${HAVE_NS}" = yes; then leimdir="\${ns_appresdir}/leim" INSTALL_ARCH_INDEP_EXTRA= fi - NS_OBJC_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o" + + NS_OBJC_OBJ="nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o $macfont_file" fi CFLAGS="$tmp_CFLAGS" CPPFLAGS="$tmp_CPPFLAGS" From 61582e6aadc24dda730055d9907e7c053dd6218b Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 16 Sep 2013 14:41:41 +0400 Subject: [PATCH 161/321] Do not copy X event in handle_one_xevent except KeyPress case. Wnen XEvent is processed, it is unlikely to be changed except KeyPress case, so we can avoid copying and use const pointer to const data to make sure that an event is not changed elsewhere. * xterm.c (handle_one_xevent): Change 2nd arg to 'const XEvent * const' and do not create local copy except for the KeyPress event. Use casts to avoid a few glitches. Adjust formatting. Add comments. (SET_SAVED_BUTTON_EVENT): Remove and move the code to the only user. (x_handle_net_wm_state, x_menubar_window_to_frame) (x_detect_focus_change, construct_mouse_click, note_mouse_movement) (x_scroll_bar_to_input_event, x_scroll_bar_expose) (x_scroll_bar_handle_click, x_scroll_bar_note_movement): * gtkutil.c (xg_event_is_for_menubar, xg_event_is_for_scrollbar): * xselect.c (x_handle_property_notify, x_handle_selection_notify) (x_handle_dnd_message): * xsettings.c (xft_settings_event): Use 'const XEvent * const' where appropriate. * xterm.h, gtkutil.h, xsettngs.h: Adjust related prototypes. --- src/ChangeLog | 21 +++ src/gtkutil.c | 4 +- src/gtkutil.h | 4 +- src/xselect.c | 6 +- src/xsettings.c | 2 +- src/xsettings.h | 5 +- src/xterm.c | 402 +++++++++++++++++++++++------------------------- src/xterm.h | 13 +- 8 files changed, 225 insertions(+), 232 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 10349aea412..4b862f27a02 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,24 @@ +2013-09-16 Dmitry Antipov + + Do not copy X event in handle_one_xevent except KeyPress case. + Wnen XEvent is processed, it is unlikely to be changed except + KeyPress case, so we can avoid copying and use const pointer to + const data to make sure that an event is not changed elsewhere. + * xterm.c (handle_one_xevent): Change 2nd arg to 'const XEvent * + const' and do not create local copy except for the KeyPress event. + Use casts to avoid a few glitches. Adjust formatting. Add comments. + (SET_SAVED_BUTTON_EVENT): Remove and move the code to the only user. + (x_handle_net_wm_state, x_menubar_window_to_frame) + (x_detect_focus_change, construct_mouse_click, note_mouse_movement) + (x_scroll_bar_to_input_event, x_scroll_bar_expose) + (x_scroll_bar_handle_click, x_scroll_bar_note_movement): + * gtkutil.c (xg_event_is_for_menubar, xg_event_is_for_scrollbar): + * xselect.c (x_handle_property_notify, x_handle_selection_notify) + (x_handle_dnd_message): + * xsettings.c (xft_settings_event): + Use 'const XEvent * const' where appropriate. + * xterm.h, gtkutil.h, xsettngs.h: Adjust related prototypes. + 2013-09-16 Dmitry Antipov Fix X event waiting to handle multiple frames. diff --git a/src/gtkutil.c b/src/gtkutil.c index 95154ef9b52..57b7b58d9d6 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -3409,7 +3409,7 @@ free_frame_menubar (struct frame *f) } bool -xg_event_is_for_menubar (struct frame *f, XEvent *event) +xg_event_is_for_menubar (struct frame *f, const XEvent * const event) { struct x_output *x = f->output_data.x; GList *iter; @@ -3861,7 +3861,7 @@ xg_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar, frame. This function does additional checks. */ bool -xg_event_is_for_scrollbar (struct frame *f, XEvent *event) +xg_event_is_for_scrollbar (struct frame *f, const XEvent * const event) { bool retval = 0; diff --git a/src/gtkutil.h b/src/gtkutil.h index fc959862fd3..57971cf4a38 100644 --- a/src/gtkutil.h +++ b/src/gtkutil.h @@ -105,7 +105,7 @@ extern void xg_modify_menubar_widgets (GtkWidget *menubar, extern void xg_update_frame_menubar (struct frame *f); -extern bool xg_event_is_for_menubar (struct frame *f, XEvent *event); +extern bool xg_event_is_for_menubar (struct frame *, const XEvent * const); extern bool xg_have_tear_offs (void); @@ -129,7 +129,7 @@ extern void xg_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar, int portion, int position, int whole); -extern bool xg_event_is_for_scrollbar (struct frame *f, XEvent *event); +extern bool xg_event_is_for_scrollbar (struct frame *, const XEvent * const); extern int xg_get_default_scrollbar_width (void); extern void update_frame_tool_bar (struct frame *f); diff --git a/src/xselect.c b/src/xselect.c index 238eea50df6..cec91e41e75 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -1141,7 +1141,7 @@ wait_for_property_change (struct prop_location *location) /* Called from XTread_socket in response to a PropertyNotify event. */ void -x_handle_property_notify (XPropertyEvent *event) +x_handle_property_notify (const XPropertyEvent * const event) { struct prop_location *rest; @@ -1888,7 +1888,7 @@ clean_local_selection_data (Lisp_Object obj) We store t there if the reply is successful, lambda if not. */ void -x_handle_selection_notify (XSelectionEvent *event) +x_handle_selection_notify (const XSelectionEvent * const event) { if (event->requestor != reading_selection_window) return; @@ -2488,7 +2488,7 @@ FRAME is on. If FRAME is nil, the selected frame is used. */) /* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT. */ int -x_handle_dnd_message (struct frame *f, XClientMessageEvent *event, +x_handle_dnd_message (struct frame *f, const XClientMessageEvent * const event, struct x_display_info *dpyinfo, struct input_event *bufp) { Lisp_Object vec; diff --git a/src/xsettings.c b/src/xsettings.c index b5d5f4db59b..b9813e2b369 100644 --- a/src/xsettings.c +++ b/src/xsettings.c @@ -754,7 +754,7 @@ read_and_apply_settings (struct x_display_info *dpyinfo, int send_event_p) /* Check if EVENT for the display in DPYINFO is XSettings related. */ void -xft_settings_event (struct x_display_info *dpyinfo, XEvent *event) +xft_settings_event (struct x_display_info *dpyinfo, const XEvent * const event) { bool check_window_p = 0, apply_settings_p = 0; diff --git a/src/xsettings.h b/src/xsettings.h index e3738c593bd..4407ca7df92 100644 --- a/src/xsettings.h +++ b/src/xsettings.h @@ -20,9 +20,8 @@ along with GNU Emacs. If not, see . */ #ifndef XSETTINGS_H #define XSETTINGS_H -extern void xsettings_initialize (struct x_display_info *dpyinfo); -extern void xft_settings_event (struct x_display_info *dpyinfo, - XEvent *); +extern void xsettings_initialize (struct x_display_info *); +extern void xft_settings_event (struct x_display_info *, const XEvent * const); extern const char *xsettings_get_system_font (void); #ifdef USE_LUCID extern const char *xsettings_get_system_normal_font (void); diff --git a/src/xterm.c b/src/xterm.c index ea75df11048..830fe05e3b8 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -302,12 +302,13 @@ static void x_scroll_bar_report_motion (struct frame **, Lisp_Object *, enum scroll_bar_part *, Lisp_Object *, Lisp_Object *, Time *); -static int x_handle_net_wm_state (struct frame *, XPropertyEvent *); +static int x_handle_net_wm_state (struct frame *, const XPropertyEvent * const); static void x_check_fullscreen (struct frame *); static void x_check_expected_move (struct frame *, int, int); static void x_sync_with_move (struct frame *, int, int, int); -static int handle_one_xevent (struct x_display_info *, XEvent *, - int *, struct input_event *); +static int handle_one_xevent (struct x_display_info *, + const XEvent * const, int *, + struct input_event *); #ifdef USE_GTK static int x_dispatch_event (XEvent *, Display *); #endif @@ -3459,7 +3460,8 @@ x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc) /* Likewise, but consider only the menu bar widget. */ static struct frame * -x_menubar_window_to_frame (struct x_display_info *dpyinfo, XEvent *event) +x_menubar_window_to_frame (struct x_display_info *dpyinfo, + const XEvent * const event) { Window wdesc = event->xany.window; Lisp_Object tail, frame; @@ -3541,7 +3543,7 @@ x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc) static void x_detect_focus_change (struct x_display_info *dpyinfo, struct frame *frame, - XEvent *event, struct input_event *bufp) + const XEvent * const event, struct input_event *bufp) { if (!frame) return; @@ -3831,7 +3833,9 @@ x_get_keysym_name (int keysym) the mouse. */ static Lisp_Object -construct_mouse_click (struct input_event *result, XButtonEvent *event, struct frame *f) +construct_mouse_click (struct input_event *result, + const XButtonEvent * const event, + struct frame *f) { /* Make the event type NO_EVENT; we'll change that when we decide otherwise. */ @@ -3863,7 +3867,7 @@ static XMotionEvent last_mouse_motion_event; static Lisp_Object last_mouse_motion_frame; static int -note_mouse_movement (struct frame *frame, XMotionEvent *event) +note_mouse_movement (struct frame *frame, const XMotionEvent * const event) { last_mouse_movement_time = event->time; last_mouse_motion_event = *event; @@ -4207,13 +4211,7 @@ x_window_to_menu_bar (Window window) #ifdef USE_TOOLKIT_SCROLL_BARS -static void x_scroll_bar_to_input_event (XEvent *, struct input_event *); static void x_send_scroll_bar_event (Lisp_Object, int, int, int); -static void x_create_toolkit_scroll_bar (struct frame *, - struct scroll_bar *); -static void x_set_toolkit_scroll_bar_thumb (struct scroll_bar *, - int, int, int); - /* Lisp window being scrolled. Set when starting to interact with a toolkit scroll bar, reset to nil when ending the interaction. */ @@ -4360,7 +4358,8 @@ x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole) in *IEVENT. */ static void -x_scroll_bar_to_input_event (XEvent *event, struct input_event *ievent) +x_scroll_bar_to_input_event (const XEvent * const event, + struct input_event *ievent) { XClientMessageEvent *ev = (XClientMessageEvent *) event; Lisp_Object window; @@ -5504,7 +5503,7 @@ XTjudge_scroll_bars (struct frame *f) mark bits. */ static void -x_scroll_bar_expose (struct scroll_bar *bar, XEvent *event) +x_scroll_bar_expose (struct scroll_bar *bar, const XEvent * const event) { Window w = bar->x_window; struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); @@ -5542,7 +5541,9 @@ x_scroll_bar_expose (struct scroll_bar *bar, XEvent *event) static void -x_scroll_bar_handle_click (struct scroll_bar *bar, XEvent *event, struct input_event *emacs_event) +x_scroll_bar_handle_click (struct scroll_bar *bar, + const XEvent * const event, + struct input_event *emacs_event) { if (! WINDOWP (bar->window)) emacs_abort (); @@ -5599,7 +5600,8 @@ x_scroll_bar_handle_click (struct scroll_bar *bar, XEvent *event, struct input_e mark bits. */ static void -x_scroll_bar_note_movement (struct scroll_bar *bar, XMotionEvent *event) +x_scroll_bar_note_movement (struct scroll_bar *bar, + const XMotionEvent * const event) { struct frame *f = XFRAME (XWINDOW (bar->window)->frame); @@ -5751,20 +5753,6 @@ static struct x_display_info *XTread_socket_fake_io_error; static struct x_display_info *next_noop_dpyinfo; -#if defined USE_X_TOOLKIT || defined USE_GTK -#define SET_SAVED_BUTTON_EVENT \ - do \ - { \ - if (f->output_data.x->saved_menu_event == 0) \ - f->output_data.x->saved_menu_event = \ - xmalloc (sizeof (XEvent)); \ - *f->output_data.x->saved_menu_event = event; \ - inev.ie.kind = MENU_BAR_ACTIVATE_EVENT; \ - XSETFRAME (inev.ie.frame_or_window, f); \ - } \ - while (0) -#endif - enum { X_EVENT_NORMAL, @@ -5858,11 +5846,13 @@ static void xembed_send_message (struct frame *f, Time, *FINISH is X_EVENT_GOTO_OUT if caller should stop reading events. *FINISH is zero if caller should continue reading events. *FINISH is X_EVENT_DROP if event should not be passed to the toolkit. + *EVENT is unchanged unless we're processing KeyPress event. We return the number of characters stored into the buffer. */ static int -handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, +handle_one_xevent (struct x_display_info *dpyinfo, + const XEvent * const event, int *finish, struct input_event *hold_quit) { union { @@ -5874,7 +5864,6 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, ptrdiff_t nbytes = 0; struct frame *any, *f = NULL; struct coding_system coding; - XEvent event = *eventptr; Mouse_HLInfo *hlinfo = &dpyinfo->mouse_highlight; /* This holds the state XLookupString needs to implement dead keys and other tricks known as "compose processing". _X Window System_ @@ -5890,21 +5879,19 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, inev.ie.kind = NO_EVENT; inev.ie.arg = Qnil; - any = x_any_window_to_frame (dpyinfo, event.xany.window); + any = x_any_window_to_frame (dpyinfo, event->xany.window); - if (any && any->wait_event_type == event.type) + if (any && any->wait_event_type == event->type) any->wait_event_type = 0; /* Indicates we got it. */ - switch (event.type) + switch (event->type) { case ClientMessage: { - if (event.xclient.message_type - == dpyinfo->Xatom_wm_protocols - && event.xclient.format == 32) + if (event->xclient.message_type == dpyinfo->Xatom_wm_protocols + && event->xclient.format == 32) { - if (event.xclient.data.l[0] - == dpyinfo->Xatom_wm_take_focus) + if (event->xclient.data.l[0] == dpyinfo->Xatom_wm_take_focus) { /* Use the value returned by x_any_window_to_frame because this could be the shell widget window @@ -5933,15 +5920,15 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, since that might be an event for a deleted frame. */ if (f) { - Display *d = event.xclient.display; + Display *d = event->xclient.display; /* Catch and ignore errors, in case window has been iconified by a window manager such as GWM. */ x_catch_errors (d); - XSetInputFocus (d, event.xclient.window, + XSetInputFocus (d, event->xclient.window, /* The ICCCM says this is the only valid choice. */ RevertToParent, - event.xclient.data.l[1]); + event->xclient.data.l[1]); /* This is needed to detect the error if there is an error. */ XSync (d, False); @@ -5952,8 +5939,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, goto done; } - if (event.xclient.data.l[0] - == dpyinfo->Xatom_wm_save_yourself) + if (event->xclient.data.l[0] == dpyinfo->Xatom_wm_save_yourself) { /* Save state modify the WM_COMMAND property to something which can reinstate us. This notifies @@ -5968,23 +5954,22 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #endif { f = x_top_window_to_frame (dpyinfo, - event.xclient.window); + event->xclient.window); /* This is just so we only give real data once for a single Emacs process. */ if (f == SELECTED_FRAME ()) XSetCommand (FRAME_X_DISPLAY (f), - event.xclient.window, + event->xclient.window, initial_argv, initial_argc); else if (f) XSetCommand (FRAME_X_DISPLAY (f), - event.xclient.window, + event->xclient.window, 0, 0); } goto done; } - if (event.xclient.data.l[0] - == dpyinfo->Xatom_wm_delete_window) + if (event->xclient.data.l[0] == dpyinfo->Xatom_wm_delete_window) { f = any; if (!f) @@ -5998,20 +5983,16 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, goto done; } - if (event.xclient.message_type - == dpyinfo->Xatom_wm_configure_denied) - { - goto done; - } + if (event->xclient.message_type == dpyinfo->Xatom_wm_configure_denied) + goto done; - if (event.xclient.message_type - == dpyinfo->Xatom_wm_window_moved) + if (event->xclient.message_type == dpyinfo->Xatom_wm_window_moved) { int new_x, new_y; - f = x_window_to_frame (dpyinfo, event.xclient.window); + f = x_window_to_frame (dpyinfo, event->xclient.window); - new_x = event.xclient.data.s[0]; - new_y = event.xclient.data.s[1]; + new_x = event->xclient.data.s[0]; + new_y = event->xclient.data.s[1]; if (f) { @@ -6022,28 +6003,25 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, } #ifdef HACK_EDITRES - if (event.xclient.message_type - == dpyinfo->Xatom_editres) + if (event->xclient.message_type == dpyinfo->Xatom_editres) { f = any; if (f) - _XEditResCheckMessages (f->output_data.x->widget, NULL, - &event, NULL); + _XEditResCheckMessages (f->output_data.x->widget, + NULL, (XEvent *) event, NULL); goto done; } #endif /* HACK_EDITRES */ - if ((event.xclient.message_type - == dpyinfo->Xatom_DONE) - || (event.xclient.message_type - == dpyinfo->Xatom_PAGE)) + if (event->xclient.message_type == dpyinfo->Xatom_DONE + || event->xclient.message_type == dpyinfo->Xatom_PAGE) { /* Ghostview job completed. Kill it. We could reply with "Next" if we received "Page", but we currently never do because we are interested in images, only, which should have 1 page. */ - Pixmap pixmap = (Pixmap) event.xclient.data.l[1]; - f = x_window_to_frame (dpyinfo, event.xclient.window); + Pixmap pixmap = (Pixmap) event->xclient.data.l[1]; + f = x_window_to_frame (dpyinfo, event->xclient.window); if (!f) goto OTHER; x_kill_gs_process (pixmap, f); @@ -6054,54 +6032,52 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #ifdef USE_TOOLKIT_SCROLL_BARS /* Scroll bar callbacks send a ClientMessage from which we construct an input_event. */ - if (event.xclient.message_type - == dpyinfo->Xatom_Scrollbar) + if (event->xclient.message_type == dpyinfo->Xatom_Scrollbar) { - x_scroll_bar_to_input_event (&event, &inev.ie); + x_scroll_bar_to_input_event (event, &inev.ie); *finish = X_EVENT_GOTO_OUT; goto done; } #endif /* USE_TOOLKIT_SCROLL_BARS */ /* XEmbed messages from the embedder (if any). */ - if (event.xclient.message_type - == dpyinfo->Xatom_XEMBED) + if (event->xclient.message_type == dpyinfo->Xatom_XEMBED) { - enum xembed_message msg = event.xclient.data.l[1]; + enum xembed_message msg = event->xclient.data.l[1]; if (msg == XEMBED_FOCUS_IN || msg == XEMBED_FOCUS_OUT) - x_detect_focus_change (dpyinfo, any, &event, &inev.ie); + x_detect_focus_change (dpyinfo, any, event, &inev.ie); *finish = X_EVENT_GOTO_OUT; goto done; } - xft_settings_event (dpyinfo, &event); + xft_settings_event (dpyinfo, event); f = any; if (!f) goto OTHER; - if (x_handle_dnd_message (f, &event.xclient, dpyinfo, &inev.ie)) + if (x_handle_dnd_message (f, &event->xclient, dpyinfo, &inev.ie)) *finish = X_EVENT_DROP; } break; case SelectionNotify: - dpyinfo->last_user_time = event.xselection.time; + dpyinfo->last_user_time = event->xselection.time; #ifdef USE_X_TOOLKIT - if (! x_window_to_frame (dpyinfo, event.xselection.requestor)) + if (! x_window_to_frame (dpyinfo, event->xselection.requestor)) goto OTHER; #endif /* not USE_X_TOOLKIT */ - x_handle_selection_notify (&event.xselection); + x_handle_selection_notify (&event->xselection); break; case SelectionClear: /* Someone has grabbed ownership. */ - dpyinfo->last_user_time = event.xselectionclear.time; + dpyinfo->last_user_time = event->xselectionclear.time; #ifdef USE_X_TOOLKIT - if (! x_window_to_frame (dpyinfo, event.xselectionclear.window)) + if (! x_window_to_frame (dpyinfo, event->xselectionclear.window)) goto OTHER; #endif /* USE_X_TOOLKIT */ { - XSelectionClearEvent *eventp = &(event.xselectionclear); + const XSelectionClearEvent * const eventp = &event->xselectionclear; inev.ie.kind = SELECTION_CLEAR_EVENT; SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display; @@ -6111,29 +6087,29 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, break; case SelectionRequest: /* Someone wants our selection. */ - dpyinfo->last_user_time = event.xselectionrequest.time; + dpyinfo->last_user_time = event->xselectionrequest.time; #ifdef USE_X_TOOLKIT - if (!x_window_to_frame (dpyinfo, event.xselectionrequest.owner)) + if (!x_window_to_frame (dpyinfo, event->xselectionrequest.owner)) goto OTHER; #endif /* USE_X_TOOLKIT */ { - XSelectionRequestEvent *eventp = &(event.xselectionrequest); + const XSelectionRequestEvent * const eventp = &event->xselectionrequest; - inev.ie.kind = SELECTION_REQUEST_EVENT; - SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display; - SELECTION_EVENT_REQUESTOR (&inev.sie) = eventp->requestor; - SELECTION_EVENT_SELECTION (&inev.sie) = eventp->selection; - SELECTION_EVENT_TARGET (&inev.sie) = eventp->target; - SELECTION_EVENT_PROPERTY (&inev.sie) = eventp->property; - SELECTION_EVENT_TIME (&inev.sie) = eventp->time; + inev.ie.kind = SELECTION_REQUEST_EVENT; + SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display; + SELECTION_EVENT_REQUESTOR (&inev.sie) = eventp->requestor; + SELECTION_EVENT_SELECTION (&inev.sie) = eventp->selection; + SELECTION_EVENT_TARGET (&inev.sie) = eventp->target; + SELECTION_EVENT_PROPERTY (&inev.sie) = eventp->property; + SELECTION_EVENT_TIME (&inev.sie) = eventp->time; } break; case PropertyNotify: - dpyinfo->last_user_time = event.xproperty.time; - f = x_top_window_to_frame (dpyinfo, event.xproperty.window); - if (f && event.xproperty.atom == dpyinfo->Xatom_net_wm_state) - if (x_handle_net_wm_state (f, &event.xproperty) + dpyinfo->last_user_time = event->xproperty.time; + f = x_top_window_to_frame (dpyinfo, event->xproperty.window); + if (f && event->xproperty.atom == dpyinfo->Xatom_net_wm_state) + if (x_handle_net_wm_state (f, &event->xproperty) && FRAME_ICONIFIED_P (f) && f->output_data.x->net_wm_state_hidden_seen) { @@ -6148,16 +6124,16 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, XSETFRAME (inev.ie.frame_or_window, f); } - x_handle_property_notify (&event.xproperty); - xft_settings_event (dpyinfo, &event); + x_handle_property_notify (&event->xproperty); + xft_settings_event (dpyinfo, event); goto OTHER; case ReparentNotify: - f = x_top_window_to_frame (dpyinfo, event.xreparent.window); + f = x_top_window_to_frame (dpyinfo, event->xreparent.window); if (f) { int x, y; - f->output_data.x->parent_desc = event.xreparent.parent; + f->output_data.x->parent_desc = event->xreparent.parent; x_real_positions (f, &x, &y); f->left_pos = x; f->top_pos = y; @@ -6171,15 +6147,15 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, goto OTHER; case Expose: - f = x_window_to_frame (dpyinfo, event.xexpose.window); + f = x_window_to_frame (dpyinfo, event->xexpose.window); if (f) { #ifdef USE_GTK /* This seems to be needed for GTK 2.6. */ - x_clear_area (event.xexpose.display, - event.xexpose.window, - event.xexpose.x, event.xexpose.y, - event.xexpose.width, event.xexpose.height); + x_clear_area (event->xexpose.display, + event->xexpose.window, + event->xexpose.x, event->xexpose.y, + event->xexpose.width, event->xexpose.height); #endif if (!FRAME_VISIBLE_P (f)) { @@ -6189,9 +6165,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, SET_FRAME_GARBAGED (f); } else - expose_frame (f, - event.xexpose.x, event.xexpose.y, - event.xexpose.width, event.xexpose.height); + expose_frame (f, event->xexpose.x, event->xexpose.y, + event->xexpose.width, event->xexpose.height); } else { @@ -6203,8 +6178,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, themselves, so there's no way to dispatch events to them. Recognize this case separately. */ { - Widget widget - = x_window_to_menu_bar (event.xexpose.window); + Widget widget = x_window_to_menu_bar (event->xexpose.window); if (widget) xlwmenu_redisplay (widget); } @@ -6214,11 +6188,11 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, /* Dispatch event to the widget. */ goto OTHER; #else /* not USE_TOOLKIT_SCROLL_BARS */ - bar = x_window_to_scroll_bar (event.xexpose.display, - event.xexpose.window); + bar = x_window_to_scroll_bar (event->xexpose.display, + event->xexpose.window); if (bar) - x_scroll_bar_expose (bar, &event); + x_scroll_bar_expose (bar, event); #ifdef USE_X_TOOLKIT else goto OTHER; @@ -6230,14 +6204,12 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, case GraphicsExpose: /* This occurs when an XCopyArea's source area was obscured or not available. */ - f = x_window_to_frame (dpyinfo, event.xgraphicsexpose.drawable); + f = x_window_to_frame (dpyinfo, event->xgraphicsexpose.drawable); if (f) - { - expose_frame (f, - event.xgraphicsexpose.x, event.xgraphicsexpose.y, - event.xgraphicsexpose.width, - event.xgraphicsexpose.height); - } + expose_frame (f, event->xgraphicsexpose.x, + event->xgraphicsexpose.y, + event->xgraphicsexpose.width, + event->xgraphicsexpose.height); #ifdef USE_X_TOOLKIT else goto OTHER; @@ -6251,13 +6223,13 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, case UnmapNotify: /* Redo the mouse-highlight after the tooltip has gone. */ - if (event.xunmap.window == tip_window) + if (event->xunmap.window == tip_window) { tip_window = 0; redo_mouse_highlight (); } - f = x_top_window_to_frame (dpyinfo, event.xunmap.window); + f = x_top_window_to_frame (dpyinfo, event->xunmap.window); if (f) /* F may no longer exist if the frame was deleted. */ { @@ -6282,7 +6254,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, goto OTHER; case MapNotify: - if (event.xmap.window == tip_window) + if (event->xmap.window == tip_window) /* The tooltip has been drawn already. Avoid the SET_FRAME_GARBAGED below. */ goto OTHER; @@ -6290,7 +6262,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, /* We use x_top_window_to_frame because map events can come for sub-windows and they don't mean that the frame is visible. */ - f = x_top_window_to_frame (dpyinfo, event.xmap.window); + f = x_top_window_to_frame (dpyinfo, event->xmap.window); if (f) { bool iconified = FRAME_ICONIFIED_P (f); @@ -6330,7 +6302,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, case KeyPress: - dpyinfo->last_user_time = event.xkey.time; + dpyinfo->last_user_time = event->xkey.time; ignore_next_mouse_click_timeout = 0; #if defined (USE_X_TOOLKIT) || defined (USE_GTK) @@ -6359,7 +6331,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, /* Scroll bars consume key events, but we want the keys to go to the scroll bar's frame. */ Widget widget = XtWindowToWidget (dpyinfo->display, - event.xkey.window); + event->xkey.window); if (widget && XmIsScrollBar (widget)) { widget = XtParent (widget); @@ -6388,6 +6360,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, int modifiers; Lisp_Object coding_system = Qlatin_1; Lisp_Object c; + /* Event will be modified. */ + XKeyEvent xkey = event->xkey; #ifdef USE_GTK /* Don't pass keys to GTK. A Tab will shift focus to the @@ -6397,20 +6371,19 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, *finish = X_EVENT_DROP; #endif - event.xkey.state - |= x_emacs_to_x_modifiers (FRAME_DISPLAY_INFO (f), - extra_keyboard_modifiers); - modifiers = event.xkey.state; + xkey.state |= x_emacs_to_x_modifiers (FRAME_DISPLAY_INFO (f), + extra_keyboard_modifiers); + modifiers = xkey.state; /* This will have to go some day... */ /* make_lispy_event turns chars into control chars. Don't do it here because XLookupString is too eager. */ - event.xkey.state &= ~ControlMask; - event.xkey.state &= ~(dpyinfo->meta_mod_mask - | dpyinfo->super_mod_mask - | dpyinfo->hyper_mod_mask - | dpyinfo->alt_mod_mask); + xkey.state &= ~ControlMask; + xkey.state &= ~(dpyinfo->meta_mod_mask + | dpyinfo->super_mod_mask + | dpyinfo->hyper_mod_mask + | dpyinfo->alt_mod_mask); /* In case Meta is ComposeCharacter, clear its status. According to Markus Ehrnsperger @@ -6427,7 +6400,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, coding_system = Vlocale_coding_system; nbytes = XmbLookupString (FRAME_XIC (f), - &event.xkey, (char *) copy_bufptr, + &xkey, (char *) copy_bufptr, copy_bufsiz, &keysym, &status_return); if (status_return == XBufferOverflow) @@ -6435,7 +6408,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, copy_bufsiz = nbytes + 1; copy_bufptr = alloca (copy_bufsiz); nbytes = XmbLookupString (FRAME_XIC (f), - &event.xkey, (char *) copy_bufptr, + &xkey, (char *) copy_bufptr, copy_bufsiz, &keysym, &status_return); } @@ -6452,11 +6425,11 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, emacs_abort (); } else - nbytes = XLookupString (&event.xkey, (char *) copy_bufptr, + nbytes = XLookupString (&xkey, (char *) copy_bufptr, copy_bufsiz, &keysym, &compose_status); #else - nbytes = XLookupString (&event.xkey, (char *) copy_bufptr, + nbytes = XLookupString (&xkey, (char *) copy_bufptr, copy_bufsiz, &keysym, &compose_status); #endif @@ -6473,7 +6446,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, XSETFRAME (inev.ie.frame_or_window, f); inev.ie.modifiers = x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), modifiers); - inev.ie.timestamp = event.xkey.time; + inev.ie.timestamp = xkey.time; /* First deal with keysyms which have defined translations to characters. */ @@ -6649,6 +6622,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, if (keysym == NoSymbol) break; } + /* FIXME: check side effects and remove this. */ + ((XEvent *) event)->xkey = xkey; } done_keysym: #ifdef HAVE_X_I18N @@ -6661,7 +6636,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #endif case KeyRelease: - dpyinfo->last_user_time = event.xkey.time; + dpyinfo->last_user_time = event->xkey.time; #ifdef HAVE_X_I18N /* Don't dispatch this event since XtDispatchEvent calls XFilterEvent, and two calls in a row may freeze the @@ -6672,35 +6647,35 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #endif case EnterNotify: - dpyinfo->last_user_time = event.xcrossing.time; - x_detect_focus_change (dpyinfo, any, &event, &inev.ie); + dpyinfo->last_user_time = event->xcrossing.time; + x_detect_focus_change (dpyinfo, any, event, &inev.ie); f = any; if (f && x_mouse_click_focus_ignore_position) - ignore_next_mouse_click_timeout = event.xmotion.time + 200; + ignore_next_mouse_click_timeout = event->xmotion.time + 200; /* EnterNotify counts as mouse movement, so update things that depend on mouse position. */ if (f && !f->output_data.x->hourglass_p) - note_mouse_movement (f, &event.xmotion); + note_mouse_movement (f, &event->xmotion); #ifdef USE_GTK /* We may get an EnterNotify on the buttons in the toolbar. In that case we moved out of any highlighted area and need to note this. */ if (!f && last_mouse_glyph_frame) - note_mouse_movement (last_mouse_glyph_frame, &event.xmotion); + note_mouse_movement (last_mouse_glyph_frame, &event->xmotion); #endif goto OTHER; case FocusIn: - x_detect_focus_change (dpyinfo, any, &event, &inev.ie); + x_detect_focus_change (dpyinfo, any, event, &inev.ie); goto OTHER; case LeaveNotify: - dpyinfo->last_user_time = event.xcrossing.time; - x_detect_focus_change (dpyinfo, any, &event, &inev.ie); + dpyinfo->last_user_time = event->xcrossing.time; + x_detect_focus_change (dpyinfo, any, event, &inev.ie); - f = x_top_window_to_frame (dpyinfo, event.xcrossing.window); + f = x_top_window_to_frame (dpyinfo, event->xcrossing.window); if (f) { if (f == hlinfo->mouse_face_mouse_frame) @@ -6721,17 +6696,17 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #ifdef USE_GTK /* See comment in EnterNotify above */ else if (last_mouse_glyph_frame) - note_mouse_movement (last_mouse_glyph_frame, &event.xmotion); + note_mouse_movement (last_mouse_glyph_frame, &event->xmotion); #endif goto OTHER; case FocusOut: - x_detect_focus_change (dpyinfo, any, &event, &inev.ie); + x_detect_focus_change (dpyinfo, any, event, &inev.ie); goto OTHER; case MotionNotify: { - dpyinfo->last_user_time = event.xmotion.time; + dpyinfo->last_user_time = event->xmotion.time; previous_help_echo_string = help_echo_string; help_echo_string = Qnil; @@ -6739,7 +6714,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, && FRAME_LIVE_P (last_mouse_frame)) f = last_mouse_frame; else - f = x_window_to_frame (dpyinfo, event.xmotion.window); + f = x_window_to_frame (dpyinfo, event->xmotion.window); if (hlinfo->mouse_face_hidden) { @@ -6748,7 +6723,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, } #ifdef USE_GTK - if (f && xg_event_is_for_scrollbar (f, &event)) + if (f && xg_event_is_for_scrollbar (f, event)) f = 0; #endif if (f) @@ -6760,7 +6735,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, { static Lisp_Object last_mouse_window; Lisp_Object window = window_from_coordinates - (f, event.xmotion.x, event.xmotion.y, 0, 0); + (f, event->xmotion.x, event->xmotion.y, 0, 0); /* Window will be selected only when it is not selected now and last mouse movement event was not in it. Minibuffer window @@ -6781,18 +6756,18 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, /* Remember the last window where we saw the mouse. */ last_mouse_window = window; } - if (!note_mouse_movement (f, &event.xmotion)) + if (!note_mouse_movement (f, &event->xmotion)) help_echo_string = previous_help_echo_string; } else { #ifndef USE_TOOLKIT_SCROLL_BARS struct scroll_bar *bar - = x_window_to_scroll_bar (event.xmotion.display, - event.xmotion.window); + = x_window_to_scroll_bar (event->xmotion.display, + event->xmotion.window); if (bar) - x_scroll_bar_note_movement (bar, &event.xmotion); + x_scroll_bar_note_movement (bar, &event->xmotion); #endif /* USE_TOOLKIT_SCROLL_BARS */ /* If we move outside the frame, then we're @@ -6809,14 +6784,14 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, } case ConfigureNotify: - f = x_top_window_to_frame (dpyinfo, event.xconfigure.window); + f = x_top_window_to_frame (dpyinfo, event->xconfigure.window); #ifdef USE_GTK if (!f && (f = any) - && event.xconfigure.window == FRAME_X_WINDOW (f)) + && event->xconfigure.window == FRAME_X_WINDOW (f)) { - xg_frame_resized (f, event.xconfigure.width, - event.xconfigure.height); + xg_frame_resized (f, event->xconfigure.width, + event->xconfigure.height); f = 0; } #endif @@ -6824,8 +6799,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, { #ifndef USE_X_TOOLKIT #ifndef USE_GTK - int rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, event.xconfigure.height); - int columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, event.xconfigure.width); + int rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, event->xconfigure.height); + int columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, event->xconfigure.width); /* In the toolkit version, change_frame_size is called by the code that handles resizing @@ -6836,16 +6811,16 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, to check the pixel dimensions as well. */ if (columns != FRAME_COLS (f) || rows != FRAME_LINES (f) - || event.xconfigure.width != FRAME_PIXEL_WIDTH (f) - || event.xconfigure.height != FRAME_PIXEL_HEIGHT (f)) + || event->xconfigure.width != FRAME_PIXEL_WIDTH (f) + || event->xconfigure.height != FRAME_PIXEL_HEIGHT (f)) { change_frame_size (f, rows, columns, 0, 1, 0); SET_FRAME_GARBAGED (f); cancel_mouse_face (f); } - FRAME_PIXEL_WIDTH (f) = event.xconfigure.width; - FRAME_PIXEL_HEIGHT (f) = event.xconfigure.height; + FRAME_PIXEL_WIDTH (f) = event->xconfigure.width; + FRAME_PIXEL_HEIGHT (f) = event->xconfigure.height; #endif /* not USE_GTK */ #endif @@ -6876,17 +6851,17 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, memset (&compose_status, 0, sizeof (compose_status)); last_mouse_glyph_frame = 0; - dpyinfo->last_user_time = event.xbutton.time; + dpyinfo->last_user_time = event->xbutton.time; if (dpyinfo->grabbed && last_mouse_frame && FRAME_LIVE_P (last_mouse_frame)) f = last_mouse_frame; else - f = x_window_to_frame (dpyinfo, event.xbutton.window); + f = x_window_to_frame (dpyinfo, event->xbutton.window); #ifdef USE_GTK - if (f && xg_event_is_for_scrollbar (f, &event)) + if (f && xg_event_is_for_scrollbar (f, event)) f = 0; #endif if (f) @@ -6897,16 +6872,16 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window))) { Lisp_Object window; - int x = event.xbutton.x; - int y = event.xbutton.y; + int x = event->xbutton.x; + int y = event->xbutton.y; window = window_from_coordinates (f, x, y, 0, 1); tool_bar_p = EQ (window, f->tool_bar_window); - if (tool_bar_p && event.xbutton.button < 4) + if (tool_bar_p && event->xbutton.button < 4) handle_tool_bar_click - (f, x, y, event.xbutton.type == ButtonPress, - x_x_to_emacs_modifiers (dpyinfo, event.xbutton.state)); + (f, x, y, event->xbutton.type == ButtonPress, + x_x_to_emacs_modifiers (dpyinfo, event->xbutton.state)); } #endif /* !USE_GTK */ @@ -6917,52 +6892,52 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, { if (ignore_next_mouse_click_timeout) { - if (event.type == ButtonPress - && (int)(event.xbutton.time - ignore_next_mouse_click_timeout) > 0) + if (event->type == ButtonPress + && (int)(event->xbutton.time - ignore_next_mouse_click_timeout) > 0) { ignore_next_mouse_click_timeout = 0; - construct_mouse_click (&inev.ie, &event.xbutton, f); + construct_mouse_click (&inev.ie, &event->xbutton, f); } - if (event.type == ButtonRelease) + if (event->type == ButtonRelease) ignore_next_mouse_click_timeout = 0; } else - construct_mouse_click (&inev.ie, &event.xbutton, f); + construct_mouse_click (&inev.ie, &event->xbutton, f); } if (FRAME_X_EMBEDDED_P (f)) - xembed_send_message (f, event.xbutton.time, + xembed_send_message (f, event->xbutton.time, XEMBED_REQUEST_FOCUS, 0, 0, 0); } else { struct scroll_bar *bar - = x_window_to_scroll_bar (event.xbutton.display, - event.xbutton.window); + = x_window_to_scroll_bar (event->xbutton.display, + event->xbutton.window); #ifdef USE_TOOLKIT_SCROLL_BARS /* Make the "Ctrl-Mouse-2 splits window" work for toolkit scroll bars. */ - if (bar && event.xbutton.state & ControlMask) + if (bar && event->xbutton.state & ControlMask) { - x_scroll_bar_handle_click (bar, &event, &inev.ie); + x_scroll_bar_handle_click (bar, event, &inev.ie); *finish = X_EVENT_DROP; } #else /* not USE_TOOLKIT_SCROLL_BARS */ if (bar) - x_scroll_bar_handle_click (bar, &event, &inev.ie); + x_scroll_bar_handle_click (bar, event, &inev.ie); #endif /* not USE_TOOLKIT_SCROLL_BARS */ } - if (event.type == ButtonPress) + if (event->type == ButtonPress) { - dpyinfo->grabbed |= (1 << event.xbutton.button); + dpyinfo->grabbed |= (1 << event->xbutton.button); last_mouse_frame = f; if (!tool_bar_p) last_tool_bar_item = -1; } else - dpyinfo->grabbed &= ~(1 << event.xbutton.button); + dpyinfo->grabbed &= ~(1 << event->xbutton.button); /* Ignore any mouse motion that happened before this event; any subsequent mouse-movement Emacs events should reflect @@ -6971,7 +6946,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, f->mouse_moved = 0; #if defined (USE_X_TOOLKIT) || defined (USE_GTK) - f = x_menubar_window_to_frame (dpyinfo, &event); + f = x_menubar_window_to_frame (dpyinfo, event); /* For a down-event in the menu bar, don't pass it to Xt right now. Instead, save it away @@ -6980,19 +6955,23 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, if (! popup_activated () #ifdef USE_GTK /* Gtk+ menus only react to the first three buttons. */ - && event.xbutton.button < 3 + && event->xbutton.button < 3 #endif - && f && event.type == ButtonPress + && f && event->type == ButtonPress /* Verify the event is really within the menu bar and not just sent to it due to grabbing. */ - && event.xbutton.x >= 0 - && event.xbutton.x < FRAME_PIXEL_WIDTH (f) - && event.xbutton.y >= 0 - && event.xbutton.y < f->output_data.x->menubar_height - && event.xbutton.same_screen) + && event->xbutton.x >= 0 + && event->xbutton.x < FRAME_PIXEL_WIDTH (f) + && event->xbutton.y >= 0 + && event->xbutton.y < f->output_data.x->menubar_height + && event->xbutton.same_screen) { - SET_SAVED_BUTTON_EVENT; - *finish = X_EVENT_DROP; + if (!f->output_data.x->saved_menu_event) + f->output_data.x->saved_menu_event = xmalloc (sizeof *event); + *f->output_data.x->saved_menu_event = *event; + inev.ie.kind = MENU_BAR_ACTIVATE_EVENT; + XSETFRAME (inev.ie.frame_or_window, f); + *finish = X_EVENT_DROP; } else goto OTHER; @@ -7012,18 +6991,18 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, case MappingNotify: /* Someone has changed the keyboard mapping - update the local cache. */ - switch (event.xmapping.request) + switch (event->xmapping.request) { case MappingModifier: x_find_modifier_meanings (dpyinfo); /* This is meant to fall through. */ case MappingKeyboard: - XRefreshKeyboardMapping (&event.xmapping); + XRefreshKeyboardMapping ((XMappingEvent *) &event->xmapping); } goto OTHER; case DestroyNotify: - xft_settings_event (dpyinfo, &event); + xft_settings_event (dpyinfo, event); break; default: @@ -7031,7 +7010,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, #ifdef USE_X_TOOLKIT block_input (); if (*finish != X_EVENT_DROP) - XtDispatchEvent (&event); + XtDispatchEvent ((XEvent *) event); unblock_input (); #endif /* USE_X_TOOLKIT */ break; @@ -7069,7 +7048,6 @@ handle_one_xevent (struct x_display_info *dpyinfo, XEvent *eventptr, } SAFE_FREE (); - *eventptr = event; return count; } @@ -8554,7 +8532,7 @@ XTfullscreen_hook (struct frame *f) static int -x_handle_net_wm_state (struct frame *f, XPropertyEvent *event) +x_handle_net_wm_state (struct frame *f, const XPropertyEvent * const event) { int value = FULLSCREEN_NONE; Lisp_Object lval; diff --git a/src/xterm.h b/src/xterm.h index 2703c743292..8dc86784b09 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -888,11 +888,6 @@ struct selection_input_event #define SELECTION_EVENT_TIME(eventp) \ (((struct selection_input_event *) (eventp))->time) -/* From xselect.c. */ - -void x_handle_selection_notify (XSelectionEvent *); -void x_handle_property_notify (XPropertyEvent *); - /* From xfns.c. */ extern void x_free_gcs (struct frame *); @@ -946,8 +941,8 @@ extern void x_wait_for_event (struct frame *, int); /* Defined in xselect.c */ -extern void x_handle_property_notify (XPropertyEvent *); -extern void x_handle_selection_notify (XSelectionEvent *); +extern void x_handle_property_notify (const XPropertyEvent * const); +extern void x_handle_selection_notify (const XSelectionEvent * const); extern void x_handle_selection_event (struct input_event *); extern void x_clear_frame_selections (struct frame *); @@ -959,9 +954,9 @@ extern void x_send_client_event (Lisp_Object display, Lisp_Object values); extern int x_handle_dnd_message (struct frame *, - XClientMessageEvent *, + const XClientMessageEvent * const, struct x_display_info *, - struct input_event *bufp); + struct input_event *); extern int x_check_property_data (Lisp_Object); extern void x_fill_property_data (Display *, Lisp_Object, From 83a119f8d892a790b25bd0d856df82fb25b0ba72 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 16 Sep 2013 15:23:03 +0400 Subject: [PATCH 162/321] * xterm.c (toolkit_scroll_bar_interaction): Use bool for boolean. (ignore_next_mouse_click_timeout): Use Time as X does. (handle_one_xevent): Avoid cast and use unsigned comparison. --- src/ChangeLog | 6 ++++++ src/xterm.c | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4b862f27a02..d53f1414917 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-09-16 Dmitry Antipov + + * xterm.c (toolkit_scroll_bar_interaction): Use bool for boolean. + (ignore_next_mouse_click_timeout): Use Time as X does. + (handle_one_xevent): Avoid cast and use unsigned comparison. + 2013-09-16 Dmitry Antipov Do not copy X event in handle_one_xevent except KeyPress case. diff --git a/src/xterm.c b/src/xterm.c index 830fe05e3b8..89f543abca6 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -160,20 +160,21 @@ Lisp_Object x_display_name_list; static struct frame *pending_autoraise_frame; #ifdef USE_X_TOOLKIT + /* The application context for Xt use. */ XtAppContext Xt_app_con; static String Xt_default_resources[] = {0}; /* Non-zero means user is interacting with a toolkit scroll bar. */ +static bool toolkit_scroll_bar_interaction; -static int toolkit_scroll_bar_interaction; #endif /* USE_X_TOOLKIT */ /* Non-zero timeout value means ignore next mouse click if it arrives before that timeout elapses (i.e. as part of the same sequence of events resulting from clicking on a frame to select it). */ -static unsigned long ignore_next_mouse_click_timeout; +static Time ignore_next_mouse_click_timeout; /* Mouse movement. @@ -6893,7 +6894,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, if (ignore_next_mouse_click_timeout) { if (event->type == ButtonPress - && (int)(event->xbutton.time - ignore_next_mouse_click_timeout) > 0) + && event->xbutton.time > ignore_next_mouse_click_timeout) { ignore_next_mouse_click_timeout = 0; construct_mouse_click (&inev.ie, &event->xbutton, f); From 6434e34375dde73a575c5f88970b2793a7cb7fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Mon, 16 Sep 2013 17:55:02 +0200 Subject: [PATCH 163/321] Fix syms_of_(mac|ms)font calls. * font.c (syms_of_font): Move call to syms_of_(ns|mac)font ... * nsterm.m (syms_of_nsterm): ... to here. --- src/ChangeLog | 6 ++++++ src/font.c | 6 ------ src/nsterm.m | 8 ++++++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index d53f1414917..8b9c1ca904d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-09-16 Jan Djärv + + * font.c (syms_of_font): Move call to syms_of_(ns|mac)font ... + + * nsterm.m (syms_of_nsterm): ... to here. + 2013-09-16 Dmitry Antipov * xterm.c (toolkit_scroll_bar_interaction): Use bool for boolean. diff --git a/src/font.c b/src/font.c index cc832f9a88a..68db9f2ef2d 100644 --- a/src/font.c +++ b/src/font.c @@ -5197,12 +5197,6 @@ EMACS_FONT_LOG is set. Otherwise, it is set to t. */); #ifdef HAVE_NTGUI syms_of_w32font (); #endif /* HAVE_NTGUI */ -#ifdef HAVE_NS - syms_of_nsfont (); -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 - syms_of_macfont (); -#endif -#endif /* HAVE_NS */ #endif /* HAVE_WINDOW_SYSTEM */ } diff --git a/src/nsterm.m b/src/nsterm.m index 2fc8a09c80f..6c5f5f54cb9 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -7461,4 +7461,12 @@ Nil means use fullscreen the old (< 10.7) way. The old way works better with /* Tell Emacs about this window system. */ Fprovide (Qns, Qnil); + + syms_of_nsfont (); +#ifdef NS_IMPL_COCOA +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + syms_of_macfont (); +#endif +#endif + } From 1809eef8b7f87b7d98b414f20ef61608e0582b0d Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 16 Sep 2013 12:29:46 -0400 Subject: [PATCH 164/321] * lisp/subr.el (eval-after-load): Preserve evaluation order. Fixes: debbugs:15389 --- lisp/ChangeLog | 4 ++++ lisp/subr.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1ea13a9a0be..7cb08cf59ca 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-16 Stefan Monnier + + * subr.el (eval-after-load): Preserve evaluation order (bug#15389). + 2013-09-12 Stefan Monnier * abbrev.el (abbrev--check-chars): Fix thinko (bug#15329). diff --git a/lisp/subr.el b/lisp/subr.el index 0434e3856f9..cf168971812 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1872,7 +1872,7 @@ This function makes or adds to an entry on `after-load-alist'." nil (remove-hook 'after-load-functions ',fun) ,',form))) - (add-hook 'after-load-functions fun)) + (add-hook 'after-load-functions fun 'append)) ;; Not being provided from a file, run form right now. ,form))) ;; Add FORM to the element unless it's already there. From 510f531ef2307cc4e5d848c2c0ea9efd15c96409 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Sep 2013 13:54:15 -0400 Subject: [PATCH 165/321] * etc/CONTRIBUTE: Clarify disclaimer a bit. --- etc/CONTRIBUTE | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/etc/CONTRIBUTE b/etc/CONTRIBUTE index 3ccd180aa0c..c9d84a8d5a2 100644 --- a/etc/CONTRIBUTE +++ b/etc/CONTRIBUTE @@ -60,6 +60,11 @@ answer any questions you may have (or point you to the people with the answers), at the emacs-devel@gnu.org mailing list. A copyright disclaimer is also a possibility, but we prefer an assignment. +Note that the disclaimer, like an assignment, involves you sending +signed paperwork to the FSF (simply saying "this is in the public domain" +is not enough). Also, a disclaimer cannot be applied to future work, it +has to be repeated each time you want to send something new. + We can accept small changes (roughly, fewer than 15 lines) without an assignment. This is a cumulative limit (e.g. three separate 5 line patches) over all your contributions. From 3f386383dc0459fb857c0831aeecb9072f7085d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Mon, 16 Sep 2013 20:17:35 +0200 Subject: [PATCH 166/321] * xsettings.c (init_gconf, init_gsettings): Check for Glib 2.36.0 before calling g_type_init. --- src/ChangeLog | 3 +++ src/xsettings.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 8b9c1ca904d..ceae9e1a63e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2013-09-16 Jan Djärv + * xsettings.c (init_gconf, init_gsettings): Check for Glib 2.36.0 + before calling g_type_init. + * font.c (syms_of_font): Move call to syms_of_(ns|mac)font ... * nsterm.m (syms_of_nsterm): ... to here. diff --git a/src/xsettings.c b/src/xsettings.c index b9813e2b369..a64e09c92e7 100644 --- a/src/xsettings.c +++ b/src/xsettings.c @@ -804,7 +804,9 @@ init_gsettings (void) int schema_found = 0; #ifdef HAVE_G_TYPE_INIT +#if ! GLIB_CHECK_VERSION (2, 36, 0) g_type_init (); +#endif #endif schemas = g_settings_list_schemas (); @@ -861,7 +863,9 @@ init_gconf (void) char *s; #ifdef HAVE_G_TYPE_INIT +#if ! GLIB_CHECK_VERSION (2, 36, 0) g_type_init (); +#endif #endif gconf_client = gconf_client_get_default (); From 70568a90a17f4ea136d99f0c8eed5088322fb5ed Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 16 Sep 2013 14:23:30 -0400 Subject: [PATCH 167/321] * lisp/eshell/esh-opt.el: Fix last change to set lexical-vars properly. (eshell--do-opts): Rename from eshell-do-opt, remove arg `body-fun', return args and options. (eshell-eval-using-options): Use the new return value of eshell--do-opts to set the options's vars in their scope. (eshell--set-option): Rename from eshell-set-option. Add arg `opt-vals'. (eshell--process-option): Rename from eshell-process-option. Add arg `opt-vals'. (eshell--process-args): Use an `opt-vals' alist to store the options's values during their processing and return them additionally to the remaining args. Fixes: debbugs:15379 --- lisp/ChangeLog | 16 ++++++ lisp/eshell/esh-opt.el | 110 +++++++++++++++++++++------------------- lisp/eshell/esh-util.el | 2 +- 3 files changed, 76 insertions(+), 52 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 44a81ee32fc..f5710d85e16 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,19 @@ +2013-09-16 Stefan Monnier + + * eshell/esh-opt.el: Fix last change to set lexical-vars properly + (bug#15379). + (eshell--do-opts): Rename from eshell-do-opt, remove arg `body-fun', + return args and options. + (eshell-eval-using-options): Use the new return value of + eshell--do-opts to set the options's vars in their scope. + (eshell--set-option): Rename from eshell-set-option. + Add arg `opt-vals'. + (eshell--process-option): Rename from eshell-process-option. + Add arg `opt-vals'. + (eshell--process-args): Use an `opt-vals' alist to store the options's + values during their processing and return them additionally to the + remaining args. + 2013-09-15 Dmitry Gutov * progmodes/ruby-mode.el (ruby-operator-re): Consider line diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el index e9252cb540e..3f5bcb641ac 100644 --- a/lisp/eshell/esh-opt.el +++ b/lisp/eshell/esh-opt.el @@ -98,45 +98,44 @@ the new process for its value. Lastly, any remaining arguments will be available in a locally interned variable `args' (created using a `let' form)." (declare (debug (form form sexp body))) - `(let ((temp-args - ,(if (memq ':preserve-args (cadr options)) - macro-args - (list 'eshell-stringify-list - (list 'eshell-flatten-list macro-args))))) - (let ,(delq nil (mapcar (lambda (opt) - (and (listp opt) (nth 3 opt))) - (cadr options))) - ;; FIXME: `options' ends up hiding some variable names under `quote', - ;; which is incompatible with lexical scoping!! - (eshell-do-opt ,name ,options (lambda (args) ,@body-forms) temp-args)))) + `(let* ((temp-args + ,(if (memq ':preserve-args (cadr options)) + macro-args + (list 'eshell-stringify-list + (list 'eshell-flatten-list macro-args)))) + (processed-args (eshell--do-opts ,name ,options temp-args)) + ,@(delete-dups + (delq nil (mapcar (lambda (opt) + (and (listp opt) (nth 3 opt) + `(,(nth 3 opt) (pop processed-args)))) + ;; `options' is of the form (quote OPTS). + (cadr options)))) + (args processed-args)) + ,@body-forms)) ;;; Internal Functions: ;; Documented part of the interface; see eshell-eval-using-options. (defvar eshell--args) -(defun eshell-do-opt (name options body-fun args) +(defun eshell--do-opts (name options args) "Helper function for `eshell-eval-using-options'. This code doesn't really need to be macro expanded everywhere." - (let* (last-value - (ext-command - (catch 'eshell-ext-command - (let ((usage-msg - (catch 'eshell-usage - (setq last-value nil) - (if (and (= (length args) 0) - (memq ':show-usage options)) - (throw 'eshell-usage - (eshell-show-usage name options))) - (setq args (eshell-process-args name args options) - last-value (funcall body-fun args)) - nil))) - (when usage-msg - (error "%s" usage-msg)))))) + (let ((ext-command + (catch 'eshell-ext-command + (let ((usage-msg + (catch 'eshell-usage + (if (and (= (length args) 0) + (memq ':show-usage options)) + (eshell-show-usage name options) + (setq args (eshell--process-args name args options)) + nil)))) + (when usage-msg + (error "%s" usage-msg)))))) (if ext-command - (throw 'eshell-external - (eshell-external-command ext-command args)) - last-value))) + (throw 'eshell-external + (eshell-external-command ext-command args)) + args))) (defun eshell-show-usage (name options) "Display the usage message for NAME, using OPTIONS." @@ -185,23 +184,24 @@ passed to this command, the external version '%s' will be called instead." extcmd))))) (throw 'eshell-usage usage))) -(defun eshell-set-option (name ai opt options) +(defun eshell--set-option (name ai opt options opt-vals) "Using NAME's remaining args (index AI), set the OPT within OPTIONS. If the option consumes an argument for its value, the argument list will be modified." (if (not (nth 3 opt)) (eshell-show-usage name options) - (if (eq (nth 2 opt) t) - (if (> ai (length eshell--args)) - (error "%s: missing option argument" name) - (set (nth 3 opt) (nth ai eshell--args)) - (if (> ai 0) - (setcdr (nthcdr (1- ai) eshell--args) - (nthcdr (1+ ai) eshell--args)) - (setq eshell--args (cdr eshell--args)))) - (set (nth 3 opt) (or (nth 2 opt) t))))) + (setcdr (assq (nth 3 opt) opt-vals) + (if (eq (nth 2 opt) t) + (if (> ai (length eshell--args)) + (error "%s: missing option argument" name) + (prog1 (nth ai eshell--args) + (if (> ai 0) + (setcdr (nthcdr (1- ai) eshell--args) + (nthcdr (1+ ai) eshell--args)) + (setq eshell--args (cdr eshell--args))))) + (or (nth 2 opt) t))))) -(defun eshell-process-option (name switch kind ai options) +(defun eshell--process-option (name switch kind ai options opt-vals) "For NAME, process SWITCH (of type KIND), from args at index AI. The SWITCH will be looked up in the set of OPTIONS. @@ -219,7 +219,7 @@ switch is unrecognized." (nth kind (car opts)) (equal switch (nth kind (car opts)))) (progn - (eshell-set-option name ai (car opts) options) + (eshell--set-option name ai (car opts) options opt-vals) (setq found t opts nil)) (setq opts (cdr opts)))) (unless found @@ -232,11 +232,18 @@ switch is unrecognized." "%s: unrecognized option --%s") name switch))))))) -(defun eshell-process-args (name args options) - "Process the given ARGS using OPTIONS. -This assumes that symbols have been intern'd by `eshell-eval-using-options'." - (let ((ai 0) arg - (eshell--args args)) +(defun eshell--process-args (name args options) + "Process the given ARGS using OPTIONS." + (let* ((seen ()) + (opt-vals (delq nil (mapcar (lambda (opt) + (when (listp opt) + (let ((sym (nth 3 opt))) + (when (and sym (not (memq sym seen))) + (push sym seen) + (list sym))))) + options))) + (ai 0) arg + (eshell--args args)) (while (< ai (length args)) (setq arg (nth ai args)) (if (not (and (stringp arg) @@ -249,13 +256,14 @@ This assumes that symbols have been intern'd by `eshell-eval-using-options'." (setcdr (nthcdr (1- ai) args) (nthcdr (1+ ai) args))) (if dash (if (> (length switch) 0) - (eshell-process-option name switch 1 ai options) + (eshell--process-option name switch 1 ai options opt-vals) (setq ai (length args))) (let ((len (length switch)) (index 0)) (while (< index len) - (eshell-process-option name (aref switch index) 0 ai options) - (setq index (1+ index))))))))) - args) + (eshell--process-option name (aref switch index) + 0 ai options opt-vals) + (setq index (1+ index)))))))) + (nconc (mapcar #'cdr opt-vals) args))) ;;; esh-opt.el ends here diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index 5fa591a3082..5e0aad8345f 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -144,7 +144,7 @@ function `string-to-number'." Otherwise, evaluates FORM with no error handling." (declare (indent 2)) (if eshell-handle-errors - `(condition-case ,tag + `(condition-case-unless-debug ,tag ,form ,@handlers) form)) From 16af23266cd8671281d89ebb2c15d3acac7ba914 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Sep 2013 14:37:18 -0400 Subject: [PATCH 168/321] * etc/CONTRIBUTE: Copyedits. --- etc/CONTRIBUTE | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/etc/CONTRIBUTE b/etc/CONTRIBUTE index c9d84a8d5a2..5d6b4238c97 100644 --- a/etc/CONTRIBUTE +++ b/etc/CONTRIBUTE @@ -99,8 +99,7 @@ revise your patch, send it as a followup to the initial topic. ** Description -For bug fixes, a description of the bug and how your patch fixes this -bug. +For bug fixes, a description of the bug and how your patch fixes it. For new features, a description of the feature and your implementation. @@ -108,7 +107,7 @@ For new features, a description of the feature and your implementation. A ChangeLog entry as plaintext (separate from the patch). -See the various ChangeLog files for format and content. Note that, +See the existing ChangeLog files for format and content. Note that, unlike some other projects, we do require ChangeLogs also for documentation, i.e. Texinfo files. @@ -117,24 +116,16 @@ Manual, for how to write good log entries. ** The patch itself. -Please use "Context Diff" format. - If you are accessing the Bazaar repository, make sure your copy is up-to-date (e.g. with `bzr pull'), then use bzr diff --no-aliases --diff-options=-cp Else, use diff -cp OLD NEW -If your version of diff does not support these options, then get the -latest version of GNU Diff. - ** Mail format. -We prefer to get the patches as inline plain text. - -Please be aware of line wrapping which will make the patch unreadable -and useless for us. To avoid that, you can use MIME attachments or, -as a last resort, uuencoded gzipped text. +We prefer to get the patches as plain text, either inline (be careful +your mail client does not change line breaks) or as MIME attachments. ** Please reread your patch before submitting it. @@ -184,18 +175,12 @@ by following links from http://savannah.gnu.org/mail/?group=emacs . ** Document your changes. -Think carefully about whether your change requires updating the -documentation. If it does, you can either do this yourself or add an -item to the NEWS file. - -If you document your change in NEWS, please mark the NEWS entry with -the documentation status of the change: if you submit the changes for -the manuals, mark it with "+++"; if it doesn't need to be documented, -mark it with "---"; if it needs to be documented, but you didn't -submit documentation changes, leave the NEWS entry unmarked. (These -marks are checked by the Emacs maintainers to make sure every change -was reflected in the manuals.) +Any change that matters to end-users should have a NEWS entry. +Think about whether your change requires updating the documentation +(both manuals and doc-strings). If you know it does not, mark the NEWS +entry with "---". If you know that *all* the necessary documentation +updates have been made, mark the entry with "+++". Otherwise do not mark it. ** Understanding Emacs Internals. From cde40d2bb8adbcd6d797c4d183f8a36a87c6f17b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Sep 2013 14:42:41 -0400 Subject: [PATCH 169/321] * test/automated/eshell.el (eshell-test/for-name-shadow-loop): Test value before and after loop as well as during. --- test/ChangeLog | 5 +++++ test/automated/eshell.el | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/test/ChangeLog b/test/ChangeLog index 85119db69f2..82141d75a53 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2013-09-16 Glenn Morris + + * automated/eshell.el (eshell-test/for-name-shadow-loop): + Test value before and after loop as well as during. + 2013-09-15 Glenn Morris * automated/eshell.el (eshell-test/for-name-shadow-loop): diff --git a/test/automated/eshell.el b/test/automated/eshell.el index 6f7a35371a6..dad494b3238 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -89,8 +89,10 @@ (ert-deftest eshell-test/for-name-shadow-loop () ; bug#15372 "Test `eshell-command-result' with a for loop using an env-var." (let ((process-environment (cons "name=env-value" process-environment))) + (should (equal (eshell-test-command-result "echo $name") "env-value")) (should (equal (eshell-test-command-result - "for name in 3 { echo $name }") 3)))) + "for name in 3 { echo $name }") 3)) + (should (equal (eshell-test-command-result "echo $name") "env-value")))) (ert-deftest eshell-test/lisp-command-args () "Test `eshell-command-result' with elisp and trailing args. From 504a03813b3d3984c27cf6cf3b87c0ba8d1d57a9 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 16 Sep 2013 15:09:24 -0400 Subject: [PATCH 170/321] * lisp/icomplete.el (icomplete-in-buffer): New var. (icomplete-pre-command-hook, icomplete-post-command-hook): Remove those vars and replace them with functions. (icomplete-minibuffer-setup): Adjust accordingly. (icomplete--completion-table, icomplete--completion-predicate) (icomplete--field-string, icomplete--field-beg, icomplete--field-end): New functions. (icomplete-forward-completions, icomplete-backward-completions) (icomplete-simple-completing-p, icomplete-exhibit) (icomplete-completions): Use them. (icomplete--in-region-buffer): New var. (icomplete--in-region-setup): New function. (icomplete-mode): Use it. --- lisp/ChangeLog | 14 +++++ lisp/icomplete.el | 153 ++++++++++++++++++++++++++++----------------- lisp/minibuffer.el | 28 +++++---- 3 files changed, 126 insertions(+), 69 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f5710d85e16..5809c2a4513 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,19 @@ 2013-09-16 Stefan Monnier + * icomplete.el (icomplete-in-buffer): New var. + (icomplete-pre-command-hook, icomplete-post-command-hook): Remove those + vars and replace them with functions. + (icomplete-minibuffer-setup): Adjust accordingly. + (icomplete--completion-table, icomplete--completion-predicate) + (icomplete--field-string, icomplete--field-beg, icomplete--field-end): + New functions. + (icomplete-forward-completions, icomplete-backward-completions) + (icomplete-simple-completing-p, icomplete-exhibit) + (icomplete-completions): Use them. + (icomplete--in-region-buffer): New var. + (icomplete--in-region-setup): New function. + (icomplete-mode): Use it. + * eshell/esh-opt.el: Fix last change to set lexical-vars properly (bug#15379). (eshell--do-opts): Rename from eshell-do-opt, remove arg `body-fun', diff --git a/lisp/icomplete.el b/lisp/icomplete.el index 9aec829cd97..13ada93b1f3 100644 --- a/lisp/icomplete.el +++ b/lisp/icomplete.el @@ -114,6 +114,9 @@ See `icomplete-delay-completions-threshold'." :type 'integer :group 'icomplete) +(defvar icomplete-in-buffer nil + "If non-nil, also use Icomplete when completing in non-mini buffers.") + (defcustom icomplete-minibuffer-setup-hook nil "Icomplete-specific customization of minibuffer setup. @@ -140,22 +143,13 @@ icompletion is occurring." (defvar icomplete-overlay (make-overlay (point-min) (point-min) nil t t) "Overlay used to display the list of completions.") -;;;_ = icomplete-pre-command-hook -(defvar icomplete-pre-command-hook nil - "Incremental-minibuffer-completion pre-command-hook. +(defun icomplete-pre-command-hook () + (let ((non-essential t)) + (icomplete-tidy))) -Is run in minibuffer before user input when `icomplete-mode' is non-nil. -Use `icomplete-mode' function to set it up properly for incremental -minibuffer completion.") -(add-hook 'icomplete-pre-command-hook 'icomplete-tidy) -;;;_ = icomplete-post-command-hook -(defvar icomplete-post-command-hook nil - "Incremental-minibuffer-completion post-command-hook. - -Is run in minibuffer after user input when `icomplete-mode' is non-nil. -Use `icomplete-mode' function to set it up properly for incremental -minibuffer completion.") -(add-hook 'icomplete-post-command-hook 'icomplete-exhibit) +(defun icomplete-post-command-hook () + (let ((non-essential t)) ;E.g. don't prompt for password! + (icomplete-exhibit))) ;;;_ = icomplete-with-completion-tables (defcustom icomplete-with-completion-tables t @@ -179,8 +173,8 @@ except those on this list." Second entry becomes the first and can be selected with `minibuffer-force-complete-and-exit'." (interactive) - (let* ((beg (minibuffer-prompt-end)) - (end (point-max)) + (let* ((beg (icomplete--field-beg)) + (end (icomplete--field-end)) (comps (completion-all-sorted-completions beg end)) (last (last comps))) (when comps @@ -192,8 +186,8 @@ Second entry becomes the first and can be selected with Last entry becomes the first and can be selected with `minibuffer-force-complete-and-exit'." (interactive) - (let* ((beg (minibuffer-prompt-end)) - (end (point-max)) + (let* ((beg (icomplete--field-beg)) + (end (icomplete--field-end)) (comps (completion-all-sorted-completions beg end)) (last-but-one (last comps 2)) (last (cdr last-but-one))) @@ -210,11 +204,32 @@ With a prefix argument ARG, enable Icomplete mode if ARG is positive, and disable it otherwise. If called from Lisp, enable the mode if ARG is omitted or nil." :global t :group 'icomplete - (if icomplete-mode - ;; The following is not really necessary after first time - - ;; no great loss. - (add-hook 'minibuffer-setup-hook 'icomplete-minibuffer-setup) - (remove-hook 'minibuffer-setup-hook 'icomplete-minibuffer-setup))) + (remove-hook 'minibuffer-setup-hook #'icomplete-minibuffer-setup) + (remove-hook 'completion-in-region-mode-hook #'icomplete--in-region-setup) + (when icomplete-mode + (when icomplete-in-buffer + (add-hook 'completion-in-region-mode-hook #'icomplete--in-region-setup)) + (add-hook 'minibuffer-setup-hook #'icomplete-minibuffer-setup))) + +(defun icomplete--completion-table () + (if (window-minibuffer-p) minibuffer-completion-table + (or (nth 2 completion-in-region--data) + (message "In %S (w=%S): %S" + (current-buffer) (selected-window) (window-minibuffer-p))))) +(defun icomplete--completion-predicate () + (if (window-minibuffer-p) minibuffer-completion-predicate + (nth 3 completion-in-region--data))) +(defun icomplete--field-string () + (if (window-minibuffer-p) (minibuffer-contents) + (buffer-substring-no-properties + (nth 0 completion-in-region--data) + (nth 1 completion-in-region--data)))) +(defun icomplete--field-beg () + (if (window-minibuffer-p) (minibuffer-prompt-end) + (nth 0 completion-in-region--data))) +(defun icomplete--field-end () + (if (window-minibuffer-p) (point-max) + (nth 1 completion-in-region--data))) ;;;_ > icomplete-simple-completing-p () (defun icomplete-simple-completing-p () @@ -223,17 +238,16 @@ the mode if ARG is omitted or nil." Conditions are: the selected window is a minibuffer, and not in the middle of macro execution, - and `minibuffer-completion-table' is not a symbol (which would + and the completion table is not a function (which would indicate some non-standard, non-simple completion mechanism, like file-name and other custom-func completions)." - (and (window-minibuffer-p) - (not executing-kbd-macro) - minibuffer-completion-table - (or (not (functionp minibuffer-completion-table)) - (eq icomplete-with-completion-tables t) - (member minibuffer-completion-table - icomplete-with-completion-tables)))) + (unless executing-kbd-macro + (let ((table (icomplete--completion-table))) + (and table + (or (not (functionp table)) + (eq icomplete-with-completion-tables t) + (member table icomplete-with-completion-tables)))))) ;;;_ > icomplete-minibuffer-setup () (defun icomplete-minibuffer-setup () @@ -243,16 +257,35 @@ Usually run by inclusion in `minibuffer-setup-hook'." (set (make-local-variable 'completion-show-inline-help) nil) (use-local-map (make-composed-keymap icomplete-minibuffer-map (current-local-map))) - (add-hook 'pre-command-hook - (lambda () (let ((non-essential t)) - (run-hooks 'icomplete-pre-command-hook))) - nil t) - (add-hook 'post-command-hook - (lambda () (let ((non-essential t)) ;E.g. don't prompt for password! - (run-hooks 'icomplete-post-command-hook))) - nil t) + (add-hook 'pre-command-hook #'icomplete-pre-command-hook nil t) + (add-hook 'post-command-hook #'icomplete-post-command-hook nil t) (run-hooks 'icomplete-minibuffer-setup-hook))) -; + +(defvar icomplete--in-region-buffer nil) + +(defun icomplete--in-region-setup () + (when (or (not completion-in-region-mode) + (and icomplete--in-region-buffer + (not (eq icomplete--in-region-buffer (current-buffer))))) + (with-current-buffer (or icomplete--in-region-buffer (current-buffer)) + (setq icomplete--in-region-buffer nil) + (delete-overlay icomplete-overlay) + (kill-local-variable 'completion-show-inline-help) + (remove-hook 'pre-command-hook 'icomplete-pre-command-hook t) + (remove-hook 'post-command-hook 'icomplete-post-command-hook t) + (message nil))) + (when (and completion-in-region-mode + icomplete-mode (icomplete-simple-completing-p)) + (setq icomplete--in-region-buffer (current-buffer)) + (set (make-local-variable 'completion-show-inline-help) nil) + (let ((tem (assq 'completion-in-region-mode + minor-mode-overriding-map-alist))) + (unless (memq icomplete-minibuffer-map (cdr tem)) + (setcdr tem (make-composed-keymap icomplete-minibuffer-map + (cdr tem))))) + (add-hook 'pre-command-hook 'icomplete-pre-command-hook nil t) + (add-hook 'post-command-hook 'icomplete-post-command-hook nil t))) + ;;;_* Completion @@ -274,28 +307,31 @@ and `minibuffer-setup-hook'." (save-excursion (goto-char (point-max)) ; Insert the match-status information: - (if (and (> (point-max) (minibuffer-prompt-end)) + (if (and (> (icomplete--field-end) (icomplete--field-beg)) buffer-undo-list ; Wait for some user input. (or ;; Don't bother with delay after certain number of chars: - (> (- (point) (field-beginning)) icomplete-max-delay-chars) + (> (- (point) (icomplete--field-beg)) + icomplete-max-delay-chars) ;; Don't delay if the completions are known. completion-all-sorted-completions ;; Don't delay if alternatives number is small enough: - (and (sequencep minibuffer-completion-table) - (< (length minibuffer-completion-table) + (and (sequencep (icomplete--completion-table)) + (< (length (icomplete--completion-table)) icomplete-delay-completions-threshold)) ;; Delay - give some grace time for next keystroke, before ;; embarking on computing completions: (sit-for icomplete-compute-delay))) - (let ((text (while-no-input - (icomplete-completions - (field-string) - minibuffer-completion-table - minibuffer-completion-predicate - (not minibuffer-completion-confirm)))) - (buffer-undo-list t) - deactivate-mark) + (let* ((field-string (icomplete--field-string)) + (text (while-no-input + (icomplete-completions + field-string + (icomplete--completion-table) + (icomplete--completion-predicate) + (if (window-minibuffer-p) + (not minibuffer-completion-confirm))))) + (buffer-undo-list t) + deactivate-mark) ;; Do nothing if while-no-input was aborted. (when (stringp text) (move-overlay icomplete-overlay (point) (point) (current-buffer)) @@ -325,16 +361,19 @@ The displays for unambiguous matches have ` [Matched]' appended matches exist. \(Keybindings for uniquely matched commands are exhibited within the square braces.)" - (let* ((md (completion--field-metadata (field-beginning))) + (let* ((minibuffer-completion-table candidates) + (minibuffer-completion-predicate predicate) + (md (completion--field-metadata (icomplete--field-beg))) (comps (completion-all-sorted-completions - (minibuffer-prompt-end) (point-max))) + (icomplete--field-beg) (icomplete--field-end))) (last (if (consp comps) (last comps))) (base-size (cdr last)) (open-bracket (if require-match "(" "[")) (close-bracket (if require-match ")" "]"))) ;; `concat'/`mapconcat' is the slow part. (if (not (consp comps)) - (format " %sNo matches%s" open-bracket close-bracket) + (progn ;;(debug (format "Candidates=%S field=%S" candidates name)) + (format " %sNo matches%s" open-bracket close-bracket)) (if last (setcdr last nil)) (let* ((most-try (if (and base-size (> base-size 0)) @@ -389,7 +428,7 @@ are exhibited within the square braces.)" ;; Else, use try-completion. (and (stringp prefix) (length prefix))) ;;) prospects comp limit) - (if (eq most-try t) ;; (or (null (cdr comps)) + (if (or (eq most-try t) (not (consp (cdr comps)))) (setq prospects nil) (when (member name comps) ;; NAME is complete but not unique. This scenario poses diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index c505a74c23d..ab54b9da138 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1837,10 +1837,10 @@ exit." ;; HACK: if the text we are completing is already in a field, we ;; want the completion field to take priority (e.g. Bug#6830). (when completion-in-region-mode-predicate - (completion-in-region-mode 1) (setq completion-in-region--data - (list (if (markerp start) start (copy-marker start)) - (copy-marker end) collection))) + `(,(if (markerp start) start (copy-marker start)) + ,(copy-marker end t) ,collection ,predicate)) + (completion-in-region-mode 1)) (completion--in-region-1 start end)))) (defvar completion-in-region-mode-map @@ -1874,22 +1874,25 @@ exit." ;; (defalias 'completion-in-region--prech 'completion-in-region--postch) +(defvar completion-in-region-mode nil) ;Explicit defvar, i.s.o defcustom. + (define-minor-mode completion-in-region-mode - "Transient minor mode used during `completion-in-region'. -With a prefix argument ARG, enable the modemode if ARG is -positive, and disable it otherwise. If called from Lisp, enable -the mode if ARG is omitted or nil." + "Transient minor mode used during `completion-in-region'." :global t :group 'minibuffer - (setq completion-in-region--data nil) + ;; Prevent definition of a custom-variable since it makes no sense to + ;; customize this variable. + :variable completion-in-region-mode ;; (remove-hook 'pre-command-hook #'completion-in-region--prech) (remove-hook 'post-command-hook #'completion-in-region--postch) (setq minor-mode-overriding-map-alist (delq (assq 'completion-in-region-mode minor-mode-overriding-map-alist) minor-mode-overriding-map-alist)) (if (null completion-in-region-mode) - (unless (equal "*Completions*" (buffer-name (window-buffer))) - (minibuffer-hide-completions)) + (progn + (setq completion-in-region--data nil) + (unless (equal "*Completions*" (buffer-name (window-buffer))) + (minibuffer-hide-completions))) ;; (add-hook 'pre-command-hook #'completion-in-region--prech) (cl-assert completion-in-region-mode-predicate) (setq completion-in-region-mode--predicate @@ -2010,9 +2013,10 @@ The completion method is determined by `completion-at-point-functions'." ;; FIXME: We should somehow (ab)use completion-in-region-function or ;; introduce a corresponding hook (plus another for word-completion, ;; and another for force-completion, maybe?). - (completion-in-region-mode 1) (setq completion-in-region--data - (list start (copy-marker end) collection)) + `(,start ,(copy-marker end t) ,collection + ,(plist-get plist :predicate))) + (completion-in-region-mode 1) (minibuffer-completion-help start end))) (`(,hookfun . ,_) ;; The hook function already performed completion :-( From 88302cbb9f988fd17604be8722731ba53dd1a27a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Sep 2013 15:20:44 -0400 Subject: [PATCH 171/321] * test/automated/eshell (eshell-test/for-name-shadow-loop): Tweak previous --- test/automated/eshell.el | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/automated/eshell.el b/test/automated/eshell.el index dad494b3238..643e83c6a76 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -51,6 +51,9 @@ (goto-char eshell-last-input-end) (looking-at regexp)) +;; FIXME this does not return informative failure messages, just t or nil. +;; It should return the expected buffer contents and the actual one, +;; so that we can see what form ant failure took. (defun eshell-command-result-p (text regexp &optional func) "Insert a command at the end of the buffer." (eshell-insert-command text func) @@ -89,10 +92,10 @@ (ert-deftest eshell-test/for-name-shadow-loop () ; bug#15372 "Test `eshell-command-result' with a for loop using an env-var." (let ((process-environment (cons "name=env-value" process-environment))) - (should (equal (eshell-test-command-result "echo $name") "env-value")) - (should (equal (eshell-test-command-result - "for name in 3 { echo $name }") 3)) - (should (equal (eshell-test-command-result "echo $name") "env-value")))) + (with-temp-eshell + (should + (eshell-command-result-p "echo $name; for name in 3 { echo $name }; echo $name" + "env-value\n3\nenv-value\n"))))) (ert-deftest eshell-test/lisp-command-args () "Test `eshell-command-result' with elisp and trailing args. From 8d95f3a69cc3268338a0d29514810c9452b338f3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Sep 2013 15:21:45 -0400 Subject: [PATCH 172/321] Fix comment typo --- test/automated/eshell.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/automated/eshell.el b/test/automated/eshell.el index 643e83c6a76..41c7b254752 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -53,7 +53,7 @@ ;; FIXME this does not return informative failure messages, just t or nil. ;; It should return the expected buffer contents and the actual one, -;; so that we can see what form ant failure took. +;; so that we can see what form any failure took. (defun eshell-command-result-p (text regexp &optional func) "Insert a command at the end of the buffer." (eshell-insert-command text func) From 0c2a2b57fe7b740b56cac4aed7b848fb87c2c00f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Sep 2013 16:58:28 -0400 Subject: [PATCH 173/321] * test/automated/eshell.el (eshell-match-result): Return a more informative failure than simply "false". Update callers. --- test/ChangeLog | 3 +++ test/automated/eshell.el | 32 +++++++++++++------------------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index 82141d75a53..000f8e257f1 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,5 +1,8 @@ 2013-09-16 Glenn Morris + * automated/eshell.el (eshell-match-result): + Return a more informative failure than simply "false". Update callers. + * automated/eshell.el (eshell-test/for-name-shadow-loop): Test value before and after loop as well as during. diff --git a/test/automated/eshell.el b/test/automated/eshell.el index 41c7b254752..3cc3e92d1e5 100644 --- a/test/automated/eshell.el +++ b/test/automated/eshell.el @@ -47,13 +47,11 @@ (funcall (or func 'eshell-send-input))) (defun eshell-match-result (regexp) - "Insert a command at the end of the buffer." + "Check that text after `eshell-last-input-end' matches REGEXP." (goto-char eshell-last-input-end) - (looking-at regexp)) + (should (string-match-p regexp (buffer-substring-no-properties + (point) (point-max))))) -;; FIXME this does not return informative failure messages, just t or nil. -;; It should return the expected buffer contents and the actual one, -;; so that we can see what form any failure took. (defun eshell-command-result-p (text regexp &optional func) "Insert a command at the end of the buffer." (eshell-insert-command text func) @@ -93,9 +91,8 @@ "Test `eshell-command-result' with a for loop using an env-var." (let ((process-environment (cons "name=env-value" process-environment))) (with-temp-eshell - (should - (eshell-command-result-p "echo $name; for name in 3 { echo $name }; echo $name" - "env-value\n3\nenv-value\n"))))) + (eshell-command-result-p "echo $name; for name in 3 { echo $name }; echo $name" + "env-value\n3\nenv-value\n")))) (ert-deftest eshell-test/lisp-command-args () "Test `eshell-command-result' with elisp and trailing args. @@ -154,23 +151,20 @@ e.g. \"{(+ 1 2)} 3\" => 3" (ert-deftest eshell-test/last-result-var () "Test using the \"last result\" ($$) variable" (with-temp-eshell - (should - (eshell-command-result-p "+ 1 2; + $$ 2" - "3\n5\n")))) + (eshell-command-result-p "+ 1 2; + $$ 2" + "3\n5\n"))) (ert-deftest eshell-test/last-result-var2 () "Test using the \"last result\" ($$) variable twice" (with-temp-eshell - (should - (eshell-command-result-p "+ 1 2; + $$ $$" - "3\n6\n")))) + (eshell-command-result-p "+ 1 2; + $$ $$" + "3\n6\n"))) (ert-deftest eshell-test/last-arg-var () "Test using the \"last arg\" ($_) variable" (with-temp-eshell - (should - (eshell-command-result-p "+ 1 2; + $_ 4" - "3\n6\n")))) + (eshell-command-result-p "+ 1 2; + $_ 4" + "3\n6\n"))) (ert-deftest eshell-test/command-running-p () "Modeline should show no command running" @@ -204,14 +198,14 @@ e.g. \"{(+ 1 2)} 3\" => 3" (> count 0)) (sit-for 1) (setq count (1- count)))) - (should (eshell-match-result "alpha\n")))) + (eshell-match-result "alpha\n"))) (ert-deftest eshell-test/flush-output () "Test flushing of previous output" (with-temp-eshell (eshell-insert-command "echo alpha") (eshell-kill-output) - (should (eshell-match-result (regexp-quote "*** output flushed ***\n"))) + (eshell-match-result (regexp-quote "*** output flushed ***\n")) (should (forward-line)) (should (= (point) eshell-last-output-start)))) From a19f6c6396b17d3c9cc54076b7965855ad6851e9 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 16 Sep 2013 17:28:11 -0400 Subject: [PATCH 174/321] * lisp/url/url-misc.el (url-data): Avoid match-data mix-up with base64 case. Use Content-Transfer-Encoding rather than Content-Encoding. Fixes: debbugs:15285 --- lisp/url/ChangeLog | 5 +++++ lisp/url/url-misc.el | 11 +++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 3f48b8ff431..817130c5184 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,8 @@ +2013-09-16 Glenn Morris + + * url-misc.el (url-data): Avoid match-data mix-up with base64 case. + Use Content-Transfer-Encoding rather than Content-Encoding. (Bug#15285) + 2013-09-13 Glenn Morris * url-http.el (url-handle-content-transfer-encoding): diff --git a/lisp/url/url-misc.el b/lisp/url/url-misc.el index c8e9b591790..ecc602940f3 100644 --- a/lisp/url/url-misc.el +++ b/lisp/url/url-misc.el @@ -1,7 +1,6 @@ ;;; url-misc.el --- Misc Uniform Resource Locator retrieval code -;; Copyright (C) 1996-1999, 2002, 2004-2013 Free Software Foundation, -;; Inc. +;; Copyright (C) 1996-1999, 2002, 2004-2013 Free Software Foundation, Inc. ;; Keywords: comm, data, processes @@ -89,19 +88,19 @@ (save-excursion (if (not (string-match "\\([^,]*\\)?," desc)) (error "Malformed data URL: %s" desc) - (setq mediatype (match-string 1 desc)) + (setq mediatype (match-string 1 desc) + data (url-unhex-string (substring desc (match-end 0)))) (if (and mediatype (string-match ";base64\\'" mediatype)) (setq mediatype (substring mediatype 0 (match-beginning 0)) encoding "base64")) (if (or (null mediatype) (eq ?\; (aref mediatype 0))) - (setq mediatype (concat "text/plain" mediatype))) - (setq data (url-unhex-string (substring desc (match-end 0))))) + (setq mediatype (concat "text/plain" mediatype)))) (set-buffer (generate-new-buffer " *url-data*")) (mm-disable-multibyte) (insert (format "Content-Length: %d\n" (length data)) "Content-Type: " mediatype "\n" - "Content-Encoding: " encoding "\n" + "Content-Transfer-Encoding: " encoding "\n" "\n") (if data (insert data)) (current-buffer)))) From 1149ffdb07563832d2593320d79970c8266ae85c Mon Sep 17 00:00:00 2001 From: Katsumi Yamaoka Date: Mon, 16 Sep 2013 23:22:02 +0000 Subject: [PATCH 175/321] message.el (message-expand-group, message-completion-in-region): Correct the order of start and end of a region --- lisp/gnus/ChangeLog | 5 +++++ lisp/gnus/message.el | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 9c11d17645c..fc8ff9fd695 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2013-09-16 Katsumi Yamaoka + + * message.el (message-expand-group, message-completion-in-region): + Correct the order of start and end of a region. + 2013-09-13 Glenn Morris * mml2015.el (gnus-create-image): Autoload it. diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index d6d6b3f8bed..ba4593fad45 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -7982,12 +7982,12 @@ those headers." group) collection)) gnus-active-hashtb)) - (message-completion-in-region e b collection))) + (message-completion-in-region b e collection))) (defalias 'message-completion-in-region (if (fboundp 'completion-in-region) 'completion-in-region - (lambda (e b hashtb) + (lambda (b e hashtb) (let* ((string (buffer-substring b e)) (completions (all-completions string hashtb)) comp) From 19452b86657532741d78fa3bcc12b12b58a8a54b Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 17 Sep 2013 10:33:24 +0400 Subject: [PATCH 176/321] * configure.ac: Do not check for g_type_init because we require glib >= 2.28 for GTK3, glib >= 2.10 for GTK2, glib >= 2.26 for GSettings and glib >= 2.7.0 for GConf, so suitable glib should provide g_type_init unconditionally. * src/image.c (fn_g_type_init) [WINDOWSNT]: Define and load only if Glib < 2.36.0. (fn_g_type_init) [!WINDOWSNT]: Define only if Glib < 2.36.0. * src/xsettings.c (init_gconf, init_gsettings): Do not check for g_type_init. --- ChangeLog | 7 +++++++ configure.ac | 1 - src/ChangeLog | 8 ++++++++ src/image.c | 13 +++++++++++-- src/xsettings.c | 4 ---- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index c034a293004..c075c60be23 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-09-17 Dmitry Antipov + + * configure.ac: Do not check for g_type_init because we + require glib >= 2.28 for GTK3, glib >= 2.10 for GTK2, + glib >= 2.26 for GSettings and glib >= 2.7.0 for GConf, so + suitable glib should provide g_type_init unconditionally. + 2013-09-15 Jan Djärv * configure.ac: Add check for OSX 10.5, required for macfont.o. diff --git a/configure.ac b/configure.ac index 86a5f300982..903537f8a59 100644 --- a/configure.ac +++ b/configure.ac @@ -2389,7 +2389,6 @@ if test "$HAVE_GSETTINGS" = "yes" || test "$HAVE_GCONF" = "yes"; then SAVE_LIBS="$LIBS" CFLAGS="$SETTINGS_CFLAGS $CFLAGS" LIBS="$SETTINGS_LIBS $LIBS" - AC_CHECK_FUNCS([g_type_init]) CFLAGS="$SAVE_CFLAGS" LIBS="$SAVE_LIBS" fi diff --git a/src/ChangeLog b/src/ChangeLog index ceae9e1a63e..c3c64f79d89 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2013-09-17 Dmitry Antipov + + * image.c (fn_g_type_init) [WINDOWSNT]: Define and load + only if Glib < 2.36.0. + (fn_g_type_init) [!WINDOWSNT]: Define only if Glib < 2.36.0. + * xsettings.c (init_gconf, init_gsettings): Do not check + for g_type_init. + 2013-09-16 Jan Djärv * xsettings.c (init_gconf, init_gsettings): Check for Glib 2.36.0 diff --git a/src/image.c b/src/image.c index f0f7ff4b01f..e3159533664 100644 --- a/src/image.c +++ b/src/image.c @@ -8590,7 +8590,9 @@ DEF_IMGLIB_FN (int, gdk_pixbuf_get_n_channels, (const GdkPixbuf *)); DEF_IMGLIB_FN (gboolean, gdk_pixbuf_get_has_alpha, (const GdkPixbuf *)); DEF_IMGLIB_FN (int, gdk_pixbuf_get_bits_per_sample, (const GdkPixbuf *)); +#if ! GLIB_CHECK_VERSION (2, 36, 0) DEF_IMGLIB_FN (void, g_type_init, (void)); +#endif DEF_IMGLIB_FN (void, g_object_unref, (gpointer)); DEF_IMGLIB_FN (void, g_error_free, (GError *)); @@ -8622,7 +8624,9 @@ init_svg_functions (void) LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_has_alpha); LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_bits_per_sample); +#if ! GLIB_CHECK_VERSION (2, 36, 0) LOAD_IMGLIB_FN (gobject, g_type_init); +#endif LOAD_IMGLIB_FN (gobject, g_object_unref); LOAD_IMGLIB_FN (glib, g_error_free); @@ -8647,7 +8651,9 @@ init_svg_functions (void) #define fn_gdk_pixbuf_get_has_alpha gdk_pixbuf_get_has_alpha #define fn_gdk_pixbuf_get_bits_per_sample gdk_pixbuf_get_bits_per_sample +#if ! GLIB_CHECK_VERSION (2, 36, 0) #define fn_g_type_init g_type_init +#endif #define fn_g_object_unref g_object_unref #define fn_g_error_free g_error_free #endif /* !WINDOWSNT */ @@ -8732,9 +8738,12 @@ svg_load_image (struct frame *f, /* Pointer to emacs frame structure. * int x; int y; - /* g_type_init is a glib function that must be called prior to using - gnome type library functions. */ +#if ! GLIB_CHECK_VERSION (2, 36, 0) + /* g_type_init is a glib function that must be called prior to + using gnome type library functions (obsolete since 2.36.0). */ fn_g_type_init (); +#endif + /* Make a handle to a new rsvg object. */ rsvg_handle = fn_rsvg_handle_new (); diff --git a/src/xsettings.c b/src/xsettings.c index a64e09c92e7..770cd8e4a56 100644 --- a/src/xsettings.c +++ b/src/xsettings.c @@ -803,10 +803,8 @@ init_gsettings (void) const gchar *const *schemas; int schema_found = 0; -#ifdef HAVE_G_TYPE_INIT #if ! GLIB_CHECK_VERSION (2, 36, 0) g_type_init (); -#endif #endif schemas = g_settings_list_schemas (); @@ -862,10 +860,8 @@ init_gconf (void) #if defined (HAVE_GCONF) char *s; -#ifdef HAVE_G_TYPE_INIT #if ! GLIB_CHECK_VERSION (2, 36, 0) g_type_init (); -#endif #endif gconf_client = gconf_client_get_default (); From 1893694e3e96560a1b750e257f774e23d3b06836 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 17 Sep 2013 10:57:30 +0400 Subject: [PATCH 177/321] * xterm.c (handle_one_xevent): Do not call to x_clear_area if GTK >= 2.7.0. --- src/ChangeLog | 2 ++ src/xterm.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index c3c64f79d89..f1ba30f023b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -5,6 +5,8 @@ (fn_g_type_init) [!WINDOWSNT]: Define only if Glib < 2.36.0. * xsettings.c (init_gconf, init_gsettings): Do not check for g_type_init. + * xterm.c (handle_one_xevent): Do not call to x_clear_area + if GTK >= 2.7.0. 2013-09-16 Jan Djärv diff --git a/src/xterm.c b/src/xterm.c index 89f543abca6..90e58c81f44 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -6151,7 +6151,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, f = x_window_to_frame (dpyinfo, event->xexpose.window); if (f) { -#ifdef USE_GTK +#if ! GTK_CHECK_VERSION (2, 7, 0) /* This seems to be needed for GTK 2.6. */ x_clear_area (event->xexpose.display, event->xexpose.window, From b7ad2f7401a22e6189d1b0a0523a3f98d1f70be5 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 17 Sep 2013 00:06:42 -0700 Subject: [PATCH 178/321] Don't overuse 'const' in types of locals. * bidi.c (bidi_count_bytes): * gtkutil.c, gtkutil.h (xg_event_is_for_menubar) (xg_event_is_for_scrollbar): * xselect.c (x_handle_property_notify) (x_handle_selection_notify, x_handle_dnd_message): * xsettings.c, xsettings.h (xft_settings_event): * xterm.c (x_handle_net_wm_state, handle_one_event) (x_menubar_window_to_frame, x_detect_focus_change) (construct_mouse_click, note_mouse_movement) (x_scroll_bar_to_input_event, x_scroll_bar_expose) (x_scroll_bar_handle_click, x_scroll_bar_note_movement) (handle_one_xevent, x_handle_net_wm_state): * xterm.h (x_handle_property_notify, x_handle_selection_notify) (x_handle_dnd_message): Avoid unnecessary 'const', typically the second 'const' in 'const foo * const arg', a 'const' that does not affect the API and doesn't significantly help the human reader. --- src/ChangeLog | 21 +++++++++++++++++++++ src/bidi.c | 4 ++-- src/gtkutil.c | 4 ++-- src/gtkutil.h | 4 ++-- src/xselect.c | 6 +++--- src/xsettings.c | 2 +- src/xsettings.h | 2 +- src/xterm.c | 28 ++++++++++++++-------------- src/xterm.h | 6 +++--- 9 files changed, 49 insertions(+), 28 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index f1ba30f023b..d477e3d2ae3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,24 @@ +2013-09-17 Paul Eggert + + Don't overuse 'const' in types of locals. + * bidi.c (bidi_count_bytes): + * gtkutil.c, gtkutil.h (xg_event_is_for_menubar) + (xg_event_is_for_scrollbar): + * xselect.c (x_handle_property_notify) + (x_handle_selection_notify, x_handle_dnd_message): + * xsettings.c, xsettings.h (xft_settings_event): + * xterm.c (x_handle_net_wm_state, handle_one_event) + (x_menubar_window_to_frame, x_detect_focus_change) + (construct_mouse_click, note_mouse_movement) + (x_scroll_bar_to_input_event, x_scroll_bar_expose) + (x_scroll_bar_handle_click, x_scroll_bar_note_movement) + (handle_one_xevent, x_handle_net_wm_state): + * xterm.h (x_handle_property_notify, x_handle_selection_notify) + (x_handle_dnd_message): + Avoid unnecessary 'const', typically the second 'const' in + 'const foo * const arg', a 'const' that does not affect the API + and doesn't significantly help the human reader. + 2013-09-17 Dmitry Antipov * image.c (fn_g_type_init) [WINDOWSNT]: Define and load diff --git a/src/bidi.c b/src/bidi.c index 7d082a94997..dc905cd9e5f 100644 --- a/src/bidi.c +++ b/src/bidi.c @@ -870,8 +870,8 @@ bidi_line_init (struct bidi_it *bidi_it) are zero-based character positions in S, BEGBYTE is byte position corresponding to BEG. UNIBYTE means S is a unibyte string. */ static ptrdiff_t -bidi_count_bytes (const unsigned char *s, const ptrdiff_t beg, - const ptrdiff_t begbyte, const ptrdiff_t end, bool unibyte) +bidi_count_bytes (const unsigned char *s, ptrdiff_t beg, + ptrdiff_t begbyte, ptrdiff_t end, bool unibyte) { ptrdiff_t pos = beg; const unsigned char *p = s + begbyte, *start = p; diff --git a/src/gtkutil.c b/src/gtkutil.c index 57b7b58d9d6..e20d01521f0 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -3409,7 +3409,7 @@ free_frame_menubar (struct frame *f) } bool -xg_event_is_for_menubar (struct frame *f, const XEvent * const event) +xg_event_is_for_menubar (struct frame *f, const XEvent *event) { struct x_output *x = f->output_data.x; GList *iter; @@ -3861,7 +3861,7 @@ xg_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar, frame. This function does additional checks. */ bool -xg_event_is_for_scrollbar (struct frame *f, const XEvent * const event) +xg_event_is_for_scrollbar (struct frame *f, const XEvent *event) { bool retval = 0; diff --git a/src/gtkutil.h b/src/gtkutil.h index 57971cf4a38..1c26d2aa44b 100644 --- a/src/gtkutil.h +++ b/src/gtkutil.h @@ -105,7 +105,7 @@ extern void xg_modify_menubar_widgets (GtkWidget *menubar, extern void xg_update_frame_menubar (struct frame *f); -extern bool xg_event_is_for_menubar (struct frame *, const XEvent * const); +extern bool xg_event_is_for_menubar (struct frame *, const XEvent *); extern bool xg_have_tear_offs (void); @@ -129,7 +129,7 @@ extern void xg_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar, int portion, int position, int whole); -extern bool xg_event_is_for_scrollbar (struct frame *, const XEvent * const); +extern bool xg_event_is_for_scrollbar (struct frame *, const XEvent *); extern int xg_get_default_scrollbar_width (void); extern void update_frame_tool_bar (struct frame *f); diff --git a/src/xselect.c b/src/xselect.c index cec91e41e75..5eb263d8d0c 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -1141,7 +1141,7 @@ wait_for_property_change (struct prop_location *location) /* Called from XTread_socket in response to a PropertyNotify event. */ void -x_handle_property_notify (const XPropertyEvent * const event) +x_handle_property_notify (const XPropertyEvent *event) { struct prop_location *rest; @@ -1888,7 +1888,7 @@ clean_local_selection_data (Lisp_Object obj) We store t there if the reply is successful, lambda if not. */ void -x_handle_selection_notify (const XSelectionEvent * const event) +x_handle_selection_notify (const XSelectionEvent *event) { if (event->requestor != reading_selection_window) return; @@ -2488,7 +2488,7 @@ FRAME is on. If FRAME is nil, the selected frame is used. */) /* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT. */ int -x_handle_dnd_message (struct frame *f, const XClientMessageEvent * const event, +x_handle_dnd_message (struct frame *f, const XClientMessageEvent *event, struct x_display_info *dpyinfo, struct input_event *bufp) { Lisp_Object vec; diff --git a/src/xsettings.c b/src/xsettings.c index 770cd8e4a56..bdf9f2876be 100644 --- a/src/xsettings.c +++ b/src/xsettings.c @@ -754,7 +754,7 @@ read_and_apply_settings (struct x_display_info *dpyinfo, int send_event_p) /* Check if EVENT for the display in DPYINFO is XSettings related. */ void -xft_settings_event (struct x_display_info *dpyinfo, const XEvent * const event) +xft_settings_event (struct x_display_info *dpyinfo, const XEvent *event) { bool check_window_p = 0, apply_settings_p = 0; diff --git a/src/xsettings.h b/src/xsettings.h index 4407ca7df92..a017c5d92d8 100644 --- a/src/xsettings.h +++ b/src/xsettings.h @@ -21,7 +21,7 @@ along with GNU Emacs. If not, see . */ #define XSETTINGS_H extern void xsettings_initialize (struct x_display_info *); -extern void xft_settings_event (struct x_display_info *, const XEvent * const); +extern void xft_settings_event (struct x_display_info *, const XEvent *); extern const char *xsettings_get_system_font (void); #ifdef USE_LUCID extern const char *xsettings_get_system_normal_font (void); diff --git a/src/xterm.c b/src/xterm.c index 90e58c81f44..ba588157fc0 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -303,12 +303,12 @@ static void x_scroll_bar_report_motion (struct frame **, Lisp_Object *, enum scroll_bar_part *, Lisp_Object *, Lisp_Object *, Time *); -static int x_handle_net_wm_state (struct frame *, const XPropertyEvent * const); +static int x_handle_net_wm_state (struct frame *, const XPropertyEvent *); static void x_check_fullscreen (struct frame *); static void x_check_expected_move (struct frame *, int, int); static void x_sync_with_move (struct frame *, int, int, int); static int handle_one_xevent (struct x_display_info *, - const XEvent * const, int *, + const XEvent *, int *, struct input_event *); #ifdef USE_GTK static int x_dispatch_event (XEvent *, Display *); @@ -3462,7 +3462,7 @@ x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc) static struct frame * x_menubar_window_to_frame (struct x_display_info *dpyinfo, - const XEvent * const event) + const XEvent *event) { Window wdesc = event->xany.window; Lisp_Object tail, frame; @@ -3544,7 +3544,7 @@ x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc) static void x_detect_focus_change (struct x_display_info *dpyinfo, struct frame *frame, - const XEvent * const event, struct input_event *bufp) + const XEvent *event, struct input_event *bufp) { if (!frame) return; @@ -3835,7 +3835,7 @@ x_get_keysym_name (int keysym) static Lisp_Object construct_mouse_click (struct input_event *result, - const XButtonEvent * const event, + const XButtonEvent *event, struct frame *f) { /* Make the event type NO_EVENT; we'll change that when we decide @@ -3868,7 +3868,7 @@ static XMotionEvent last_mouse_motion_event; static Lisp_Object last_mouse_motion_frame; static int -note_mouse_movement (struct frame *frame, const XMotionEvent * const event) +note_mouse_movement (struct frame *frame, const XMotionEvent *event) { last_mouse_movement_time = event->time; last_mouse_motion_event = *event; @@ -4359,7 +4359,7 @@ x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole) in *IEVENT. */ static void -x_scroll_bar_to_input_event (const XEvent * const event, +x_scroll_bar_to_input_event (const XEvent *event, struct input_event *ievent) { XClientMessageEvent *ev = (XClientMessageEvent *) event; @@ -5504,7 +5504,7 @@ XTjudge_scroll_bars (struct frame *f) mark bits. */ static void -x_scroll_bar_expose (struct scroll_bar *bar, const XEvent * const event) +x_scroll_bar_expose (struct scroll_bar *bar, const XEvent *event) { Window w = bar->x_window; struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); @@ -5543,7 +5543,7 @@ x_scroll_bar_expose (struct scroll_bar *bar, const XEvent * const event) static void x_scroll_bar_handle_click (struct scroll_bar *bar, - const XEvent * const event, + const XEvent *event, struct input_event *emacs_event) { if (! WINDOWP (bar->window)) @@ -5602,7 +5602,7 @@ x_scroll_bar_handle_click (struct scroll_bar *bar, static void x_scroll_bar_note_movement (struct scroll_bar *bar, - const XMotionEvent * const event) + const XMotionEvent *event) { struct frame *f = XFRAME (XWINDOW (bar->window)->frame); @@ -5853,7 +5853,7 @@ static void xembed_send_message (struct frame *f, Time, static int handle_one_xevent (struct x_display_info *dpyinfo, - const XEvent * const event, + const XEvent *event, int *finish, struct input_event *hold_quit) { union { @@ -6078,7 +6078,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, goto OTHER; #endif /* USE_X_TOOLKIT */ { - const XSelectionClearEvent * const eventp = &event->xselectionclear; + const XSelectionClearEvent *eventp = &event->xselectionclear; inev.ie.kind = SELECTION_CLEAR_EVENT; SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display; @@ -6094,7 +6094,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, goto OTHER; #endif /* USE_X_TOOLKIT */ { - const XSelectionRequestEvent * const eventp = &event->xselectionrequest; + const XSelectionRequestEvent *eventp = &event->xselectionrequest; inev.ie.kind = SELECTION_REQUEST_EVENT; SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display; @@ -8533,7 +8533,7 @@ XTfullscreen_hook (struct frame *f) static int -x_handle_net_wm_state (struct frame *f, const XPropertyEvent * const event) +x_handle_net_wm_state (struct frame *f, const XPropertyEvent *event) { int value = FULLSCREEN_NONE; Lisp_Object lval; diff --git a/src/xterm.h b/src/xterm.h index 8dc86784b09..28b72969972 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -941,8 +941,8 @@ extern void x_wait_for_event (struct frame *, int); /* Defined in xselect.c */ -extern void x_handle_property_notify (const XPropertyEvent * const); -extern void x_handle_selection_notify (const XSelectionEvent * const); +extern void x_handle_property_notify (const XPropertyEvent *); +extern void x_handle_selection_notify (const XSelectionEvent *); extern void x_handle_selection_event (struct input_event *); extern void x_clear_frame_selections (struct frame *); @@ -954,7 +954,7 @@ extern void x_send_client_event (Lisp_Object display, Lisp_Object values); extern int x_handle_dnd_message (struct frame *, - const XClientMessageEvent * const, + const XClientMessageEvent *, struct x_display_info *, struct input_event *); extern int x_check_property_data (Lisp_Object); From e36b2d20d0060c52eb33cc3895e6fbfe1d5578f1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 00:31:09 -0700 Subject: [PATCH 179/321] ChangeLog whitespace fixes --- etc/ChangeLog | 2 +- lisp/ChangeLog | 4 ++-- lisp/ChangeLog.16 | 2 +- lisp/cedet/ChangeLog | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index 5483d824da4..7133b16f36d 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -724,7 +724,7 @@ * refcards/vipcard.tex, refcards/viperCard.tex: Update short copyright year to 2012. -2012-01-04 Chong Yidong +2012-01-04 Chong Yidong * org/README: Rename from COPYRIGHT-AND-LICENSE. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f36ed3ceebb..15afc3ad19e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4144,7 +4144,7 @@ * term/xterm.el (xterm--query): Stop after first matching handler. (Bug#14615) -2013-06-14 Ivan Kanis +2013-06-14 Ivan Kanis Add support for dired in saveplace. * dired.el (dired-initial-position-hook): New variable. @@ -6754,7 +6754,7 @@ (vc-exec-after): Allow code to be a function. Use add/remove-function. (compilation-error-regexp-alist, view-old-buffer-read-only): Declare. -2013-04-19 Masatake YAMATO +2013-04-19 Masatake YAMATO * progmodes/sh-script.el (sh-imenu-generic-expression): Handle function names with a single character. (Bug#14111) diff --git a/lisp/ChangeLog.16 b/lisp/ChangeLog.16 index 7692a0fffa8..b18d2bf9da4 100644 --- a/lisp/ChangeLog.16 +++ b/lisp/ChangeLog.16 @@ -7788,7 +7788,7 @@ (ruby-syntax-propertize-function): Adjust for changes in `ruby-syntax-propertize-heredoc'. -2012-08-09 Nobuyoshi Nakada +2012-08-09 Nobuyoshi Nakada * progmodes/ruby-mode.el (ruby-mode-map): Remove deprecated binding (use `M-;' instead). diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 2094523cdaa..a8a4c9db6f5 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -962,7 +962,7 @@ (semantic-gcc-setup): If the first attempt at calling cpp fails, try straight GCC. -2012-10-01 Jan Moringen +2012-10-01 Jan Moringen * semantic/idle.el (semantic-idle-breadcrumbs--display-in-header-line): From 33b83dd70c242357e542278b9d011f2c545d1f77 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 17 Sep 2013 11:36:35 +0400 Subject: [PATCH 180/321] * xterm.c (toplevel) [USE_MOTIF]: Include xlwmenu.h to pacify GCC. --- src/ChangeLog | 1 + src/xterm.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index d477e3d2ae3..b4ec77780e4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -28,6 +28,7 @@ for g_type_init. * xterm.c (handle_one_xevent): Do not call to x_clear_area if GTK >= 2.7.0. + (toplevel) [USE_MOTIF]: Include xlwmenu.h to pacify GCC. 2013-09-16 Jan Djärv diff --git a/src/xterm.c b/src/xterm.c index ba588157fc0..44f0efab019 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -84,7 +84,7 @@ along with GNU Emacs. If not, see . */ #endif #endif -#ifdef USE_LUCID +#if defined (USE_LUCID) || defined (USE_MOTIF) #include "../lwlib/xlwmenu.h" #endif From 90582f05bc41bb832716926be1593c66b8219151 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 00:39:54 -0700 Subject: [PATCH 181/321] Add a major-mode for the *Messages* buffer Ref: http://lists.gnu.org/archive/html/emacs-devel/2010-02/msg00135.html * lisp/simple.el (messages-buffer-mode): New major mode. (messages-buffer): New function. * lisp/startup.el (normal-top-level): Switch mode of *Messages* buffer. * src/xdisp.c (message_dolog): If we create *Messages*, switch it to messages-buffer-mode. * lisp/emacs-lisp/ert.el (ert--force-message-log-buffer-truncation) (ert-run-test): Use `message-buffer' function. (ert--force-message-log-buffer-truncation): Ignore read-only. * lisp/help.el (view-echo-area-messages): Use `message-buffer' function. * lisp/mail/emacsbug.el (report-emacs-bug): Use `message-buffer' function. * lisp/gnus/gnus-util.el (gnus-message-with-timestamp-1): Use `message-buffer' function if available. Ignore read-only. * etc/NEWS: Mention this. --- etc/NEWS | 4 ++++ lisp/ChangeLog | 11 +++++++++++ lisp/emacs-lisp/ert.el | 9 +++++---- lisp/gnus/ChangeLog | 5 +++++ lisp/gnus/gnus-util.el | 11 +++++++---- lisp/help.el | 5 ++--- lisp/mail/emacsbug.el | 6 +++--- lisp/simple.el | 12 ++++++++++++ lisp/startup.el | 4 ++-- src/ChangeLog | 5 +++++ src/xdisp.c | 18 +++++++++++++++--- 11 files changed, 71 insertions(+), 19 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 7558fc53052..6042ed8bf5f 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -93,6 +93,10 @@ simply disabling Transient Mark mode does the same thing. ** `initial-buffer-choice' can now specify a function to set up the initial buffer. +** The *Messages* buffer is created in a new major mode `messages-buffer-mode', +and read-only. Code that might create the *Messages* buffer should +call the function `messages-buffer' to do so and set the mode. + ** `remember-notes' creates a buffer whose content is saved on kill-emacs. You may think of it as a *scratch* buffer whose content is preserved. In fact, it was designed as a replacement for *scratch* buffer and can diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 15afc3ad19e..ceae81b91e0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2013-09-17 Glenn Morris + + * simple.el (messages-buffer-mode): New major mode. + (messages-buffer): New function. + * startup.el (normal-top-level): Switch mode of *Messages* buffer. + * emacs-lisp/ert.el (ert--force-message-log-buffer-truncation) + (ert-run-test): Use `message-buffer' function. + (ert--force-message-log-buffer-truncation): Ignore read-only. + * help.el (view-echo-area-messages): Use `message-buffer' function. + * mail/emacsbug.el (report-emacs-bug): Use `message-buffer' function. + 2013-09-17 Stefan Monnier * subr.el (eval-after-load): Preserve evaluation order (bug#15389). diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el index 98576687f3d..409e4faf4d5 100644 --- a/lisp/emacs-lisp/ert.el +++ b/lisp/emacs-lisp/ert.el @@ -785,7 +785,7 @@ This mainly sets up debugger-related bindings." "Immediately truncate *Messages* buffer according to `message-log-max'. This can be useful after reducing the value of `message-log-max'." - (with-current-buffer (get-buffer-create "*Messages*") + (with-current-buffer (messages-buffer) ;; This is a reimplementation of this part of message_dolog() in xdisp.c: ;; if (NATNUMP (Vmessage_log_max)) ;; { @@ -798,7 +798,8 @@ This can be useful after reducing the value of `message-log-max'." (end (save-excursion (goto-char (point-max)) (forward-line (- message-log-max)) - (point)))) + (point))) + (inhibit-read-only t)) (delete-region begin end))))) (defvar ert--running-tests nil @@ -818,7 +819,7 @@ Returns the result and stores it in ERT-TEST's `most-recent-result' slot." (setf (ert-test-most-recent-result ert-test) nil) (cl-block error (let ((begin-marker - (with-current-buffer (get-buffer-create "*Messages*") + (with-current-buffer (messages-buffer) (point-max-marker)))) (unwind-protect (let ((info (make-ert--test-execution-info @@ -837,7 +838,7 @@ Returns the result and stores it in ERT-TEST's `most-recent-result' slot." (ert--run-test-internal info)) (let ((result (ert--test-execution-info-result info))) (setf (ert-test-result-messages result) - (with-current-buffer (get-buffer-create "*Messages*") + (with-current-buffer (messages-buffer) (buffer-substring begin-marker (point-max)))) (ert--force-message-log-buffer-truncation) (setq should-form-accu (nreverse should-form-accu)) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index fc8ff9fd695..2889ead69ed 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2013-09-17 Glenn Morris + + * gnus-util.el (gnus-message-with-timestamp-1): + Use `message-buffer' function if available. Ignore read-only. + 2013-09-16 Katsumi Yamaoka * message.el (message-expand-group, message-completion-in-region): diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el index 1d2ab2da248..4f63f4bdbc0 100644 --- a/lisp/gnus/gnus-util.el +++ b/lisp/gnus/gnus-util.el @@ -514,11 +514,14 @@ but also to the ones displayed in the echo area." (> message-log-max 0) (/= (length str) 0)) (setq time (current-time)) - (with-current-buffer (get-buffer-create "*Messages*") + (with-current-buffer (if (fboundp 'messages-buffer) + (messages-buffer) + (get-buffer-create "*Messages*")) (goto-char (point-max)) - (insert ,timestamp str "\n") - (forward-line (- message-log-max)) - (delete-region (point-min) (point)) + (let ((inhibit-read-only t)) + (insert ,timestamp str "\n") + (forward-line (- message-log-max)) + (delete-region (point-min) (point))) (goto-char (point-max)))) str) (gnus-add-timestamp-to-message diff --git a/lisp/help.el b/lisp/help.el index 4ec0b99a593..c21d5b8c1d1 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1,7 +1,6 @@ ;;; help.el --- help commands for Emacs -;; Copyright (C) 1985-1986, 1993-1994, 1998-2013 Free Software -;; Foundation, Inc. +;; Copyright (C) 1985-1986, 1993-1994, 1998-2013 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: help, internal @@ -412,7 +411,7 @@ With argument, display info only for the selected version." The number of messages retained in that buffer is specified by the variable `message-log-max'." (interactive) - (with-current-buffer (get-buffer-create "*Messages*") + (with-current-buffer (messages-buffer) (goto-char (point-max)) (display-buffer (current-buffer)))) diff --git a/lisp/mail/emacsbug.el b/lisp/mail/emacsbug.el index c1bc7e2e1ab..e045519e850 100644 --- a/lisp/mail/emacsbug.el +++ b/lisp/mail/emacsbug.el @@ -1,7 +1,7 @@ ;;; emacsbug.el --- command to report Emacs bugs to appropriate mailing list -;; Copyright (C) 1985, 1994, 1997-1998, 2000-2013 Free Software -;; Foundation, Inc. +;; Copyright (C) 1985, 1994, 1997-1998, 2000-2013 +;; Free Software Foundation, Inc. ;; Author: K. Shane Hartman ;; Maintainer: FSF @@ -160,7 +160,7 @@ Prompts for bug subject. Leaves you in a mail buffer." (report-emacs-bug-can-use-osx-open))) user-point message-end-point) (setq message-end-point - (with-current-buffer (get-buffer-create "*Messages*") + (with-current-buffer (messages-buffer) (point-max-marker))) (compose-mail report-emacs-bug-address topic) ;; The rest of this does not execute if the user was asked to diff --git a/lisp/simple.el b/lisp/simple.el index 593f36d1ee1..54630681a68 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -7344,6 +7344,18 @@ and setting it to nil." buffer-invisibility-spec) (setq buffer-invisibility-spec nil))) +(define-derived-mode messages-buffer-mode special-mode "Messages" + "Major mode used in the \"*Messages*\" buffer.") + +(defun messages-buffer () + "Return the \"*Messages*\" buffer. +If it does not exist, create and it switch it to `messages-buffer-mode'." + (or (get-buffer "*Messages*") + (with-current-buffer (get-buffer-create "*Messages*") + (messages-buffer-mode) + (current-buffer)))) + + ;; Minibuffer prompt stuff. ;;(defun minibuffer-prompt-modification (start end) diff --git a/lisp/startup.el b/lisp/startup.el index ec7d73306a2..059d7710320 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -1,7 +1,6 @@ ;;; startup.el --- process Emacs shell arguments -*- lexical-binding: t -*- -;; Copyright (C) 1985-1986, 1992, 1994-2013 Free Software Foundation, -;; Inc. +;; Copyright (C) 1985-1986, 1992, 1994-2013 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: internal @@ -494,6 +493,7 @@ It is the default value of the variable `top-level'." (setq command-line-processed t) (let ((dir default-directory)) (with-current-buffer "*Messages*" + (messages-buffer-mode) ;; Make it easy to do like "tail -f". (set (make-local-variable 'window-point-insertion-type) t) ;; Give *Messages* the same default-directory as *scratch*, diff --git a/src/ChangeLog b/src/ChangeLog index b4ec77780e4..00b59e89e67 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-17 Glenn Morris + + * xdisp.c (message_dolog): If we create *Messages*, + switch it to messages-buffer-mode. + 2013-09-17 Paul Eggert Don't overuse 'const' in types of locals. diff --git a/src/xdisp.c b/src/xdisp.c index 4582002fa0e..b07aad51bc9 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1,7 +1,6 @@ /* Display generation from window structure and buffer text. -Copyright (C) 1985-1988, 1993-1995, 1997-2013 Free Software Foundation, -Inc. +Copyright (C) 1985-1988, 1993-1995, 1997-2013 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -9538,7 +9537,20 @@ message_dolog (const char *m, ptrdiff_t nbytes, bool nlflag, bool multibyte) old_deactivate_mark = Vdeactivate_mark; oldbuf = current_buffer; - Fset_buffer (Fget_buffer_create (Vmessages_buffer_name)); + + /* Ensure the Messages buffer exists, and switch to it. + If we created it, set the major-mode. */ + { + int newbuffer = 0; + if (NILP (Fget_buffer (Vmessages_buffer_name))) newbuffer = 1; + + Fset_buffer (Fget_buffer_create (Vmessages_buffer_name)); + + if (newbuffer && + !NILP (Ffboundp (intern ("messages-buffer-mode")))) + call0 (intern ("messages-buffer-mode")); + } + bset_undo_list (current_buffer, Qt); oldpoint = message_dolog_marker1; From 16bda9698e9ef514ce57f35933902d685f84e865 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 00:43:14 -0700 Subject: [PATCH 182/321] Commentary update --- lisp/ls-lisp.el | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el index 9ffbd2ccf56..67bcdc8c82b 100644 --- a/lisp/ls-lisp.el +++ b/lisp/ls-lisp.el @@ -27,11 +27,9 @@ ;; OVERVIEW ========================================================== -;; This file redefines the function `insert-directory' to implement it -;; directly from Emacs lisp, without running ls in a subprocess. It -;; is useful if you cannot afford to fork Emacs on a real memory UNIX, -;; or other non-UNIX platforms if you don't have the ls -;; program, or if you want a different format from what ls offers. +;; This file advises the function `insert-directory' to implement it +;; directly from Emacs lisp, without running ls in a subprocess. +;; This is useful if you don't have ls installed (ie, on MS Windows). ;; This function can use regexps instead of shell wildcards. If you ;; enter regexps remember to double each $ sign. For example, to From 3696fe8aae9fa13d4ed4f186efff6733a7f1a8f9 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 00:45:18 -0700 Subject: [PATCH 183/321] ChangeLog whitespace fixes --- lisp/cedet/ChangeLog | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index a8a4c9db6f5..c4991be2e11 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -22,7 +22,7 @@ * semantic/fw.el (semantic-make-local-hook): Simplify by dropping Emacs <= 20. -2013-07-29 David Engster +2013-07-29 David Engster * lisp/cedet/cedet.el (cedet-packages): Remove speedbar since its development does no longer happens in CEDET upstream but in Emacs @@ -39,13 +39,13 @@ * semantic/wisent/python.el (semantic/format): New require. -2013-07-27 Eric Ludlam +2013-07-27 Eric Ludlam * lisp/cedet/semantic/edit.el (semantic-edits-splice-remove): Wrap debug message removing middle tag in semantic-edits-verbose-flag check. -2013-07-27 David Engster +2013-07-27 David Engster * semantic/bovine/el.el (semantic/db-el): New require. From f804aa63be2f551aed486587fefa86b87bd50745 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 00:47:51 -0700 Subject: [PATCH 184/321] Fix ChangeLog typos --- lisp/ChangeLog | 6 +++--- lisp/gnus/ChangeLog | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ceae81b91e0..b8d62097251 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4,10 +4,10 @@ (messages-buffer): New function. * startup.el (normal-top-level): Switch mode of *Messages* buffer. * emacs-lisp/ert.el (ert--force-message-log-buffer-truncation) - (ert-run-test): Use `message-buffer' function. + (ert-run-test): Use `messages-buffer' function. (ert--force-message-log-buffer-truncation): Ignore read-only. - * help.el (view-echo-area-messages): Use `message-buffer' function. - * mail/emacsbug.el (report-emacs-bug): Use `message-buffer' function. + * help.el (view-echo-area-messages): Use `messages-buffer' function. + * mail/emacsbug.el (report-emacs-bug): Use `messages-buffer' function. 2013-09-17 Stefan Monnier diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 2889ead69ed..ab969d3d5fb 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,7 +1,7 @@ 2013-09-17 Glenn Morris * gnus-util.el (gnus-message-with-timestamp-1): - Use `message-buffer' function if available. Ignore read-only. + Use `messages-buffer' function if available. Ignore read-only. 2013-09-16 Katsumi Yamaoka From baed360360debdbe4926f69be41108890f394540 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 17 Sep 2013 12:24:20 +0400 Subject: [PATCH 185/321] * xterm.h (struct x_display_info): New member x_pending_autoraise_frame, going to replace... * xterm.c (pending_autoraise_frame): ...static variable. (x_new_focus_frame, XTread_socket): Adjust users. * w32term.h (struct w32_display_info): New member w32_pending_autoraise_frame, going to replace... * w32term.c (pending_autoraise_frame): ...global variable. (x_new_focus_frame, w32_read_socket): Adjust users. --- src/ChangeLog | 11 +++++++++++ src/w32term.c | 16 ++++++---------- src/w32term.h | 3 +++ src/xterm.c | 37 ++++++++++++++----------------------- src/xterm.h | 3 +++ 5 files changed, 37 insertions(+), 33 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 00b59e89e67..5763940a247 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2013-09-17 Dmitry Antipov + + * xterm.h (struct x_display_info): New member + x_pending_autoraise_frame, going to replace... + * xterm.c (pending_autoraise_frame): ...static variable. + (x_new_focus_frame, XTread_socket): Adjust users. + * w32term.h (struct w32_display_info): New member + w32_pending_autoraise_frame, going to replace... + * w32term.c (pending_autoraise_frame): ...global variable. + (x_new_focus_frame, w32_read_socket): Adjust users. + 2013-09-17 Glenn Morris * xdisp.c (message_dolog): If we create *Messages*, diff --git a/src/w32term.c b/src/w32term.c index af73e66d882..912fb3cc68c 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -149,9 +149,6 @@ BOOL (WINAPI *pfnSetLayeredWindowAttributes) (HWND, COLORREF, BYTE, DWORD); #define SM_CYVIRTUALSCREEN 79 #endif -/* This is a frame waiting to be autoraised, within w32_read_socket. */ -struct frame *pending_autoraise_frame; - /* The handle of the frame that currently owns the system caret. */ HWND w32_system_caret_hwnd; int w32_system_caret_height; @@ -2823,9 +2820,9 @@ x_new_focus_frame (struct w32_display_info *dpyinfo, struct frame *frame) x_lower_frame (old_focus); if (dpyinfo->w32_focus_frame && dpyinfo->w32_focus_frame->auto_raise) - pending_autoraise_frame = dpyinfo->w32_focus_frame; + dpyinfo->w32_pending_autoraise_frame = dpyinfo->w32_focus_frame; else - pending_autoraise_frame = 0; + dpyinfo->w32_pending_autoraise_frame = NULL; } x_frame_rehighlight (dpyinfo); @@ -4981,12 +4978,11 @@ w32_read_socket (struct terminal *terminal, } /* If the focus was just given to an autoraising frame, - raise it now. */ - /* ??? This ought to be able to handle more than one such frame. */ - if (pending_autoraise_frame) + raise it now. FIXME: handle more than one such frame. */ + if (dpyinfo->w32_pending_autoraise_frame) { - x_raise_frame (pending_autoraise_frame); - pending_autoraise_frame = 0; + x_raise_frame (dpyinfo->w32_pending_autoraise_frame); + dpyinfo->w32_pending_autoraise_frame = NULL; } /* Check which frames are still visible, if we have enqueued any user diff --git a/src/w32term.h b/src/w32term.h index 1cbadadc84e..99253627e64 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -179,6 +179,9 @@ struct w32_display_info frame. It differs from w32_focus_frame when we're using a global minibuffer. */ struct frame *x_highlight_frame; + + /* The frame waiting to be auto-raised in w32_read_socket. */ + struct frame *w32_pending_autoraise_frame; }; /* This is a chain of structures for all the displays currently in use. */ diff --git a/src/xterm.c b/src/xterm.c index 44f0efab019..1adc5b3d03f 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -155,10 +155,6 @@ struct x_display_info *x_display_list; Lisp_Object x_display_name_list; -/* This is a frame waiting to be auto-raised, within XTread_socket. */ - -static struct frame *pending_autoraise_frame; - #ifdef USE_X_TOOLKIT /* The application context for Xt use. */ @@ -3299,9 +3295,9 @@ x_new_focus_frame (struct x_display_info *dpyinfo, struct frame *frame) x_lower_frame (old_focus); if (dpyinfo->x_focus_frame && dpyinfo->x_focus_frame->auto_raise) - pending_autoraise_frame = dpyinfo->x_focus_frame; + dpyinfo->x_pending_autoraise_frame = dpyinfo->x_focus_frame; else - pending_autoraise_frame = 0; + dpyinfo->x_pending_autoraise_frame = NULL; } x_frame_rehighlight (dpyinfo); @@ -7088,6 +7084,7 @@ XTread_socket (struct terminal *terminal, struct input_event *hold_quit) { int count = 0; int event_found = 0; + struct x_display_info *dpyinfo = terminal->display_info.x; block_input (); @@ -7095,36 +7092,33 @@ XTread_socket (struct terminal *terminal, struct input_event *hold_quit) input_signal_count++; /* For debugging, this gives a way to fake an I/O error. */ - if (terminal->display_info.x == XTread_socket_fake_io_error) + if (dpyinfo == XTread_socket_fake_io_error) { XTread_socket_fake_io_error = 0; - x_io_error_quitter (terminal->display_info.x->display); + x_io_error_quitter (dpyinfo->display); } #ifndef USE_GTK - while (XPending (terminal->display_info.x->display)) + while (XPending (dpyinfo->display)) { int finish; XEvent event; - XNextEvent (terminal->display_info.x->display, &event); + XNextEvent (dpyinfo->display, &event); #ifdef HAVE_X_I18N /* Filter events for the current X input method. */ - if (x_filter_event (terminal->display_info.x, &event)) + if (x_filter_event (dpyinfo, &event)) continue; #endif event_found = 1; - count += handle_one_xevent (terminal->display_info.x, - &event, &finish, hold_quit); + count += handle_one_xevent (dpyinfo, &event, &finish, hold_quit); if (finish == X_EVENT_GOTO_OUT) - goto out; + break; } - out:; - #else /* USE_GTK */ /* For GTK we must use the GTK event loop. But XEvents gets passed @@ -7174,12 +7168,11 @@ XTread_socket (struct terminal *terminal, struct input_event *hold_quit) } /* If the focus was just given to an auto-raising frame, - raise it now. */ - /* ??? This ought to be able to handle more than one such frame. */ - if (pending_autoraise_frame) + raise it now. FIXME: handle more than one such frame. */ + if (dpyinfo->x_pending_autoraise_frame) { - x_raise_frame (pending_autoraise_frame); - pending_autoraise_frame = 0; + x_raise_frame (dpyinfo->x_pending_autoraise_frame); + dpyinfo->x_pending_autoraise_frame = NULL; } unblock_input (); @@ -10651,8 +10644,6 @@ x_initialize (void) #endif #endif - pending_autoraise_frame = 0; - /* Note that there is no real way portable across R3/R4 to get the original error handler. */ XSetErrorHandler (x_error_handler); diff --git a/src/xterm.h b/src/xterm.h index 28b72969972..382cf30e1d6 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -302,6 +302,9 @@ struct x_display_info minibuffer. */ struct frame *x_highlight_frame; + /* The frame waiting to be auto-raised in XTread_socket. */ + struct frame *x_pending_autoraise_frame; + /* Time of last user interaction as returned in X events on this display. */ Time last_user_time; From 4a8bb694aabeb4dc4d14ff417508e182bc1f9148 Mon Sep 17 00:00:00 2001 From: Katsumi Yamaoka Date: Tue, 17 Sep 2013 09:24:02 +0000 Subject: [PATCH 186/321] message.el (message-display-completion-list): Abolish --- lisp/gnus/ChangeLog | 5 +++++ lisp/gnus/message.el | 14 +------------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index ab969d3d5fb..99c2f85ee6c 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2013-09-17 Katsumi Yamaoka + + * message.el (message-display-completion-list): Abolish. + (message-completion-in-region): Use display-completion-list. + 2013-09-17 Glenn Morris * gnus-util.el (gnus-message-with-timestamp-1): diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index ba4593fad45..a458b3fc25b 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -7947,17 +7947,6 @@ those headers." ;; falling back to message-tab-body-function. (lambda () (funcall fun) 'completion-attempted))))) -(eval-and-compile - (condition-case nil - (with-temp-buffer - (let ((standard-output (current-buffer))) - (eval '(display-completion-list nil ""))) - (defalias 'message-display-completion-list 'display-completion-list)) - (error ;; Don't use `wrong-number-of-arguments' here because of XEmacs. - (defun message-display-completion-list (completions &optional ignore) - "Display the list of completions, COMPLETIONS, using `standard-output'." - (display-completion-list completions))))) - (defun message-expand-group () "Expand the group name under point." (let ((b (save-excursion @@ -8012,8 +8001,7 @@ those headers." (let ((buffer-read-only nil)) (erase-buffer) (let ((standard-output (current-buffer))) - (message-display-completion-list (sort completions 'string<) - string)) + (display-completion-list (sort completions 'string<))) (setq buffer-read-only nil) (goto-char (point-min)) (delete-region (point) From 5cf10af897aaeb89830d6ff30b17c15c44af5b61 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 06:17:44 -0400 Subject: [PATCH 187/321] Auto-commit of generated files. --- autogen/config.in | 3 --- autogen/configure | 11 ----------- 2 files changed, 14 deletions(-) diff --git a/autogen/config.in b/autogen/config.in index a8ca66e22c8..9b2bbdfc949 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -604,9 +604,6 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the `gtk_window_set_has_resize_grip' function. */ #undef HAVE_GTK_WINDOW_SET_HAS_RESIZE_GRIP -/* Define to 1 if you have the `g_type_init' function. */ -#undef HAVE_G_TYPE_INIT - /* Define to 1 if netdb.h declares h_errno. */ #undef HAVE_H_ERRNO diff --git a/autogen/configure b/autogen/configure index 72439e795d6..206f5301e82 100755 --- a/autogen/configure +++ b/autogen/configure @@ -12114,17 +12114,6 @@ $as_echo "no" >&6; } SAVE_LIBS="$LIBS" CFLAGS="$SETTINGS_CFLAGS $CFLAGS" LIBS="$SETTINGS_LIBS $LIBS" - for ac_func in g_type_init -do : - ac_fn_c_check_func "$LINENO" "g_type_init" "ac_cv_func_g_type_init" -if test "x$ac_cv_func_g_type_init" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_G_TYPE_INIT 1 -_ACEOF - -fi -done - CFLAGS="$SAVE_CFLAGS" LIBS="$SAVE_LIBS" fi From 07dd2ea47f58d35b34581401a09d7d842a35fbdf Mon Sep 17 00:00:00 2001 From: Katsumi Yamaoka Date: Tue, 17 Sep 2013 10:21:24 +0000 Subject: [PATCH 188/321] lisp/gnus/mm-decode.el (mm-add-meta-html-tag): Fix regexp matching meta tag --- lisp/gnus/ChangeLog | 2 ++ lisp/gnus/mm-decode.el | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 99c2f85ee6c..18e0e3b25b1 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,5 +1,7 @@ 2013-09-17 Katsumi Yamaoka + * mm-decode.el (mm-add-meta-html-tag): Fix regexp matching meta tag. + * message.el (message-display-completion-list): Abolish. (message-completion-in-region): Use display-completion-list. diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index 28d930b55f7..07e66b30e58 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -1415,7 +1415,7 @@ Return t if meta tag is added or replaced." (goto-char (point-min)) (if (re-search-forward "\ ]*>" nil t) +text/\\(\\sw+\\)\\(?:\;\\s-*charset=\\([^\"'>]+\\)\\)?" nil t) (if (and (not force-charset) (match-beginning 2) (string-match "\\`html\\'" (match-string 1))) From a6c2ee1b72658db95c64e2295580508bda410f8a Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 17 Sep 2013 16:27:21 +0400 Subject: [PATCH 189/321] * dispextern.h (check_x_display_info, x_get_string_resource): Declare here just once and unify the latter. * frame.c (check_x_display_info, x_get_string_resource): * nsterm.h (check_x_display_info): * xrdb.c (x_get_string_resource): * xterm.h (check_x_display_info): Remove prototypes. * nsfns.m (x_get_string_resource): Likewise. Adjust definition. * w32reg.c (x_get_string_resource): Likewise. (w32_get_rdb_resource): Adjust user. --- src/ChangeLog | 12 ++++++++++++ src/dispextern.h | 4 ++++ src/frame.c | 5 ----- src/nsfns.m | 18 +++++++----------- src/nsterm.h | 2 -- src/w32reg.c | 4 ++-- src/xrdb.c | 4 ---- src/xterm.h | 1 - 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 5763940a247..8583bbb19fb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2013-09-17 Dmitry Antipov + + * dispextern.h (check_x_display_info, x_get_string_resource): + Declare here just once and unify the latter. + * frame.c (check_x_display_info, x_get_string_resource): + * nsterm.h (check_x_display_info): + * xrdb.c (x_get_string_resource): + * xterm.h (check_x_display_info): Remove prototypes. + * nsfns.m (x_get_string_resource): Likewise. Adjust definition. + * w32reg.c (x_get_string_resource): Likewise. + (w32_get_rdb_resource): Adjust user. + 2013-09-17 Dmitry Antipov * xterm.h (struct x_display_info): New member diff --git a/src/dispextern.h b/src/dispextern.h index 67de6bffabf..e91403bce68 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -61,6 +61,7 @@ xstrcasecmp (char const *a, char const *b) } #ifdef HAVE_X_WINDOWS +#include /* for XrmDatabase */ typedef struct x_display_info Display_Info; typedef XImage * XImagePtr; typedef XImagePtr XImagePtr_or_DC; @@ -3530,6 +3531,7 @@ enum resource_types RES_TYPE_BOOLEAN_NUMBER }; +extern Display_Info *check_x_display_info (Lisp_Object); extern Lisp_Object x_get_arg (Display_Info *, Lisp_Object, Lisp_Object, const char *, const char *class, enum resource_types); @@ -3541,6 +3543,8 @@ extern Lisp_Object x_default_parameter (struct frame *, Lisp_Object, Lisp_Object, Lisp_Object, const char *, const char *, enum resource_types); +extern char *x_get_string_resource (XrmDatabase, const char *, + const char *); #endif /* HAVE_WINDOW_SYSTEM */ diff --git a/src/frame.c b/src/frame.c index 8eabef55d1b..1f2b2b9c223 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3520,11 +3520,6 @@ validate_x_resource_name (void) } } - -extern char *x_get_string_resource (XrmDatabase, const char *, const char *); -extern Display_Info *check_x_display_info (Lisp_Object); - - /* Get specified attribute from resource database RDB. See Fx_get_resource below for other parameters. */ diff --git a/src/nsfns.m b/src/nsfns.m index 574239873a0..408e6d2176e 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -2211,17 +2211,13 @@ and GNUstep implementations ("distributor-specific release wid - 1) / wid; } - -extern const char *x_get_string_resource (XrmDatabase, char *, char *); - - /* terms impl this instead of x-get-resource directly */ -const char * -x_get_string_resource (XrmDatabase rdb, char *name, char *class) +char * +x_get_string_resource (XrmDatabase rdb, const char *name, const char *class) { /* remove appname prefix; TODO: allow for !="Emacs" */ - char *toCheck = class + (!strncmp (class, "Emacs.", 6) ? 6 : 0); - const char *res; + const char *res, *toCheck = class + (!strncmp (class, "Emacs.", 6) ? 6 : 0); + check_window_system (NULL); if (inhibit_x_resources) @@ -2229,9 +2225,9 @@ and GNUstep implementations ("distributor-specific release return NULL; res = ns_get_defaults_value (toCheck); - return !res ? NULL : - (!c_strncasecmp (res, "YES", 3) ? "true" : - (!c_strncasecmp (res, "NO", 2) ? "false" : res)); + return (!res ? NULL : + (!c_strncasecmp (res, "YES", 3) ? "true" : + (!c_strncasecmp (res, "NO", 2) ? "false" : (char *) res))); } diff --git a/src/nsterm.h b/src/nsterm.h index 1b5804b98b5..30ae871da83 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -605,8 +605,6 @@ extern struct ns_display_info *x_display_list; extern Lisp_Object ns_display_name_list; extern struct ns_display_info *ns_display_info_for_name (Lisp_Object name); -struct ns_display_info *check_x_display_info (Lisp_Object frame); - struct ns_output { #ifdef __OBJC__ diff --git a/src/w32reg.c b/src/w32reg.c index e7c4e9ea351..9d088538e0b 100644 --- a/src/w32reg.c +++ b/src/w32reg.c @@ -56,7 +56,7 @@ along with GNU Emacs. If not, see . */ */ static char * -w32_get_rdb_resource (char *rdb, char *resource) +w32_get_rdb_resource (char *rdb, const char *resource) { char *value = rdb; int len = strlen (resource); @@ -141,7 +141,7 @@ w32_get_string_resource (char *name, char *class, DWORD dwexptype) database RDB. */ char * -x_get_string_resource (XrmDatabase rdb, char *name, char *class) +x_get_string_resource (XrmDatabase rdb, const char *name, const char *class) { if (rdb) { diff --git a/src/xrdb.c b/src/xrdb.c index 60dcdae080d..52988f0818a 100644 --- a/src/xrdb.c +++ b/src/xrdb.c @@ -48,10 +48,6 @@ along with GNU Emacs. If not, see . */ #include "keyboard.h" #endif -char *x_get_string_resource (XrmDatabase rdb, const char *name, - const char *class); - - /* X file search path processing. */ diff --git a/src/xterm.h b/src/xterm.h index 382cf30e1d6..e1556de36b9 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -975,7 +975,6 @@ extern void x_clipboard_manager_save_all (void); /* Defined in xfns.c */ -extern struct x_display_info * check_x_display_info (Lisp_Object); extern Lisp_Object x_get_focus_frame (struct frame *); #ifdef USE_GTK From 2cd98812779dd3254b4956ea39d6e6338f3feb8d Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 17 Sep 2013 16:59:45 +0400 Subject: [PATCH 190/321] * frame.h (x_set_bitmap_icon) [!HAVE_NS]: New function. (x_icon_type): Remove prototype. (x_bitmap_icon) [!HAVE_NS]: Declare as such. * frame.c (x_icon_type): Remove. * w32term.c (x_make_frame_visible, x_iconify_frame): * xterm.c (x_make_frame_visible, x_iconify_frame): Use x_set_bitmap_icon to factor out common code. --- src/ChangeLog | 10 ++++++++++ src/frame.c | 16 ---------------- src/frame.h | 21 +++++++++++++++++---- src/w32term.c | 12 ++---------- src/xterm.c | 10 ++-------- 5 files changed, 31 insertions(+), 38 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8583bbb19fb..e900cfb1bb1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2013-09-17 Dmitry Antipov + + * frame.h (x_set_bitmap_icon) [!HAVE_NS]: New function. + (x_icon_type): Remove prototype. + (x_bitmap_icon) [!HAVE_NS]: Declare as such. + * frame.c (x_icon_type): Remove. + * w32term.c (x_make_frame_visible, x_iconify_frame): + * xterm.c (x_make_frame_visible, x_iconify_frame): + Use x_set_bitmap_icon to factor out common code. + 2013-09-17 Dmitry Antipov * dispextern.h (check_x_display_info, x_get_string_resource): diff --git a/src/frame.c b/src/frame.c index 1f2b2b9c223..365629d0f48 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3381,22 +3381,6 @@ x_set_scroll_bar_width (struct frame *f, Lisp_Object arg, Lisp_Object oldval) XWINDOW (FRAME_SELECTED_WINDOW (f))->cursor.x = 0; } - - -/* Return non-nil if frame F wants a bitmap icon. */ - -Lisp_Object -x_icon_type (struct frame *f) -{ - Lisp_Object tem; - - tem = assq_no_quit (Qicon_type, f->param_alist); - if (CONSP (tem)) - return XCDR (tem); - else - return Qnil; -} - void x_set_alpha (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { diff --git a/src/frame.h b/src/frame.h index c5ad71628ab..f5fd7dbcc36 100644 --- a/src/frame.h +++ b/src/frame.h @@ -1230,8 +1230,6 @@ extern void x_set_vertical_scroll_bars (struct frame *, Lisp_Object, extern void x_set_scroll_bar_width (struct frame *, Lisp_Object, Lisp_Object); -extern Lisp_Object x_icon_type (struct frame *); - extern long x_figure_window_size (struct frame *, Lisp_Object, bool); extern void x_set_alpha (struct frame *, Lisp_Object, Lisp_Object); @@ -1260,7 +1258,6 @@ extern void x_set_tool_bar_lines (struct frame *f, Lisp_Object oldval); extern void x_activate_menubar (struct frame *); extern void x_real_positions (struct frame *, int *, int *); -extern int x_bitmap_icon (struct frame *, Lisp_Object); extern void x_set_menu_bar_lines (struct frame *, Lisp_Object, Lisp_Object); @@ -1279,8 +1276,24 @@ extern void x_query_colors (struct frame *f, XColor *, int); extern void x_query_color (struct frame *f, XColor *); extern void x_focus_frame (struct frame *); +#ifndef HAVE_NS + +extern int x_bitmap_icon (struct frame *, Lisp_Object); + +/* Set F's bitmap icon, if specified among F's parameters. */ + +FRAME_INLINE void +x_set_bitmap_icon (struct frame *f) +{ + Lisp_Object obj = assq_no_quit (Qicon_type, f->param_alist); + + if (CONSP (obj)) + x_bitmap_icon (f, XCDR (obj)); +} + +#endif /* !HAVE_NS */ + #endif /* HAVE_WINDOW_SYSTEM */ - FRAME_INLINE void flush_frame (struct frame *f) diff --git a/src/w32term.c b/src/w32term.c index 912fb3cc68c..59fdf130592 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -5915,13 +5915,9 @@ w32_frame_raise_lower (struct frame *f, int raise_flag) void x_make_frame_visible (struct frame *f) { - Lisp_Object type; - block_input (); - type = x_icon_type (f); - if (!NILP (type)) - x_bitmap_icon (f, type); + x_set_bitmap_icon (f); if (! FRAME_VISIBLE_P (f)) { @@ -6031,8 +6027,6 @@ x_make_frame_invisible (struct frame *f) void x_iconify_frame (struct frame *f) { - Lisp_Object type; - /* Don't keep the highlight on an invisible frame. */ if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f) FRAME_DISPLAY_INFO (f)->x_highlight_frame = 0; @@ -6042,9 +6036,7 @@ x_iconify_frame (struct frame *f) block_input (); - type = x_icon_type (f); - if (!NILP (type)) - x_bitmap_icon (f, type); + x_set_bitmap_icon (f); /* Simulate the user minimizing the frame. */ SendMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_MINIMIZE, 0); diff --git a/src/xterm.c b/src/xterm.c index 1adc5b3d03f..fadcdbfea98 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -9008,7 +9008,6 @@ xembed_send_message (struct frame *f, Time t, enum xembed_message msg, void x_make_frame_visible (struct frame *f) { - Lisp_Object type; int original_top, original_left; int retry_count = 2; @@ -9016,9 +9015,7 @@ x_make_frame_visible (struct frame *f) block_input (); - type = x_icon_type (f); - if (!NILP (type)) - x_bitmap_icon (f, type); + x_set_bitmap_icon (f); if (! FRAME_VISIBLE_P (f)) { @@ -9225,7 +9222,6 @@ x_iconify_frame (struct frame *f) #ifdef USE_X_TOOLKIT int result; #endif - Lisp_Object type; /* Don't keep the highlight on an invisible frame. */ if (FRAME_DISPLAY_INFO (f)->x_highlight_frame == f) @@ -9236,9 +9232,7 @@ x_iconify_frame (struct frame *f) block_input (); - type = x_icon_type (f); - if (!NILP (type)) - x_bitmap_icon (f, type); + x_set_bitmap_icon (f); #if defined (USE_GTK) if (FRAME_GTK_OUTER_WIDGET (f)) From 4e0bf886e03d5b3f4b73b3196c8aa54974209676 Mon Sep 17 00:00:00 2001 From: Katsumi Yamaoka Date: Tue, 17 Sep 2013 14:08:24 +0000 Subject: [PATCH 191/321] gnus-int.el (gnus-open-server): Silence compiler --- lisp/gnus/ChangeLog | 2 ++ lisp/gnus/gnus-int.el | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 18e0e3b25b1..f9c0c7b287e 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,5 +1,7 @@ 2013-09-17 Katsumi Yamaoka + * gnus-int.el (gnus-open-server): Silence compiler. + * mm-decode.el (mm-add-meta-html-tag): Fix regexp matching meta tag. * message.el (message-display-completion-list): Abolish. diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el index f0cf0daed01..2de6ce0fce1 100644 --- a/lisp/gnus/gnus-int.el +++ b/lisp/gnus/gnus-int.el @@ -302,7 +302,7 @@ If it is down, start it up (again)." (setcar (cdr elem) (cond (result - (if (eq open-server-function #'nnagent-open-server) + (if (eq open-server-function 'nnagent-open-server) ;; The agent's backend has a "special" status 'offline 'ok)) From e8b66a6a262b12405e2f29f3693a1f2d57061e2b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 17 Sep 2013 11:19:12 -0400 Subject: [PATCH 192/321] * lisp/eshell/esh-cmd.el (eshell-post-rewrite-command-function): New var. (eshell-post-rewrite-command-hook): Make obsolete. (eshell-parse-command): Simplify. (eshell-structure-basic-command): Remove unused arg `vocal-test'. (eshell--cmd): Declare. (eshell-parse-pipeline): Remove unused var `final-p'. Pass a dynvar to eshell-post-rewrite-command-hook. Implement the new eshell-post-rewrite-command-function. (eshell-invoke-directly): Remove unused arg `input'. * lisp/eshell/esh-io.el (eshell-io-initialize): Use eshell-post-rewrite-command-function. (eshell--apply-redirections): Rename from eshell-apply-redirections; adjust to new calling convention. (eshell-create-handles): Rename args to avoid clashing with dynvar `standard-output'. Fixes: debbugs:15399 --- lisp/ChangeLog | 18 +++++++++++++ lisp/eshell/esh-cmd.el | 58 ++++++++++++++++++++--------------------- lisp/eshell/esh-io.el | 27 +++++++++---------- lisp/eshell/esh-mode.el | 2 +- 4 files changed, 61 insertions(+), 44 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b8d62097251..059bb0218f3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,21 @@ +2013-09-17 Stefan Monnier + + * eshell/esh-cmd.el (eshell-post-rewrite-command-function): New var. + (eshell-post-rewrite-command-hook): Make obsolete. + (eshell-parse-command): Simplify. + (eshell-structure-basic-command): Remove unused arg `vocal-test'. + (eshell--cmd): Declare. + (eshell-parse-pipeline): Remove unused var `final-p'. + Pass a dynvar to eshell-post-rewrite-command-hook. + Implement the new eshell-post-rewrite-command-function. + (eshell-invoke-directly): Remove unused arg `input'. + * eshell/esh-io.el (eshell-io-initialize): + Use eshell-post-rewrite-command-function (bug#15399). + (eshell--apply-redirections): Rename from eshell-apply-redirections; + adjust to new calling convention. + (eshell-create-handles): Rename args to avoid clashing with dynvar + `standard-output'. + 2013-09-17 Glenn Morris * simple.el (messages-buffer-mode): New major mode. diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index 75e0e1d27c8..87c72d2caf5 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -205,12 +205,16 @@ forms or strings)." :type 'hook :group 'eshell-cmd) -(defcustom eshell-post-rewrite-command-hook nil +(defvar eshell-post-rewrite-command-function #'identity + "Function run after command rewriting is finished. +Takes the (rewritten) command, modifies it as it sees fit and returns +the new result to use instead.") +(defvar eshell-post-rewrite-command-hook nil "A hook run after command rewriting is finished. Each function is passed the symbol containing the rewritten command, -which may be modified directly. Any return value is ignored." - :type 'hook - :group 'eshell-cmd) +which may be modified directly. Any return value is ignored.") +(make-obsolete-variable 'eshell-post-rewrite-command-hook + 'eshell-post-rewrite-command-function "24.4") (defcustom eshell-complex-commands '("ls") "A list of commands names or functions, that determine complexity. @@ -335,10 +339,10 @@ otherwise t.") ;; Command parsing -(defun eshell-parse-command (command &optional args top-level) +(defun eshell-parse-command (command &optional args toplevel) "Parse the COMMAND, adding ARGS if given. COMMAND can either be a string, or a cons cell demarcating a buffer -region. TOP-LEVEL, if non-nil, means that the outermost command (the +region. TOPLEVEL, if non-nil, means that the outermost command (the user's input command) is being parsed, and that pre and post command hooks should be run before and after the command." (let* (sep-terms @@ -363,7 +367,7 @@ hooks should be run before and after the command." (setq cmd (if (or (not (car sep-terms)) (string= (car sep-terms) ";")) - (eshell-parse-pipeline cmd (not (car sep-terms))) + (eshell-parse-pipeline cmd) `(eshell-do-subjob (list ,(eshell-parse-pipeline cmd))))) (setq sep-terms (cdr sep-terms)) @@ -376,17 +380,12 @@ hooks should be run before and after the command." (if (cdr cmd) (setcar cmd `(eshell-commands ,(car cmd)))) (setq cmd (cdr cmd)))) - (setq commands - `(progn - ,@(if top-level - '((run-hooks 'eshell-pre-command-hook))) - ,@(if (not top-level) - commands - `((catch 'top-level (progn ,@commands)) - (run-hooks 'eshell-post-command-hook))))) - (if top-level - `(eshell-commands ,commands) - commands))) + (if toplevel + `(eshell-commands (progn + (run-hooks 'eshell-pre-command-hook) + (catch 'top-level (progn ,@commands)) + (run-hooks 'eshell-post-command-hook))) + (macroexp-progn commands)))) (defun eshell-debug-command (tag subform) "Output a debugging message to '*eshell last cmd*'." @@ -509,14 +508,11 @@ implemented via rewriting, rather than as a function." (list 'quote eshell-last-command-result)))))) (defun eshell-structure-basic-command (func names keyword test body - &optional else vocal-test) + &optional else) "With TERMS, KEYWORD, and two NAMES, structure a basic command. The first of NAMES should be the positive form, and the second the negative. It's not likely that users should ever need to call this -function. - -If VOCAL-TEST is non-nil, it means output from the test should be -shown, as well as output from the body." +function." ;; If the test form begins with `eshell-convert', it means ;; something data-wise will be returned, and we should let ;; that determine the truth of the statement. @@ -586,7 +582,9 @@ For an external command, it means an exit code of 0." eshell-last-command-result (= eshell-last-command-status 0))) -(defun eshell-parse-pipeline (terms &optional final-p) +(defvar eshell--cmd) + +(defun eshell-parse-pipeline (terms) "Parse a pipeline from TERMS, return the appropriate Lisp forms." (let* (sep-terms (bigpieces (eshell-separate-commands terms "\\(&&\\|||\\)" @@ -603,8 +601,11 @@ For an external command, it means an exit code of 0." (run-hook-with-args 'eshell-pre-rewrite-command-hook cmd) (setq cmd (run-hook-with-args-until-success 'eshell-rewrite-command-hook cmd)) - (run-hook-with-args 'eshell-post-rewrite-command-hook 'cmd) - (setcar p cmd)) + (let ((eshell--cmd cmd)) + (run-hook-with-args 'eshell-post-rewrite-command-hook + 'eshell--cmd) + (setq cmd eshell--cmd)) + (setcar p (funcall eshell-post-rewrite-command-function cmd))) (setq p (cdr p))) (nconc results (list @@ -625,8 +626,7 @@ For an external command, it means an exit code of 0." (setq final (eshell-structure-basic-command 'if (string= (car sep-terms) "&&") "if" `(eshell-protect ,(car results)) - `(eshell-protect ,final) - nil t) + `(eshell-protect ,final)) results (cdr results) sep-terms (cdr sep-terms))) final)) @@ -916,7 +916,7 @@ at the moment are: "Completion for the `debug' command." (while (pcomplete-here '("errors" "commands")))) -(defun eshell-invoke-directly (command input) +(defun eshell-invoke-directly (command) (let ((base (cadr (nth 2 (nth 2 (cadr command))))) name) (if (and (eq (car base) 'eshell-trap-errors) (eq (car (cadr base)) 'eshell-named-command)) diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el index f620890ee6b..c4c0bd43790 100644 --- a/lisp/eshell/esh-io.el +++ b/lisp/eshell/esh-io.el @@ -179,8 +179,8 @@ not be added to this variable." (make-local-variable 'eshell-current-redirections) (add-hook 'eshell-pre-rewrite-command-hook 'eshell-strip-redirections nil t) - (add-hook 'eshell-post-rewrite-command-hook - 'eshell-apply-redirections nil t)) + (add-function :filter-return (local 'eshell-post-rewrite-command-function) + #'eshell--apply-redirections)) (defun eshell-parse-redirection () "Parse an output redirection, such as '2>'." @@ -223,28 +223,27 @@ not be added to this variable." (setq eshell-current-redirections (cdr eshell-current-redirections)))) -(defun eshell-apply-redirections (cmdsym) +(defun eshell--apply-redirections (cmd) "Apply any redirection which were specified for COMMAND." (if eshell-current-redirections - (set cmdsym - (append (list 'progn) - eshell-current-redirections - (list (symbol-value cmdsym)))))) + `(progn + ,@eshell-current-redirections + ,cmd) + cmd)) (defun eshell-create-handles - (standard-output output-mode &optional standard-error error-mode) + (stdout output-mode &optional stderr error-mode) "Create a new set of file handles for a command. The default location for standard output and standard error will go to -STANDARD-OUTPUT and STANDARD-ERROR, respectively. +STDOUT and STDERR, respectively. OUTPUT-MODE and ERROR-MODE are either `overwrite', `append' or `insert'; a nil value of mode defaults to `insert'." (let ((handles (make-vector eshell-number-of-handles nil)) - (output-target (eshell-get-target standard-output output-mode)) - (error-target (eshell-get-target standard-error error-mode))) + (output-target (eshell-get-target stdout output-mode)) + (error-target (eshell-get-target stderr error-mode))) (aset handles eshell-output-handle (cons output-target 1)) - (if standard-error - (aset handles eshell-error-handle (cons error-target 1)) - (aset handles eshell-error-handle (cons output-target 1))) + (aset handles eshell-error-handle + (cons (if stderr error-target output-target) 1)) handles)) (defun eshell-protect-handles (handles) diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el index 1a80e3894e1..e770c773920 100644 --- a/lisp/eshell/esh-mode.el +++ b/lisp/eshell/esh-mode.el @@ -671,7 +671,7 @@ newline." (run-hooks 'eshell-input-filter-functions) (and (catch 'eshell-terminal (ignore - (if (eshell-invoke-directly cmd input) + (if (eshell-invoke-directly cmd) (eval cmd) (eshell-eval-command cmd input)))) (eshell-life-is-too-much))))) From 049c405a90db540f0de2e56cc965a43e1eaebcd9 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 17 Sep 2013 11:50:33 -0400 Subject: [PATCH 193/321] * lisp/cedet/semantic/symref/list.el (semantic-symref-results-mode): Use define-derived-mode. (semantic-symref-produce-list-on-results): Set up the results here instead of in semantic-symref-results-mode. Move after semantic-symref-current-results's defvar now that it refers to that var. (semantic-symref-auto-expand-results) (semantic-symref-results-summary-function) (semantic-symref-results-mode-hook): Remove redundant :group arg. (semantic-symref, semantic-symref-symbol, semantic-symref-regexp): Initialize directly in the let. --- lisp/cedet/ChangeLog | 13 +++++ lisp/cedet/semantic/symref/list.el | 83 +++++++++++------------------- lisp/cedet/srecode/srt-mode.el | 1 + 3 files changed, 45 insertions(+), 52 deletions(-) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index c4991be2e11..74a4591862a 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,16 @@ +2013-09-17 Stefan Monnier + + * semantic/symref/list.el (semantic-symref-results-mode): + Use define-derived-mode. + (semantic-symref-produce-list-on-results): Set up the results here + instead of in semantic-symref-results-mode. Move after + semantic-symref-current-results's defvar now that it refers to that var. + (semantic-symref-auto-expand-results) + (semantic-symref-results-summary-function) + (semantic-symref-results-mode-hook): Remove redundant :group arg. + (semantic-symref, semantic-symref-symbol, semantic-symref-regexp): + Initialize directly in the let. + 2013-09-13 Glenn Morris * semantic/ia.el (semantic-ia-complete-symbol-menu): diff --git a/lisp/cedet/semantic/symref/list.el b/lisp/cedet/semantic/symref/list.el index c1f0a092afc..af8e18f8c55 100644 --- a/lisp/cedet/semantic/symref/list.el +++ b/lisp/cedet/semantic/symref/list.el @@ -48,18 +48,18 @@ they are used in. Display the references in `semantic-symref-results-mode'." (interactive) (semantic-fetch-tags) - (let ((ct (semantic-current-tag)) - (res nil) - ) + (let ((ct (semantic-current-tag))) ;; Must have a tag... (when (not ct) (error "Place cursor inside tag to be searched for")) ;; Check w/ user. - (when (not (y-or-n-p (format "Find references for %s? " (semantic-tag-name ct)))) + (when (not (y-or-n-p (format "Find references for %s? " + (semantic-tag-name ct)))) (error "Quit")) ;; Gather results and tags (message "Gathering References...") - (setq res (semantic-symref-find-references-by-name (semantic-tag-name ct))) - (semantic-symref-produce-list-on-results res (semantic-tag-name ct)))) + (let* ((name (semantic-tag-name ct)) + (res (semantic-symref-find-references-by-name name))) + (semantic-symref-produce-list-on-results res name)))) ;;;###autoload (defun semantic-symref-symbol (sym) @@ -72,11 +72,9 @@ Display the references in `semantic-symref-results-mode'." (interactive (list (semantic-tag-name (semantic-complete-read-tag-project "Symrefs for: ")))) (semantic-fetch-tags) - (let ((res nil) - ) - ;; Gather results and tags - (message "Gathering References...") - (setq res (semantic-symref-find-references-by-name sym)) + ;; Gather results and tags + (message "Gathering References...") + (let ((res (semantic-symref-find-references-by-name sym))) (semantic-symref-produce-list-on-results res sym))) ;;;###autoload @@ -90,28 +88,11 @@ Display the references in`semantic-symref-results-mode'." (interactive (list (semantic-tag-name (semantic-complete-read-tag-buffer-deep "Symrefs for: ")))) (semantic-fetch-tags) - (let ((res nil) - ) - ;; Gather results and tags - (message "Gathering References...") - (setq res (semantic-symref-find-text sym)) + (message "Gathering References...") + ;; Gather results and tags + (let ((res (semantic-symref-find-text sym))) (semantic-symref-produce-list-on-results res sym))) - -(defun semantic-symref-produce-list-on-results (res str) - "Produce a symref list mode buffer on the results RES." - (when (not res) (error "No references found")) - (semantic-symref-result-get-tags res t) - (message "Gathering References...done") - ;; Build a references buffer. - (let ((buff (get-buffer-create - (format "*Symref %s" str))) - ) - (switch-to-buffer-other-window buff) - (set-buffer buff) - (semantic-symref-results-mode res)) - ) - ;;; RESULTS MODE ;; (defgroup semantic-symref-results-mode nil @@ -178,36 +159,35 @@ Display the references in`semantic-symref-results-mode'." (defcustom semantic-symref-auto-expand-results nil "Non-nil to expand symref results on buffer creation." - :group 'semantic-symref-results-mode :type 'boolean) (defcustom semantic-symref-results-mode-hook nil "Hook run when `semantic-symref-results-mode' starts." - :group 'semantic-symref-results-mode :type 'hook) (defvar semantic-symref-current-results nil "The current results in a results mode buffer.") -(defun semantic-symref-results-mode (results) - ;; FIXME: Use define-derived-mode. - "Major-mode for displaying Semantic Symbol Reference RESULTS. -RESULTS is an object of class `semantic-symref-results'." - (interactive) - (kill-all-local-variables) - (setq major-mode 'semantic-symref-results-mode - mode-name "Symref" - ) - (use-local-map semantic-symref-results-mode-map) - (set (make-local-variable 'semantic-symref-current-results) - results) - (semantic-symref-results-dump results) - (goto-char (point-min)) +(defun semantic-symref-produce-list-on-results (res str) + "Produce a symref list mode buffer on the results RES." + (when (not res) (error "No references found")) + (semantic-symref-result-get-tags res t) + (message "Gathering References...done") + ;; Build a references buffer. + (let ((buff (get-buffer-create (format "*Symref %s" str)))) + (switch-to-buffer-other-window buff) + (set-buffer buff) + (semantic-symref-results-mode) + (set (make-local-variable 'semantic-symref-current-results) res) + (semantic-symref-results-dump res) + (goto-char (point-min)))) + +(define-derived-mode semantic-symref-results-mode nil "Symref" + "Major-mode for displaying Semantic Symbol Reference results." (buffer-disable-undo) + ;; FIXME: Why bother turning off font-lock? (set (make-local-variable 'font-lock-global-modes) nil) - (font-lock-mode -1) - (run-mode-hooks 'semantic-symref-results-mode-hook) - ) + (font-lock-mode -1)) (defun semantic-symref-hide-buffer () "Hide buffer with semantic-symref results." @@ -215,9 +195,8 @@ RESULTS is an object of class `semantic-symref-results'." (bury-buffer)) (defcustom semantic-symref-results-summary-function 'semantic-format-tag-prototype - "*Function to use when creating items in Imenu. + "Function to use when creating items in Imenu. Some useful functions are found in `semantic-format-tag-functions'." - :group 'semantic-symref-results-mode :type semantic-format-tag-custom-list) (defun semantic-symref-results-dump (results) diff --git a/lisp/cedet/srecode/srt-mode.el b/lisp/cedet/srecode/srt-mode.el index 2f43dc3872b..f6730fbd65f 100644 --- a/lisp/cedet/srecode/srt-mode.el +++ b/lisp/cedet/srecode/srt-mode.el @@ -188,6 +188,7 @@ we can tell font lock about them.") ;;;###autoload (define-derived-mode srecode-template-mode fundamental-mode "SRecode" + ;; FIXME: Shouldn't it derive from prog-mode? "Major-mode for writing SRecode macros." (set (make-local-variable 'comment-start) ";;") (set (make-local-variable 'comment-end) "") From 96dbf5a8ae33d9523212357bcead7b5fa2473697 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 17 Sep 2013 11:52:31 -0400 Subject: [PATCH 194/321] * lisp/emacs-lisp/package.el (package-generate-autoloads): Remove `require' which should not be needed any more. (package-menu-refresh, package-menu-describe-package): Use user-error. --- lisp/ChangeLog | 4 ++++ lisp/emacs-lisp/package.el | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 059bb0218f3..b866f4f93aa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2013-09-17 Stefan Monnier + * emacs-lisp/package.el (package-generate-autoloads): Remove `require' + which should not be needed any more. + (package-menu-refresh, package-menu-describe-package): Use user-error. + * eshell/esh-cmd.el (eshell-post-rewrite-command-function): New var. (eshell-post-rewrite-command-hook): Make obsolete. (eshell-parse-command): Simplify. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 7799ee23d62..77496bad441 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -597,7 +597,6 @@ EXTRA-PROPERTIES is currently unused." (defvar version-control) (defun package-generate-autoloads (name pkg-dir) - (require 'autoload) ;Load before we let-bind generated-autoload-file! (let* ((auto-name (format "%s-autoloads.el" name)) ;;(ignore-name (concat name "-pkg.el")) (generated-autoload-file (expand-file-name auto-name pkg-dir)) @@ -1523,7 +1522,7 @@ This fetches the contents of each archive specified in `package-archives', and then refreshes the package menu." (interactive) (unless (derived-mode-p 'package-menu-mode) - (error "The current buffer is not a Package Menu")) + (user-error "The current buffer is not a Package Menu")) (package-refresh-contents) (package-menu--generate t t)) @@ -1535,7 +1534,7 @@ If optional arg BUTTON is non-nil, describe its associated package." (tabulated-list-get-id)))) (if pkg-desc (describe-package pkg-desc) - (error "No package here")))) + (user-error "No package here")))) ;; fixme numeric argument (defun package-menu-mark-delete (&optional _num) From 0791d107eddb1ff08b321b204427fd3599e0b2cb Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 17 Sep 2013 19:57:45 +0400 Subject: [PATCH 195/321] * w32term.c (w32_read_socket): Avoid temporary variables in a call to x_real_positions. * xterm.c (handle_one_xevent): Likewise. --- src/ChangeLog | 6 ++++++ src/w32term.c | 14 ++------------ src/xterm.c | 9 ++------- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e900cfb1bb1..4223573a6ff 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-09-17 Dmitry Antipov + + * w32term.c (w32_read_socket): Avoid temporary + variables in a call to x_real_positions. + * xterm.c (handle_one_xevent): Likewise. + 2013-09-17 Dmitry Antipov * frame.h (x_set_bitmap_icon) [!HAVE_NS]: New function. diff --git a/src/w32term.c b/src/w32term.c index 59fdf130592..331a86ef7d7 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -4687,13 +4687,7 @@ w32_read_socket (struct terminal *terminal, f = x_window_to_frame (dpyinfo, msg.msg.hwnd); if (f && !FRAME_ICONIFIED_P (f)) - { - int x, y; - - x_real_positions (f, &x, &y); - f->left_pos = x; - f->top_pos = y; - } + x_real_positions (f, &f->left_pos, &f->top_pos); check_visibility = 1; break; @@ -4756,16 +4750,12 @@ w32_read_socket (struct terminal *terminal, if (iconified) { - int x, y; - /* Reset top and left positions of the Window here since Windows sends a WM_MOVE message BEFORE telling us the Window is minimized when the Window is iconified, with 3000,3000 as the co-ords. */ - x_real_positions (f, &x, &y); - f->left_pos = x; - f->top_pos = y; + x_real_positions (f, &f->left_pos, &f->top_pos); inev.kind = DEICONIFY_EVENT; XSETFRAME (inev.frame_or_window, f); diff --git a/src/xterm.c b/src/xterm.c index fadcdbfea98..08a360fd52c 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -6129,11 +6129,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, f = x_top_window_to_frame (dpyinfo, event->xreparent.window); if (f) { - int x, y; f->output_data.x->parent_desc = event->xreparent.parent; - x_real_positions (f, &x, &y); - f->left_pos = x; - f->top_pos = y; + x_real_positions (f, &f->left_pos, &f->top_pos); /* Perhaps reparented due to a WM restart. Reset this. */ FRAME_DISPLAY_INFO (f)->wm_type = X_WMTYPE_UNKNOWN; @@ -6827,9 +6824,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, if (FRAME_GTK_OUTER_WIDGET (f) && gtk_widget_get_mapped (FRAME_GTK_OUTER_WIDGET (f))) #endif - { - x_real_positions (f, &f->left_pos, &f->top_pos); - } + x_real_positions (f, &f->left_pos, &f->top_pos); #ifdef HAVE_X_I18N if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMStatusArea)) From c2e9e9ef6fdd6be93ebc5a143aea6a7716fe8ed7 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 17 Sep 2013 13:22:32 -0400 Subject: [PATCH 196/321] * lisp/gnus/gnus-agent.el (gnus-category-mode): Use define-derived-mode. (gnus-agent-mode): Use derived-mode-p. (gnus-agent-rename-group, gnus-agent-delete-group): Don't bind gnus-command-method and *-command-method to nil, but bind gnus-command-method to *-command-method instead! (gnus-agent-fetch-articles): Remove unused var `id'. (gnus-agent-fetch-headers): Remove unused arg `force'. (gnus-agent-braid-nov): Remove unused arg `group'. Adjust callers. (gnus-agent-save-alist, gnus-agent-save-local): Remove unused `item'. (gnus-agent-short-article, gnus-agent-long-article) (gnus-agent-low-score, gnus-agent-high-score): Move declaration before first use. (gnus-agent-fetch-group-1): Remove unused vars `arts', `category', `score-param'. (gnus-tmp-name, gnus-tmp-groups): Defvar them. (gnus-get-predicate): Push in front of the cache, rather than end. (gnus-agent-expire-current-dirs, gnus-agent-expire-stats): Defvar them. (gnus-agent-expire-group-1): Use push. Don't abuse dyn-binding. (gnus-agent-expire-unagentized-dirs): Don't rebind gnus-agent-expire-current-dirs since the defvar silences the warning. (gnus-agent-retrieve-headers): Remove unused var `cached-articles'. (gnus-agent-regenerate-group): Remove unused vars `point' and `dl'. (gnus-agent-regenerate): Simplify interactive spec and doc. * lisp/gnus/gnus-eform.el (gnus-edit-form-mode): Use define-derived-mode. * lisp/gnus/gnus-salt.el (gnus-tree-mode): Use define-derived-mode. Use save-current-buffer. (gnus-tree-mode-map): Initialize in the declaration. (gnus-pick-mouse-pick-region): Remove unused var `fun'. (scroll-in-place): Defvar it. (gnus-tmp-*): Defvar them. (gnus-get-tree-buffer): Use derived-mode-p. (gnus--let-eval): New macro. (gnus-tree-highlight-node): Use it to avoid dynamic binding of non-prefixed variables. (gnus-tree-open, gnus-tree-close): Remove unused arg `group'. * lisp/gnus/gnus-sum.el (gnus-summary-highlight): Remove `below' from the list of vars since it doesn't seem to be available. (gnus-set-global-variables, gnus-summary-read-group-1) (gnus-select-newsgroup, gnus-handle-ephemeral-exit) (gnus-summary-display-article, gnus-summary-select-article) (gnus-summary-next-article, gnus-offer-save-summaries) (gnus-summary-generic-mark): Use derived-mode-p. (gnus-summary-read-group-1, gnus-summary-exit) (gnus-summary-exit-no-update, gnus-kill-or-deaden-summary): Adjust calls to gnus-tree-close and gnus-tree-open. --- lisp/gnus/ChangeLog | 51 +++++++++++++ lisp/gnus/gnus-agent.el | 160 ++++++++++++++++++---------------------- lisp/gnus/gnus-eform.el | 10 +-- lisp/gnus/gnus-salt.el | 104 ++++++++++++++++---------- lisp/gnus/gnus-sum.el | 36 ++++----- 5 files changed, 204 insertions(+), 157 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index f9c0c7b287e..d673a18cb1d 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,54 @@ +2013-09-17 Stefan Monnier + + * gnus-salt.el (gnus-tree-mode): Use define-derived-mode. + Use save-current-buffer. + (gnus-tree-mode-map): Initialize in the declaration. + (gnus-pick-mouse-pick-region): Remove unused var `fun'. + (scroll-in-place): Defvar it. + (gnus-tmp-*): Defvar them. + (gnus-get-tree-buffer): Use derived-mode-p. + (gnus--let-eval): New macro. + (gnus-tree-highlight-node): Use it to avoid dynamic binding of + non-prefixed variables. + (gnus-tree-open, gnus-tree-close): Remove unused arg `group'. + + * gnus-sum.el (gnus-summary-highlight): Remove `below' from the list of + vars since it doesn't seem to be available. + (gnus-set-global-variables, gnus-summary-read-group-1) + (gnus-select-newsgroup, gnus-handle-ephemeral-exit) + (gnus-summary-display-article, gnus-summary-select-article) + (gnus-summary-next-article, gnus-offer-save-summaries) + (gnus-summary-generic-mark): Use derived-mode-p. + (gnus-summary-read-group-1, gnus-summary-exit) + (gnus-summary-exit-no-update, gnus-kill-or-deaden-summary): + Adjust calls to gnus-tree-close and gnus-tree-open. + + * gnus-eform.el (gnus-edit-form-mode): Use define-derived-mode. + + * gnus-agent.el (gnus-category-mode): Use define-derived-mode. + (gnus-agent-mode): Use derived-mode-p. + (gnus-agent-rename-group, gnus-agent-delete-group): Don't bind + gnus-command-method and *-command-method to nil, but bind + gnus-command-method to *-command-method instead! + (gnus-agent-fetch-articles): Remove unused var `id'. + (gnus-agent-fetch-headers): Remove unused arg `force'. + (gnus-agent-braid-nov): Remove unused arg `group'. Adjust callers. + (gnus-agent-save-alist, gnus-agent-save-local): Remove unused `item'. + (gnus-agent-short-article, gnus-agent-long-article) + (gnus-agent-low-score, gnus-agent-high-score): Move declaration before + first use. + (gnus-agent-fetch-group-1): Remove unused vars `arts', `category', + `score-param'. + (gnus-tmp-name, gnus-tmp-groups): Defvar them. + (gnus-get-predicate): Push in front of the cache, rather than end. + (gnus-agent-expire-current-dirs, gnus-agent-expire-stats): Defvar them. + (gnus-agent-expire-group-1): Use push. Don't abuse dyn-binding. + (gnus-agent-expire-unagentized-dirs): Don't rebind + gnus-agent-expire-current-dirs since the defvar silences the warning. + (gnus-agent-retrieve-headers): Remove unused var `cached-articles'. + (gnus-agent-regenerate-group): Remove unused vars `point' and `dl'. + (gnus-agent-regenerate): Simplify interactive spec and doc. + 2013-09-17 Katsumi Yamaoka * gnus-int.el (gnus-open-server): Silence compiler. diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el index 1d0f346e10f..10ee230a814 100644 --- a/lisp/gnus/gnus-agent.el +++ b/lisp/gnus/gnus-agent.el @@ -492,7 +492,7 @@ manipulated as follows: (push (cons mode (symbol-value (intern (format "gnus-agent-%s-mode-map" buffer)))) minor-mode-map-alist)) - (when (eq major-mode 'gnus-group-mode) + (when (derived-mode-p 'gnus-group-mode) (let ((init-plugged gnus-plugged) (gnus-agent-go-online nil)) ;; g-a-t-p does nothing when gnus-plugged isn't changed. @@ -881,11 +881,11 @@ Depends upon the caller to determine whether group renaming is supported." (let* ((old-command-method (gnus-find-method-for-group old-group)) (old-path (directory-file-name - (let (gnus-command-method old-command-method) + (let ((gnus-command-method old-command-method)) (gnus-agent-group-pathname old-group)))) (new-command-method (gnus-find-method-for-group new-group)) (new-path (directory-file-name - (let (gnus-command-method new-command-method) + (let ((gnus-command-method new-command-method)) (gnus-agent-group-pathname new-group)))) (file-name-coding-system nnmail-pathname-coding-system)) (gnus-rename-file old-path new-path t) @@ -914,19 +914,18 @@ Depends upon the caller to determine whether group deletion is supported." (let* ((command-method (gnus-find-method-for-group group)) (path (directory-file-name - (let (gnus-command-method command-method) + (let ((gnus-command-method command-method)) (gnus-agent-group-pathname group)))) (file-name-coding-system nnmail-pathname-coding-system)) (gnus-delete-directory path) (let* ((real-group (gnus-group-real-name group))) (gnus-agent-save-group-info command-method real-group nil) - - (let ((local (gnus-agent-get-local group - real-group command-method))) - (gnus-agent-set-local group - nil nil - real-group command-method))))) + ;; FIXME: Does gnus-agent-get-local have any useful side-effect? + (gnus-agent-get-local group real-group command-method) + (gnus-agent-set-local group + nil nil + real-group command-method)))) ;;; ;;; Server mode commands @@ -1549,7 +1548,7 @@ downloaded into the agent." (dir (gnus-agent-group-pathname group)) (date (time-to-days (current-time))) (case-fold-search t) - pos crosses id + pos crosses (file-name-coding-system nnmail-pathname-coding-system)) (setcar selected-sets (nreverse (car selected-sets))) @@ -1603,11 +1602,6 @@ downloaded into the agent." (goto-char (match-end 0))) (gnus-agent-crosspost crosses (caar pos) date))) (goto-char (point-min)) - (if (not (re-search-forward - "^Message-ID: *<\\([^>\n]+\\)>" nil t)) - (setq id "No-Message-ID-in-article") - (setq id (buffer-substring - (match-beginning 1) (match-end 1)))) (let ((coding-system-for-write gnus-agent-file-coding-system)) (write-region (point-min) (point-max) @@ -1832,7 +1826,7 @@ variables. Returns the first non-nil value found." . gnus-agent-enable-expiration) (agent-predicate . gnus-agent-predicate))))))) -(defun gnus-agent-fetch-headers (group &optional force) +(defun gnus-agent-fetch-headers (group) "Fetch interesting headers into the agent. The group's overview file will be updated to include the headers while a list of available article numbers will be returned." @@ -1931,7 +1925,7 @@ article numbers will be returned." ;; NOTE: Call g-a-brand-nov even when the file does not ;; exist. As a minimum, it will validate the article ;; numbers already in the buffer. - (gnus-agent-braid-nov group articles file) + (gnus-agent-braid-nov articles file) (let ((coding-system-for-write gnus-agent-file-coding-system)) (gnus-agent-check-overview-buffer) @@ -1980,7 +1974,7 @@ article numbers will be returned." (set-buffer nntp-server-buffer) (insert-buffer-substring gnus-agent-overview-buffer b e)))) -(defun gnus-agent-braid-nov (group articles file) +(defun gnus-agent-braid-nov (articles file) "Merge agent overview data with given file. Takes unvalidated headers for ARTICLES from `gnus-agent-overview-buffer' and validated headers from the given @@ -2154,7 +2148,7 @@ doesn't exist, to valid the overview buffer." (let* ((file-name-coding-system nnmail-pathname-coding-system) (prev (cons nil gnus-agent-article-alist)) (all prev) - print-level print-length item article) + print-level print-length article) (while (setq article (pop articles)) (while (and (cdr prev) (< (caadr prev) article)) @@ -2288,7 +2282,7 @@ modified) original contents, they are first saved to their own file." (file-name-coding-system nnmail-pathname-coding-system)) (with-temp-file dest (let ((gnus-command-method (symbol-value (intern "+method" my-obarray))) - print-level print-length item article + print-level print-length (standard-output (current-buffer))) (mapatoms (lambda (symbol) (cond ((not (boundp symbol)) @@ -2411,6 +2405,18 @@ modified) original contents, they are first saved to their own file." (gnus-run-hooks 'gnus-agent-fetched-hook) (gnus-message 6 "Finished fetching articles into the Gnus agent")))) +(defvar gnus-agent-short-article 500 + "Articles that have fewer lines than this are short.") + +(defvar gnus-agent-long-article 1000 + "Articles that have more lines than this are long.") + +(defvar gnus-agent-low-score 0 + "Articles that have a score lower than this have a low score.") + +(defvar gnus-agent-high-score 0 + "Articles that have a score higher than this have a high score.") + (defun gnus-agent-fetch-group-1 (group method) "Fetch GROUP." (let ((gnus-command-method method) @@ -2427,8 +2433,8 @@ modified) original contents, they are first saved to their own file." gnus-headers gnus-score - articles arts - category predicate info marks score-param + articles + predicate info marks ) (unless (gnus-check-group group) (error "Can't open server for %s" group)) @@ -2471,9 +2477,6 @@ modified) original contents, they are first saved to their own file." ;; timeout reason. If so, recreate it. (gnus-agent-create-buffer) - ;; Figure out how to select articles in this group - (setq category (gnus-group-category group)) - (setq predicate (gnus-get-predicate (gnus-agent-find-parameter group 'agent-predicate))) @@ -2624,23 +2627,14 @@ General format specifiers can also be used. See Info node (defvar gnus-agent-predicate 'false "The selection predicate used when no other source is available.") -(defvar gnus-agent-short-article 500 - "Articles that have fewer lines than this are short.") - -(defvar gnus-agent-long-article 1000 - "Articles that have more lines than this are long.") - -(defvar gnus-agent-low-score 0 - "Articles that have a score lower than this have a low score.") - -(defvar gnus-agent-high-score 0 - "Articles that have a score higher than this have a high score.") - ;;; Internal variables. (defvar gnus-category-buffer "*Agent Category*") +(defvar gnus-tmp-name) +(defvar gnus-tmp-groups) + (defvar gnus-category-line-format-alist `((?c gnus-tmp-name ?s) (?g gnus-tmp-groups ?d))) @@ -2692,7 +2686,7 @@ General format specifiers can also be used. See Info node (gnus-run-hooks 'gnus-category-menu-hook))) -(defun gnus-category-mode () +(define-derived-mode gnus-category-mode fundamental-mode "Category" "Major mode for listing and editing agent categories. All normal editing commands are switched off. @@ -2703,20 +2697,14 @@ For more in-depth information on this mode, read the manual The following commands are available: \\{gnus-category-mode-map}" - (interactive) (when (gnus-visual-p 'category-menu 'menu) (gnus-category-make-menu-bar)) - (kill-all-local-variables) (gnus-simplify-mode-line) - (setq major-mode 'gnus-category-mode) - (setq mode-name "Category") (gnus-set-default-directory) (setq mode-line-process nil) - (use-local-map gnus-category-mode-map) (buffer-disable-undo) (setq truncate-lines t) - (setq buffer-read-only t) - (gnus-run-mode-hooks 'gnus-category-mode-hook)) + (setq buffer-read-only t)) (defalias 'gnus-category-position-point 'gnus-goto-colon) @@ -2992,9 +2980,7 @@ The following commands are available: "Return the function implementing PREDICATE." (or (cdr (assoc predicate gnus-category-predicate-cache)) (let ((func (gnus-category-make-function predicate))) - (setq gnus-category-predicate-cache - (nconc gnus-category-predicate-cache - (list (cons predicate func)))) + (push (cons predicate func) gnus-category-predicate-cache) func))) (defun gnus-predicate-implies-unread (predicate) @@ -3066,6 +3052,9 @@ articles." (or (gnus-gethash group gnus-category-group-cache) (assq 'default gnus-category-alist))) +(defvar gnus-agent-expire-current-dirs) +(defvar gnus-agent-expire-stats) + (defun gnus-agent-expire-group (group &optional articles force) "Expire all old articles in GROUP. If you want to force expiring of certain articles, this function can @@ -3080,7 +3069,7 @@ FORCE is equivalent to setting the expiration predicates to true." (if (not group) (gnus-agent-expire articles group force) - (let ( ;; Bind gnus-agent-expire-stats to enable tracking of + (let (;; Bind gnus-agent-expire-stats to enable tracking of ;; expiration statistics of this single group (gnus-agent-expire-stats (list 0 0 0.0))) (if (or (not (eq articles t)) @@ -3117,9 +3106,7 @@ FORCE is equivalent to setting the expiration predicates to true." (gnus-agent-with-refreshed-group group (when (boundp 'gnus-agent-expire-current-dirs) - (set 'gnus-agent-expire-current-dirs - (cons dir - (symbol-value 'gnus-agent-expire-current-dirs)))) + (push dir gnus-agent-expire-current-dirs)) (if (and (not force) (eq 'DISABLE (gnus-agent-find-parameter group @@ -3263,24 +3250,24 @@ line." (point) nov-file))) ;; only problem is that much of it is spread across multiple ;; entries. Sort then MERGE!! (gnus-message 7 "gnus-agent-expire: Sorting entries... ") - ;; If two entries have the same article-number then sort by - ;; ascending keep_flag. - (let ((special 0) - (marked 1) - (unread 2)) - (setq dlist - (sort dlist - (lambda (a b) - (cond ((< (nth 0 a) (nth 0 b)) - t) - ((> (nth 0 a) (nth 0 b)) - nil) - (t - (let ((a (or (symbol-value (nth 2 a)) - 3)) - (b (or (symbol-value (nth 2 b)) - 3))) - (<= a b)))))))) + (setq dlist + (sort dlist + (lambda (a b) + (cond ((< (nth 0 a) (nth 0 b)) + t) + ((> (nth 0 a) (nth 0 b)) + nil) + (t + ;; If two entries have the same article-number + ;; then sort by ascending keep_flag. + (let* ((kf-score '((special . 0) + (marked . 1) + (unread . 2))) + (a (or (cdr (assq (nth 2 a) kf-score)) + 3)) + (b (or (cdr (assq (nth 2 b) kf-score)) + 3))) + (<= a b))))))) (gnus-message 7 "gnus-agent-expire: Sorting entries... Done") (gnus-message 7 "gnus-agent-expire: Merging entries... ") (let ((dlist dlist)) @@ -3474,7 +3461,7 @@ expiration tests failed." decoded article-number) (gnus-summary-update-info)))) (when (boundp 'gnus-agent-expire-stats) - (let ((stats (symbol-value 'gnus-agent-expire-stats))) + (let ((stats gnus-agent-expire-stats)) (incf (nth 2 stats) bytes-freed) (incf (nth 1 stats) files-deleted) (incf (nth 0 stats) nov-entries-deleted))) @@ -3534,7 +3521,7 @@ articles in every agentized group? ")) (defun gnus-agent-expire-done-message () (if (and (> gnus-verbose 4) (boundp 'gnus-agent-expire-stats)) - (let* ((stats (symbol-value 'gnus-agent-expire-stats)) + (let* ((stats gnus-agent-expire-stats) (size (nth 2 stats)) (units '(B KB MB GB))) (while (and (> size 1024.0) @@ -3553,16 +3540,10 @@ articles in every agentized group? ")) (when (and gnus-agent-expire-unagentized-dirs (boundp 'gnus-agent-expire-current-dirs)) (let* ((keep (gnus-make-hashtable)) - ;; Formally bind gnus-agent-expire-current-dirs so that the - ;; compiler will not complain about free references. - (gnus-agent-expire-current-dirs - (symbol-value 'gnus-agent-expire-current-dirs)) - dir (file-name-coding-system nnmail-pathname-coding-system)) (gnus-sethash gnus-agent-directory t keep) - (while gnus-agent-expire-current-dirs - (setq dir (pop gnus-agent-expire-current-dirs)) + (dolist (dir gnus-agent-expire-current-dirs) (when (and (stringp dir) (file-directory-p dir)) (while (not (gnus-gethash dir keep)) @@ -3715,7 +3696,7 @@ has been fetched." (let ((gnus-decode-encoded-word-function 'identity) (gnus-decode-encoded-address-function 'identity) (file (gnus-agent-article-name ".overview" group)) - cached-articles uncached-articles + uncached-articles (file-name-coding-system nnmail-pathname-coding-system)) (gnus-make-directory (nnheader-translate-file-chars (file-name-directory file) t)) @@ -3812,7 +3793,7 @@ has been fetched." ;; Merge the temp buffer with the known headers (found on ;; disk in FILE) into the nntp-server-buffer (when uncached-articles - (gnus-agent-braid-nov group uncached-articles file)) + (gnus-agent-braid-nov uncached-articles file)) ;; Save the new set of known headers to FILE (set-buffer nntp-server-buffer) @@ -3907,7 +3888,6 @@ If REREAD is not nil, downloaded articles are marked as unread." (gnus-find-method-for-group group))) (file (gnus-agent-article-name ".overview" group)) (dir (file-name-directory file)) - point (file-name-coding-system nnmail-pathname-coding-system) (downloaded (if (file-exists-p dir) (sort (delq nil (mapcar (lambda (name) @@ -3916,7 +3896,7 @@ If REREAD is not nil, downloaded articles are marked as unread." (directory-files dir nil "^[0-9]+$" t))) '>) (progn (gnus-make-directory dir) nil))) - dl nov-arts + nov-arts alist header regenerated) @@ -4099,16 +4079,16 @@ If REREAD is not nil, downloaded articles are marked as unread." regenerated))) ;;;###autoload -(defun gnus-agent-regenerate (&optional clean reread) +(defun gnus-agent-regenerate (&optional _clean reread) "Regenerate all agent covered files. -If CLEAN, obsolete (ignore)." - (interactive "P") +CLEAN is obsolete and ignored." + (interactive) (let (regenerated) (gnus-message 4 "Regenerating Gnus agent files...") (dolist (gnus-command-method (gnus-agent-covered-methods)) - (dolist (group (gnus-groups-from-server gnus-command-method)) - (setq regenerated (or (gnus-agent-regenerate-group group reread) - regenerated)))) + (dolist (group (gnus-groups-from-server gnus-command-method)) + (setq regenerated (or (gnus-agent-regenerate-group group reread) + regenerated)))) (gnus-message 4 "Regenerating Gnus agent files...done") regenerated)) diff --git a/lisp/gnus/gnus-eform.el b/lisp/gnus/gnus-eform.el index 6790803305a..00e27876088 100644 --- a/lisp/gnus/gnus-eform.el +++ b/lisp/gnus/gnus-eform.el @@ -67,21 +67,15 @@ ["Exit" gnus-edit-form-exit t])) (gnus-run-hooks 'gnus-edit-form-menu-hook))) -(defun gnus-edit-form-mode () +(define-derived-mode gnus-edit-form-mode fundamental-mode "Edit Form" "Major mode for editing forms. It is a slightly enhanced emacs-lisp-mode. \\{gnus-edit-form-mode-map}" - (interactive) (when (gnus-visual-p 'group-menu 'menu) (gnus-edit-form-make-menu-bar)) - (kill-all-local-variables) - (setq major-mode 'gnus-edit-form-mode) - (setq mode-name "Edit Form") - (use-local-map gnus-edit-form-mode-map) (make-local-variable 'gnus-edit-form-done-function) - (make-local-variable 'gnus-prev-winconf) - (gnus-run-mode-hooks 'gnus-edit-form-mode-hook)) + (make-local-variable 'gnus-prev-winconf)) (defun gnus-edit-form (form documentation exit-func &optional layout) "Edit FORM in a new buffer. diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el index 6b8e105e6b8..77fe0d3bb14 100644 --- a/lisp/gnus/gnus-salt.el +++ b/lisp/gnus/gnus-salt.el @@ -292,22 +292,25 @@ This must be bound to a button-down mouse event." (mouse-scroll-subr start-window (1+ (- mouse-row bottom))))))))))) (when (consp event) - (let ((fun (key-binding (vector (car event))))) + (let (;; (fun (key-binding (vector (car event)))) + ) ;; Run the binding of the terminating up-event, if possible. - ;; In the case of a multiple click, it gives the wrong results, + ;; In the case of a multiple click, it gives the wrong results, ;; because it would fail to set up a region. (when nil - ;; (and (= (mod mouse-selection-click-count 3) 0) (fboundp fun)) - ;; In this case, we can just let the up-event execute normally. + ;; (and (= (mod mouse-selection-click-count 3) 0) (fboundp fun)) + ;; In this case, we can just let the up-event execute normally. (let ((end (event-end event))) ;; Set the position in the event before we replay it, ;; because otherwise it may have a position in the wrong ;; buffer. (setcar (cdr end) end-of-range) ;; Delete the overlay before calling the function, - ;; because delete-overlay increases buffer-modified-tick. + ;; because delete-overlay increases buffer-modified-tick. (push event unread-command-events)))))))) +(defvar scroll-in-place) + (defun gnus-pick-next-page () "Go to the next page. If at the end of the buffer, start reading articles." (interactive) @@ -356,7 +359,7 @@ This must be bound to a button-down mouse event." (when (gnus-visual-p 'binary-menu 'menu) (gnus-binary-make-menu-bar))))) -(defun gnus-binary-display-article (article &optional all-header) +(defun gnus-binary-display-article (article &optional _all-header) "Run ARTICLE through the binary decode functions." (when (gnus-summary-goto-subject article) (let ((gnus-view-pseudos (or gnus-view-pseudos 'automatic))) @@ -423,6 +426,13 @@ Two predefined functions are available: ;;; Internal variables. +(defvar gnus-tmp-name) +(defvar gnus-tmp-from) +(defvar gnus-tmp-number) +(defvar gnus-tmp-open-bracket) +(defvar gnus-tmp-close-bracket) +(defvar gnus-tmp-subject) + (defvar gnus-tree-line-format-alist `((?n gnus-tmp-name ?s) (?f gnus-tmp-from ?s) @@ -442,24 +452,24 @@ Two predefined functions are available: (defvar gnus-tree-displayed-thread nil) (defvar gnus-tree-inhibit nil) -(defvar gnus-tree-mode-map nil) +(defvar gnus-tree-mode-map + (let ((map (make-keymap))) + (suppress-keymap map) + (gnus-define-keys + map + "\r" gnus-tree-select-article + gnus-mouse-2 gnus-tree-pick-article + "\C-?" gnus-tree-read-summary-keys + "h" gnus-tree-show-summary + + "\C-c\C-i" gnus-info-find-node) + + (substitute-key-definition + 'undefined 'gnus-tree-read-summary-keys map) + map)) + (put 'gnus-tree-mode 'mode-class 'special) -(unless gnus-tree-mode-map - (setq gnus-tree-mode-map (make-keymap)) - (suppress-keymap gnus-tree-mode-map) - (gnus-define-keys - gnus-tree-mode-map - "\r" gnus-tree-select-article - gnus-mouse-2 gnus-tree-pick-article - "\C-?" gnus-tree-read-summary-keys - "h" gnus-tree-show-summary - - "\C-c\C-i" gnus-info-find-node) - - (substitute-key-definition - 'undefined 'gnus-tree-read-summary-keys gnus-tree-mode-map)) - (defun gnus-tree-make-menu-bar () (unless (boundp 'gnus-tree-menu) (easy-menu-define @@ -467,26 +477,20 @@ Two predefined functions are available: '("Tree" ["Select article" gnus-tree-select-article t])))) -(defun gnus-tree-mode () +(define-derived-mode gnus-tree-mode fundamental-mode "Tree" "Major mode for displaying thread trees." - (interactive) (gnus-set-format 'tree-mode) (gnus-set-format 'tree t) (when (gnus-visual-p 'tree-menu 'menu) (gnus-tree-make-menu-bar)) - (kill-all-local-variables) (gnus-simplify-mode-line) - (setq mode-name "Tree") - (setq major-mode 'gnus-tree-mode) - (use-local-map gnus-tree-mode-map) (buffer-disable-undo) (setq buffer-read-only t) (setq truncate-lines t) - (save-excursion + (save-current-buffer (gnus-set-work-buffer) (gnus-tree-node-insert (make-mail-header "") nil) - (setq gnus-tree-node-length (1- (point)))) - (gnus-run-mode-hooks 'gnus-tree-mode-hook)) + (setq gnus-tree-node-length (1- (point))))) (defun gnus-tree-read-summary-keys (&optional arg) "Read a summary buffer key sequence and execute it." @@ -562,7 +566,7 @@ Two predefined functions are available: (defun gnus-get-tree-buffer () "Return the tree buffer properly initialized." (with-current-buffer (gnus-get-buffer-create gnus-tree-buffer) - (unless (eq major-mode 'gnus-tree-mode) + (unless (derived-mode-p 'gnus-tree-mode) (gnus-tree-mode)) (current-buffer))) @@ -571,7 +575,7 @@ Two predefined functions are available: (not (one-window-p))) (let ((windows 0) tot-win-height) - (walk-windows (lambda (window) (incf windows))) + (walk-windows (lambda (_window) (incf windows))) (setq tot-win-height (- (frame-height) (* window-min-height (1- windows)) @@ -642,23 +646,41 @@ Two predefined functions are available: (when (or t (gnus-visual-p 'tree-highlight 'highlight)) (gnus-tree-highlight-node gnus-tmp-number beg end)))) +(defmacro gnus--let-eval (bindings evalsym &rest body) + "Build an environment in which to evaluate expressions. +BINDINGS is a `let'-style list of bindings to use for the environment. +EVALSYM is then bound in BODY to a function that takes a sexp and evaluates +it in the environment specified by BINDINGS." + (declare (indent 2) (debug ((&rest (sym form)) sym body))) + (if (ignore-errors (let ((x 3)) (eq (eval '(- x 1) '((x . 4))) x))) + ;; Use lexical vars if possible. + `(let* ((env (list ,@(mapcar (lambda (binding) + `(cons ',(car binding) ,(cadr binding))) + bindings))) + (,evalsym (lambda (exp) (eval exp env)))) + ,@body) + `(let (,@bindings (,evalsym #'eval)) ,@body))) + (defun gnus-tree-highlight-node (article beg end) "Highlight current line according to `gnus-summary-highlight'." (let ((list gnus-summary-highlight) face) (with-current-buffer gnus-summary-buffer - (let* ((score (or (cdr (assq article gnus-newsgroup-scored)) + (let ((uncached (memq article gnus-newsgroup-undownloaded))) + (gnus--let-eval + ((score (or (cdr (assq article gnus-newsgroup-scored)) gnus-summary-default-score 0)) (default gnus-summary-default-score) (default-high gnus-summary-default-high-score) (default-low gnus-summary-default-low-score) - (uncached (memq article gnus-newsgroup-undownloaded)) + (uncached uncached) (downloaded (not uncached)) (mark (or (gnus-summary-article-mark article) gnus-unread-mark))) - ;; Eval the cars of the lists until we find a match. - (while (and list - (not (eval (caar list)))) - (setq list (cdr list))))) + evalfun + ;; Eval the cars of the lists until we find a match. + (while (and list + (not (funcall evalfun (caar list)))) + (setq list (cdr list)))))) (unless (eq (setq face (cdar list)) (gnus-get-text-property-excluding-characters-with-faces beg 'face)) (gnus-put-text-property-excluding-characters-with-faces beg end 'face @@ -814,10 +836,10 @@ Two predefined functions are available: (gnus-generate-tree top) (setq gnus-tree-displayed-thread top)))))) -(defun gnus-tree-open (group) +(defun gnus-tree-open () (gnus-get-tree-buffer)) -(defun gnus-tree-close (group) +(defun gnus-tree-close () (gnus-kill-buffer gnus-tree-buffer)) (defun gnus-tree-perhaps-minimize () diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 94f4e703180..61cf7ec5b61 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -1140,7 +1140,6 @@ score: The article's score. default: The default article score. default-high: The default score for high scored articles. default-low: The default score for low scored articles. -below: The score below which articles are automatically marked as read. mark: The article's mark. uncached: Non-nil if the article is uncached." :group 'gnus-summary-visual @@ -3104,6 +3103,7 @@ buffer; read the info pages for more information (`\\[gnus-info-find-node]'). The following commands are available: \\{gnus-summary-mode-map}" + ;; FIXME: Use define-derived-mode. (interactive) (kill-all-local-variables) (let ((gnus-summary-local-variables gnus-newsgroup-variables)) @@ -3542,7 +3542,7 @@ If the setup was successful, non-nil is returned." "Set the global equivalents of the buffer-local variables. They are set to the latest values they had. These reflect the summary buffer that was in action when the last article was fetched." - (when (eq major-mode 'gnus-summary-mode) + (when (derived-mode-p 'gnus-summary-mode) (setq gnus-summary-buffer (current-buffer)) (let ((name gnus-newsgroup-name) (marked gnus-newsgroup-marked) @@ -3990,7 +3990,7 @@ If SELECT-ARTICLES, only select those articles from GROUP." t) ;; We couldn't select this group. ((null did-select) - (when (and (eq major-mode 'gnus-summary-mode) + (when (and (derived-mode-p 'gnus-summary-mode) (not (equal (current-buffer) kill-buffer))) (kill-buffer (current-buffer)) (if (not quit-config) @@ -4009,7 +4009,7 @@ If SELECT-ARTICLES, only select those articles from GROUP." ;; The user did a `C-g' while prompting for number of articles, ;; so we exit this group. ((eq did-select 'quit) - (and (eq major-mode 'gnus-summary-mode) + (and (derived-mode-p 'gnus-summary-mode) (not (equal (current-buffer) kill-buffer)) (kill-buffer (current-buffer))) (when kill-buffer @@ -4052,7 +4052,7 @@ If SELECT-ARTICLES, only select those articles from GROUP." (unless no-display (gnus-summary-prepare)) (when gnus-use-trees - (gnus-tree-open group) + (gnus-tree-open) (setq gnus-summary-highlight-line-function 'gnus-tree-highlight-article)) ;; If the summary buffer is empty, but there are some low-scored @@ -5612,7 +5612,7 @@ If SELECT-ARTICLES, only select those articles from GROUP." (or (and entry (not (eq (car entry) t))) ; Either it's active... (gnus-activate-group group) ; Or we can activate it... (progn ; Or we bug out. - (when (equal major-mode 'gnus-summary-mode) + (when (derived-mode-p 'gnus-summary-mode) (gnus-kill-buffer (current-buffer))) (error "Couldn't activate group %s: %s" @@ -5620,7 +5620,7 @@ If SELECT-ARTICLES, only select those articles from GROUP." (mm-decode-coding-string (gnus-status-message group) charset)))) (unless (gnus-request-group group t) - (when (equal major-mode 'gnus-summary-mode) + (when (derived-mode-p 'gnus-summary-mode) (gnus-kill-buffer (current-buffer))) (error "Couldn't request group %s: %s" (mm-decode-coding-string group charset) @@ -7257,7 +7257,7 @@ If FORCE (the prefix), also save the .newsrc file(s)." (when gnus-suppress-duplicates (gnus-dup-enter-articles)) (when gnus-use-trees - (gnus-tree-close group)) + (gnus-tree-close)) (when gnus-use-cache (gnus-cache-write-active)) ;; Remove entries for this group. @@ -7360,7 +7360,7 @@ If FORCE (the prefix), also save the .newsrc file(s)." (unless gnus-single-article-buffer (setq gnus-article-current nil)) (when gnus-use-trees - (gnus-tree-close group)) + (gnus-tree-close)) (gnus-async-prefetch-remove-group group) (when (get-buffer gnus-article-buffer) (bury-buffer gnus-article-buffer)) @@ -7383,9 +7383,9 @@ The state which existed when entering the ephemeral is reset." (unless (eq (cdr quit-config) 'group) (setq gnus-current-select-method (gnus-find-method-for-group gnus-newsgroup-name))) - (cond ((eq major-mode 'gnus-summary-mode) + (cond ((derived-mode-p 'gnus-summary-mode) (gnus-set-global-variables)) - ((eq major-mode 'gnus-article-mode) + ((derived-mode-p 'gnus-article-mode) (save-current-buffer ;; The `gnus-summary-buffer' variable may point ;; to the old summary buffer when using a single @@ -7400,7 +7400,7 @@ The state which existed when entering the ephemeral is reset." (gnus-configure-windows 'pick 'force) (gnus-configure-windows (cdr quit-config) 'force)) (gnus-configure-windows (cdr quit-config) 'force)) - (when (eq major-mode 'gnus-summary-mode) + (when (derived-mode-p 'gnus-summary-mode) (if (memq gnus-auto-select-on-ephemeral-exit '(next-noselect next-unread-noselect)) (when (zerop (cond ((eq gnus-auto-select-on-ephemeral-exit @@ -7470,7 +7470,7 @@ The state which existed when entering the ephemeral is reset." (when (and gnus-use-trees (gnus-buffer-exists-p buffer)) (with-current-buffer buffer - (gnus-tree-close gnus-newsgroup-name))) + (gnus-tree-close))) (gnus-kill-buffer buffer)) ;; Deaden the buffer. ((gnus-buffer-exists-p buffer) @@ -7699,7 +7699,7 @@ Given a prefix, will force an `article' buffer configuration." "Display ARTICLE in article buffer." (unless (and (gnus-buffer-live-p gnus-article-buffer) (with-current-buffer gnus-article-buffer - (eq major-mode 'gnus-article-mode))) + (derived-mode-p 'gnus-article-mode))) (gnus-article-setup-buffer)) (gnus-set-global-variables) (with-current-buffer gnus-article-buffer @@ -7731,7 +7731,7 @@ non-nil, the article will be re-fetched even if it already present in the article buffer. If PSEUDO is non-nil, pseudo-articles will also be displayed." ;; Make sure we are in the summary buffer to work around bbdb bug. - (unless (eq major-mode 'gnus-summary-mode) + (unless (derived-mode-p 'gnus-summary-mode) (set-buffer gnus-summary-buffer)) (let ((article (or article (gnus-summary-article-number))) (all-headers (not (not all-headers))) ;Must be t or nil. @@ -7783,7 +7783,7 @@ If SUBJECT, only articles with SUBJECT are selected. If BACKWARD, the previous article is selected instead of the next." (interactive "P") ;; Make sure we are in the summary buffer. - (unless (eq major-mode 'gnus-summary-mode) + (unless (derived-mode-p 'gnus-summary-mode) (set-buffer gnus-summary-buffer)) (cond ;; Is there such an article? @@ -12680,7 +12680,7 @@ UNREAD is a sorted list." (string-match "Summary" buffer) (with-current-buffer buffer ;; We check that this is, indeed, a summary buffer. - (and (eq major-mode 'gnus-summary-mode) + (and (derived-mode-p 'gnus-summary-mode) ;; Also make sure this isn't bogus. gnus-newsgroup-prepared ;; Also make sure that this isn't a @@ -12815,7 +12815,7 @@ returned." (defun gnus-summary-generic-mark (n mark move unread) "Mark N articles with MARK." - (unless (eq major-mode 'gnus-summary-mode) + (unless (derived-mode-p 'gnus-summary-mode) (error "This command can only be used in the summary buffer")) (gnus-summary-show-thread) (let ((nummove From 7a806dfb9e99888d2a625afa2a8ed2c154dbbdf0 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 17 Sep 2013 13:47:01 -0400 Subject: [PATCH 197/321] * lisp/play/life.el (life-mode): Use define-derived-mode. Derive from special-mode. (life): Let-bind inhibit-read-only. (life-setup): Avoid `setq'. Use `life-mode'. --- lisp/ChangeLog | 5 ++++ lisp/play/life.el | 61 +++++++++++++++++++++++------------------------ 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b866f4f93aa..404e9bfa8a6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2013-09-17 Stefan Monnier + * play/life.el (life-mode): Use define-derived-mode. Derive from + special-mode. + (life): Let-bind inhibit-read-only. + (life-setup): Avoid `setq'. Use `life-mode'. + * emacs-lisp/package.el (package-generate-autoloads): Remove `require' which should not be needed any more. (package-menu-refresh, package-menu-describe-package): Use user-error. diff --git a/lisp/play/life.el b/lisp/play/life.el index a73f3a58e66..438ff92c402 100644 --- a/lisp/play/life.el +++ b/lisp/play/life.el @@ -122,33 +122,32 @@ generations (this defaults to 1)." (life-setup) (catch 'life-exit (while t - (let ((inhibit-quit t)) + (let ((inhibit-quit t) + (inhibit-read-only t)) (life-display-generation sleeptime) (life-grim-reaper) (life-expand-plane-if-needed) (life-increment-generation))))) -(defalias 'life-mode 'life) -(put 'life-mode 'mode-class 'special) +(define-derived-mode life-mode special-mode "Life" + "Major mode for the buffer of `life'." + (setq-local case-fold-search nil) + (setq-local truncate-lines t) + (setq-local show-trailing-whitespace nil) + (setq-local life-current-generation 0) + (setq-local life-generation-string "0") + (setq-local mode-line-buffer-identification '("Life: generation " + life-generation-string)) + (setq-local fill-column (1- (window-width))) + (setq-local life-window-start 1) + (buffer-disable-undo)) (defun life-setup () - (let (n) - (switch-to-buffer (get-buffer-create "*Life*") t) - (erase-buffer) - (kill-all-local-variables) - (setq case-fold-search nil - mode-name "Life" - major-mode 'life-mode - truncate-lines t - show-trailing-whitespace nil - life-current-generation 0 - life-generation-string "0" - mode-line-buffer-identification '("Life: generation " - life-generation-string) - fill-column (1- (window-width)) - life-window-start 1) - (buffer-disable-undo (current-buffer)) - ;; stuff in the random pattern + (switch-to-buffer (get-buffer-create "*Life*") t) + (erase-buffer) + (life-mode) + ;; stuff in the random pattern + (let ((inhibit-read-only t)) (life-insert-random-pattern) ;; make sure (life-life-char) is used throughout (goto-char (point-min)) @@ -156,18 +155,18 @@ generations (this defaults to 1)." (replace-match (life-life-string) t t)) ;; center the pattern horizontally (goto-char (point-min)) - (setq n (/ (- fill-column (line-end-position)) 2)) - (while (not (eobp)) - (indent-to n) - (forward-line)) + (let ((n (/ (- fill-column (line-end-position)) 2))) + (while (not (eobp)) + (indent-to n) + (forward-line))) ;; center the pattern vertically - (setq n (/ (- (1- (window-height)) - (count-lines (point-min) (point-max))) - 2)) - (goto-char (point-min)) - (newline n) - (goto-char (point-max)) - (newline n) + (let ((n (/ (- (1- (window-height)) + (count-lines (point-min) (point-max))) + 2))) + (goto-char (point-min)) + (newline n) + (goto-char (point-max)) + (newline n)) ;; pad lines out to fill-column (goto-char (point-min)) (while (not (eobp)) From 9c0ad4f7bde140c2d5f5c63df240d34d3f5f3fe6 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 17 Sep 2013 13:48:06 -0400 Subject: [PATCH 198/321] * lisp/help-mode.el (help-mode-finish): Use derived-mode-p. Remove obsolete highlighting. --- lisp/ChangeLog | 3 +++ lisp/help-mode.el | 10 +--------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 404e9bfa8a6..b028f1f67de 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-17 Stefan Monnier + * help-mode.el (help-mode-finish): Use derived-mode-p. + Remove obsolete highlighting. + * play/life.el (life-mode): Use define-derived-mode. Derive from special-mode. (life): Let-bind inhibit-read-only. diff --git a/lisp/help-mode.el b/lisp/help-mode.el index 5553556e03c..ec60d05f1da 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -295,16 +295,8 @@ Commands: ;;;###autoload (defun help-mode-finish () - (when (eq major-mode 'help-mode) + (when (derived-mode-p 'help-mode) (setq buffer-read-only t) - (save-excursion - (goto-char (point-min)) - (let ((inhibit-read-only t)) - (when (re-search-forward "^This [^[:space:]]+ is advised.$" nil t) - (put-text-property (match-beginning 0) - (match-end 0) - 'face 'font-lock-warning-face)))) - (help-make-xrefs (current-buffer)))) ;; Grokking cross-reference information in doc strings and From 2b42da98373fd7c1d1b6ce983985e69789f40171 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 16:27:10 -0400 Subject: [PATCH 199/321] * lisp/simple.el (messages-buffer-mode-map): Unbind "g". --- lisp/ChangeLog | 4 ++++ lisp/simple.el | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b028f1f67de..94987adcfb6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-17 Glenn Morris + + * simple.el (messages-buffer-mode-map): Unbind "g". + 2013-09-17 Stefan Monnier * help-mode.el (help-mode-finish): Use derived-mode-p. diff --git a/lisp/simple.el b/lisp/simple.el index 54630681a68..34774712437 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -7344,6 +7344,12 @@ and setting it to nil." buffer-invisibility-spec) (setq buffer-invisibility-spec nil))) +(defvar messages-buffer-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map special-mode-map) + (define-key map "g" nil) ; nothing to revert + map)) + (define-derived-mode messages-buffer-mode special-mode "Messages" "Major mode used in the \"*Messages*\" buffer.") From 9ab16aab6a9ffa2182b5b9d5b730522d775bf7e1 Mon Sep 17 00:00:00 2001 From: Katsumi Yamaoka Date: Tue, 17 Sep 2013 23:49:48 +0000 Subject: [PATCH 200/321] [Gnus] Silence the byte compiler * gnus-icalendar.el (gnus-icalendar-event--find-attendee) (gnus-icalendar-event-from-ical) (gnus-icalendar-event--build-reply-event-body) (gnus-icalendar-event-reply-from-buffer) (gnus-icalendar-find-org-event-file) (gnus-icalendar-event->gnus-calendar, gnus-icalendar-reply) (gnus-icalendar-mm-inline): Use gmm-labels instead of labels or flet. * mm-util.el (mm-special-display-p): Isolate XEmacs stuff. --- lisp/gnus/ChangeLog | 12 ++++++++++++ lisp/gnus/gnus-icalendar.el | 17 +++++++++-------- lisp/gnus/mm-util.el | 35 +++++++++++++++++++---------------- 3 files changed, 40 insertions(+), 24 deletions(-) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index d673a18cb1d..7805dabc7c8 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,15 @@ +2013-09-17 Katsumi Yamaoka + + * gnus-icalendar.el (gnus-icalendar-event--find-attendee) + (gnus-icalendar-event-from-ical) + (gnus-icalendar-event--build-reply-event-body) + (gnus-icalendar-event-reply-from-buffer) + (gnus-icalendar-find-org-event-file) + (gnus-icalendar-event->gnus-calendar, gnus-icalendar-reply) + (gnus-icalendar-mm-inline): Use gmm-labels instead of labels or flet. + + * mm-util.el (mm-special-display-p): Isolate XEmacs stuff. + 2013-09-17 Stefan Monnier * gnus-salt.el (gnus-tree-mode): Use define-derived-mode. diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el index e4e1ec29ae9..969c868b564 100644 --- a/lisp/gnus/gnus-icalendar.el +++ b/lisp/gnus/gnus-icalendar.el @@ -35,6 +35,7 @@ (require 'icalendar) (require 'eieio) +(require 'gmm-utils) (require 'mm-decode) (require 'gnus-sum) @@ -149,7 +150,7 @@ (defun gnus-icalendar-event--find-attendee (ical name-or-email) (let* ((event (car (icalendar--all-events ical))) (event-props (caddr event))) - (labels ((attendee-name (att) (plist-get (cadr att) 'CN)) + (gmm-labels ((attendee-name (att) (plist-get (cadr att) 'CN)) (attendee-email (att) (replace-regexp-in-string "^.*MAILTO:" "" (caddr att))) (attendee-prop-matches-p (prop) @@ -189,7 +190,7 @@ ((string= method "REPLY") 'gnus-icalendar-event-reply) (t 'gnus-icalendar-event)))) - (labels ((map-property (prop) + (gmm-labels ((map-property (prop) (let ((value (icalendar--get-event-property event prop))) (when value ;; ugly, but cannot get @@ -233,7 +234,7 @@ status will be retrieved from the first matching attendee record." (let ((summary-status (capitalize (symbol-name status))) (attendee-status (upcase (symbol-name status))) reply-event-lines) - (labels ((update-summary (line) + (gmm-labels ((update-summary (line) (if (string-match "^[^:]+:" line) (replace-match (format "\\&%s: " summary-status) t nil line) line)) @@ -280,7 +281,7 @@ status will be retrieved from the first matching attendee record." The reply will have STATUS (`accepted', `tentative' or `declined'). The reply will be composed for attendees matching any entry on the IDENTITIES list." - (flet ((extract-block (blockname) + (gmm-labels ((extract-block (blockname) (save-excursion (let ((block-start-re (format "^BEGIN:%s" blockname)) (block-end-re (format "^END:%s" blockname)) @@ -419,7 +420,7 @@ the optional ORG-FILE argument is specified, only that one file is searched." (let ((uid (gnus-icalendar-event:uid event)) (files (or org-file (org-agenda-files t 'ifmode)))) - (flet + (gmm-labels ((find-event-in (file) (org-check-agenda-file file) (with-current-buffer (find-file-noselect file) @@ -596,7 +597,7 @@ is searched." ;; TODO: make the template customizable (defmethod gnus-icalendar-event->gnus-calendar ((event gnus-icalendar-event) &optional reply-status) "Format an overview of EVENT details." - (flet ((format-header (x) + (gmm-labels ((format-header (x) (format "%-12s%s" (propertize (concat (car x) ":") 'face 'bold) (cadr x)))) @@ -673,7 +674,7 @@ is searched." (current-buffer) status gnus-icalendar-identities)))) (when reply - (flet ((fold-icalendar-buffer () + (gmm-labels ((fold-icalendar-buffer () (goto-char (point-min)) (while (re-search-forward "^\\(.\\{72\\}\\)\\(.+\\)$" nil t) (replace-match "\\1\n \\2") @@ -735,7 +736,7 @@ is searched." (setq gnus-icalendar-reply-status nil) (when event - (flet ((insert-button-group (buttons) + (gmm-labels ((insert-button-group (buttons) (when buttons (mapc (lambda (x) (apply 'gnus-icalendar-insert-button x) diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el index 9c2f0df5f59..5b0fd6860a0 100644 --- a/lisp/gnus/mm-util.el +++ b/lisp/gnus/mm-util.el @@ -129,22 +129,6 @@ (multibyte-char-to-unibyte . identity) ;; `set-buffer-multibyte' is an Emacs function, not available in XEmacs. (set-buffer-multibyte . ignore) - ;; `special-display-p' is an Emacs function, not available in XEmacs. - (special-display-p - . ,(lambda (buffer-name) - "Returns non-nil if a buffer named BUFFER-NAME gets a special frame." - (and special-display-function - (or (and (member buffer-name special-display-buffer-names) t) - (cdr (assoc buffer-name special-display-buffer-names)) - (catch 'return - (dolist (elem special-display-regexps) - (and (stringp elem) - (string-match elem buffer-name) - (throw 'return t)) - (and (consp elem) - (stringp (car elem)) - (string-match (car elem) buffer-name) - (throw 'return (cdr elem))))))))) ;; `substring-no-properties' is available only in Emacs 22.1 or greater. (substring-no-properties . ,(lambda (string &optional from to) @@ -174,6 +158,25 @@ to the contents of the accessible portion of the buffer." (forward-line 0) (1+ (count-lines start (point)))))))))) +;; `special-display-p' is an Emacs function, not available in XEmacs. +(defalias 'mm-special-display-p + (if (featurep 'emacs) + 'special-display-p + (lambda (buffer-name) + "Returns non-nil if a buffer named BUFFER-NAME gets a special frame." + (and special-display-function + (or (and (member buffer-name special-display-buffer-names) t) + (cdr (assoc buffer-name special-display-buffer-names)) + (catch 'return + (dolist (elem special-display-regexps) + (and (stringp elem) + (string-match elem buffer-name) + (throw 'return t)) + (and (consp elem) + (stringp (car elem)) + (string-match (car elem) buffer-name) + (throw 'return (cdr elem)))))))))) + ;; `decode-coding-string', `encode-coding-string', `decode-coding-region' ;; and `encode-coding-region' are available in Emacs and XEmacs built with ;; the `file-coding' feature, but the XEmacs versions treat nil, that is From 711668ac2d362719657db8a85fa1989545761412 Mon Sep 17 00:00:00 2001 From: Katsumi Yamaoka Date: Wed, 18 Sep 2013 00:25:23 +0000 Subject: [PATCH 201/321] lisp/gnus/mm-decode.el (mm-add-meta-html-tag): Fix last change --- lisp/gnus/mm-decode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index 07e66b30e58..941849da183 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -1415,7 +1415,7 @@ Return t if meta tag is added or replaced." (goto-char (point-min)) (if (re-search-forward "\ ]+\\)\\)?" nil t) +text/\\(\\sw+\\)\\(?:\;\\s-*charset=\\([^\"'>]+\\)\\)?[^>]*>" nil t) (if (and (not force-charset) (match-beginning 2) (string-match "\\`html\\'" (match-string 1))) From 9f25cb774999615410049cbe9382537e7e6ef074 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Wed, 18 Sep 2013 09:27:00 +0800 Subject: [PATCH 202/321] * subr.el (add-hook): Robustify to handle closure as well. --- lisp/ChangeLog | 4 ++++ lisp/subr.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 94987adcfb6..7b2ed1fe6a1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-18 Leo Liu + + * subr.el (add-hook): Robustify to handle closure as well. + 2013-09-17 Glenn Morris * simple.el (messages-buffer-mode-map): Unbind "g". diff --git a/lisp/subr.el b/lisp/subr.el index f8b5d605f91..adf3f9a97f2 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1366,7 +1366,7 @@ function, it is changed to a list of functions." (setq local t))) (let ((hook-value (if local (symbol-value hook) (default-value hook)))) ;; If the hook value is a single function, turn it into a list. - (when (or (not (listp hook-value)) (eq (car hook-value) 'lambda)) + (when (or (not (listp hook-value)) (functionp hook-value)) (setq hook-value (list hook-value))) ;; Do the actual addition if necessary (unless (member function hook-value) From ec9177ba76f846efb7008547632adbe9a5d913ec Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:42:43 -0400 Subject: [PATCH 203/321] * lisp/textmodes/two-column.el: Make 2C-split work for --without-x. (scroll-bar-columns): Autoload. (top-level): Require fringe when compiling. --- lisp/ChangeLog | 6 ++++++ lisp/textmodes/two-column.el | 3 +++ 2 files changed, 9 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7b2ed1fe6a1..a4f150317e3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-09-18 Glenn Morris + + * textmodes/two-column.el: Make 2C-split work for --without-x. + (scroll-bar-columns): Autoload. + (top-level): Require fringe when compiling. + 2013-09-18 Leo Liu * subr.el (add-hook): Robustify to handle closure as well. diff --git a/lisp/textmodes/two-column.el b/lisp/textmodes/two-column.el index 23e90552096..dcc664cc7f2 100644 --- a/lisp/textmodes/two-column.el +++ b/lisp/textmodes/two-column.el @@ -349,6 +349,9 @@ accepting the proposed default buffer. (if b1 (setq 2C-window-width (- (frame-width) b1))) (2C-two-columns b2))) +(autoload 'scroll-bar-columns "scroll-bar") +(eval-when-compile + (require 'fringe)) ; fringe-columns defsubst ;;;###autoload (defun 2C-split (arg) From 35cc47373edddb3642a8486b3052f6530ab9a778 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:44:44 -0400 Subject: [PATCH 204/321] * lisp/url/url-http.el (zlib-decompress-region): Declare. --- lisp/url/ChangeLog | 4 ++++ lisp/url/url-http.el | 2 ++ 2 files changed, 6 insertions(+) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 817130c5184..7619f2e2b86 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,7 @@ +2013-09-18 Glenn Morris + + * url-http.el (zlib-decompress-region): Declare. + 2013-09-16 Glenn Morris * url-misc.el (url-data): Avoid match-data mix-up with base64 case. diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index 4f9e868c05e..3f16ce05a8c 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -858,6 +858,8 @@ should be shown to the user." (goto-char (point-min)) success)) +(declare-function zlib-decompress-region "decompress.c" (start) (end)) + (defun url-handle-content-transfer-encoding () (let ((encoding (mail-fetch-field "content-encoding"))) (when (and encoding From 49a053fc5b27c7d1a32c42301fc66657dfc396ae Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:48:00 -0400 Subject: [PATCH 205/321] Address some "unused lexical variable" warnings * lisp/dframe.el (x-sensitive-text-pointer-shape, x-pointer-shape): Declare. * lisp/eshell/esh-io.el (x-select-enable-clipboard): Declare. * lisp/erc/erc-button.el (erc-button-add-buttons): * lisp/eshell/em-cmpl.el (eshell-complete-parse-arguments): * lisp/eshell/em-hist.el (eshell/history, eshell-isearch-backward): * lisp/eshell/em-pred.el (eshell-parse-modifiers, eshell-pred-file-time): Remove unused local variables. --- lisp/ChangeLog | 9 +++++++++ lisp/dframe.el | 3 +++ lisp/erc/ChangeLog | 4 ++++ lisp/erc/erc-button.el | 2 +- lisp/eshell/em-cmpl.el | 2 +- lisp/eshell/em-hist.el | 7 +++---- lisp/eshell/em-pred.el | 4 ++-- lisp/eshell/esh-io.el | 2 ++ 8 files changed, 25 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a4f150317e3..439b1db7d5f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,14 @@ 2013-09-18 Glenn Morris + * dframe.el (x-sensitive-text-pointer-shape, x-pointer-shape): Declare. + + * eshell/em-cmpl.el (eshell-complete-parse-arguments): + * eshell/em-hist.el (eshell/history, eshell-isearch-backward): + * eshell/em-pred.el (eshell-parse-modifiers, eshell-pred-file-time): + Remove unused local variables. + + * eshell/esh-io.el (x-select-enable-clipboard): Declare. + * textmodes/two-column.el: Make 2C-split work for --without-x. (scroll-bar-columns): Autoload. (top-level): Require fringe when compiling. diff --git a/lisp/dframe.el b/lisp/dframe.el index 3ef30d055b6..c75287bbc32 100644 --- a/lisp/dframe.el +++ b/lisp/dframe.el @@ -243,6 +243,9 @@ Local to those buffers, as a function called that created it.") "Return non-nil if FRAME is currently available." (and frame (frame-live-p frame) (frame-visible-p frame))) +(defvar x-sensitive-text-pointer-shape) +(defvar x-pointer-shape) + (defun dframe-frame-mode (arg frame-var cache-var buffer-var frame-name local-mode-fn &optional diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 2c10f7fef22..413969c31ec 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,7 @@ +2013-09-18 Glenn Morris + + * erc-button.el (erc-button-add-buttons): Remove unused local vars. + 2013-09-14 Vivek Dasmohapatra * erc.el (erc-update-mode-line-buffer): diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el index ac8600c57fd..0edb771438a 100644 --- a/lisp/erc/erc-button.el +++ b/lisp/erc/erc-button.el @@ -267,7 +267,7 @@ specified by `erc-button-alist'." (inhibit-point-motion-hooks t) (inhibit-field-text-motion t) (alist erc-button-alist) - entry regexp data) + regexp) (erc-button-remove-old-buttons) (dolist (entry alist) (if (equal (car entry) (quote (quote nicknames))) diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el index a940eb5cd36..5cb5d931700 100644 --- a/lisp/eshell/em-cmpl.el +++ b/lisp/eshell/em-cmpl.el @@ -370,7 +370,7 @@ to writing a completion function." (cl-assert (= (length args) (length posns))) (let ((a args) (i 0) - l final) + l) (while a (if (and (consp (car a)) (eq (caar a) 'eshell-operator)) diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el index 8e56de251a1..12ec8ce1f35 100644 --- a/lisp/eshell/em-hist.el +++ b/lisp/eshell/em-hist.el @@ -330,7 +330,7 @@ unless a different file is specified on the command line.") (and (or (not (ring-p eshell-history-ring)) (ring-empty-p eshell-history-ring)) (error "No history")) - (let (length command file) + (let (length file) (when (and args (string-match "^[0-9]+$" (car args))) (setq length (min (eshell-convert (car args)) (ring-length eshell-history-ring)) @@ -346,8 +346,7 @@ unless a different file is specified on the command line.") (write-history (eshell-write-history file)) (append-history (eshell-write-history file t)) (t - (let* ((history nil) - (index (1- (or length (ring-length eshell-history-ring)))) + (let* ((index (1- (or length (ring-length eshell-history-ring)))) (ref (- (ring-length eshell-history-ring) index))) ;; We have to build up a list ourselves from the ring vector. (while (>= index 0) @@ -945,7 +944,7 @@ If N is negative, search backwards for the -Nth previous match." (defun eshell-isearch-backward (&optional invert) "Do incremental regexp search backward through past commands." (interactive) - (let ((inhibit-read-only t) end) + (let ((inhibit-read-only t)) (eshell-prepare-for-search) (goto-char (point-max)) (set-marker eshell-last-output-end (point)) diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el index f7d7605107f..a3aebc23faa 100644 --- a/lisp/eshell/em-pred.el +++ b/lisp/eshell/em-pred.el @@ -306,7 +306,7 @@ predicate functions. MOD-FUNC-LIST is a list of result modifier functions. PRED-FUNCS take a filename and return t if the test succeeds; MOD-FUNCS take any string and preform a modification, returning the resultant string." - (let (result negate follow preds mods) + (let (negate follow preds mods) (condition-case nil (while (not (eobp)) (let ((char (char-after))) @@ -399,7 +399,7 @@ returning the resultant string." (defun eshell-pred-file-time (mod-char mod-type attr-index) "Return a predicate to test whether a file matches a certain time." (let* ((quantum 86400) - qual amount when open close end) + qual when open close end) (when (memq (char-after) '(?M ?w ?h ?m ?s)) (setq quantum (char-after)) (cond diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el index c4c0bd43790..90b1f8ec972 100644 --- a/lisp/eshell/esh-io.el +++ b/lisp/eshell/esh-io.el @@ -118,6 +118,8 @@ from executing while Emacs is redisplaying." :type 'integer :group 'eshell-io) +(defvar x-select-enable-clipboard) ; term/common-win + (defcustom eshell-virtual-targets '(("/dev/eshell" eshell-interactive-print nil) ("/dev/kill" (lambda (mode) From 91c837fe7281b7588a8bfbd4c265a6d8cef69fb9 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 19:45:31 -0700 Subject: [PATCH 206/321] * eshell/esh-util.el (eshell-sublist): Remove unused local variable. --- lisp/ChangeLog | 1 + lisp/eshell/esh-util.el | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 439b1db7d5f..5b911a503b8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -5,6 +5,7 @@ * eshell/em-cmpl.el (eshell-complete-parse-arguments): * eshell/em-hist.el (eshell/history, eshell-isearch-backward): * eshell/em-pred.el (eshell-parse-modifiers, eshell-pred-file-time): + * eshell/esh-util.el (eshell-sublist): Remove unused local variables. * eshell/esh-io.el (x-select-enable-clipboard): Declare. diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index 5e0aad8345f..6195f3976c1 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -217,8 +217,7 @@ then quoting is done by a backslash, rather than a doubled delimiter." (defun eshell-sublist (l &optional n m) "Return from LIST the N to M elements. If N or M is nil, it means the end of the list." - (let* ((a (copy-sequence l)) - result) + (let ((a (copy-sequence l))) (if (and m (consp (nthcdr m a))) (setcdr (nthcdr m a) nil)) (if n From e740f9d245b007e51fcc706338a4a1ac450c8307 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 19:50:04 -0700 Subject: [PATCH 207/321] Silence some --without-x compilation warnings * custom.el (x-get-resource): Declare. * frame.el (x-display-grayscale-p): Declare. * simple.el (font-info): Declare. * window.el (x-display-pixel-height, tool-bar-lines-needed): Declare. (fit-frame-to-buffer): Explicit error if --without-x. (mouse-autoselect-window-select): Silence compiler. --- lisp/ChangeLog | 10 ++++++++++ lisp/custom.el | 7 +++++-- lisp/frame.el | 3 +++ lisp/simple.el | 3 +++ lisp/window.el | 10 +++++++--- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5b911a503b8..c6940ca600a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,15 @@ 2013-09-18 Glenn Morris + * custom.el (x-get-resource): Declare. + + * frame.el (x-display-grayscale-p): Declare. + + * simple.el (font-info): Declare. + + * window.el (x-display-pixel-height, tool-bar-lines-needed): Declare. + (fit-frame-to-buffer): Explicit error if --without-x. + (mouse-autoselect-window-select): Silence compiler. + * dframe.el (x-sensitive-text-pointer-shape, x-pointer-shape): Declare. * eshell/em-cmpl.el (eshell-complete-parse-arguments): diff --git a/lisp/custom.el b/lisp/custom.el index 3db34e4d1fb..d721198da0b 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -1,7 +1,6 @@ ;;; custom.el --- tools for declaring and initializing options ;; -;; Copyright (C) 1996-1997, 1999, 2001-2013 Free Software Foundation, -;; Inc. +;; Copyright (C) 1996-1997, 1999, 2001-2013 Free Software Foundation, Inc. ;; ;; Author: Per Abrahamsen ;; Maintainer: FSF @@ -1416,6 +1415,10 @@ See `custom-enabled-themes' for a list of enabled themes." (setq custom-enabled-themes (delq theme custom-enabled-themes))))) +;; Only used if window-system not null. +(declare-function x-get-resource "frame.c" + (attribute class &optional component subclass)) + (defun custom--frame-color-default (frame attribute resource-attr resource-class tty-default x-default) (let ((col (face-attribute 'default attribute t))) diff --git a/lisp/frame.el b/lisp/frame.el index 74149a8dc01..1980e639283 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -889,6 +889,9 @@ e.g. (mapc 'frame-set-background-mode (frame-list))." (declare-function x-get-resource "frame.c" (attribute class &optional component subclass)) +;; Only used if window-system is not null. +(declare-function x-display-grayscale-p "xfns.c" (&optional terminal)) + (defvar inhibit-frame-set-background-mode nil) (defun frame-set-background-mode (frame &optional keep-face-specs) diff --git a/lisp/simple.el b/lisp/simple.el index 34774712437..bf531de8ae4 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -4714,6 +4714,9 @@ lines." :group 'editing-basics :version "23.1") +;; Only used if display-graphic-p. +(declare-function font-info "font.c" (name &optional frame)) + (defun default-font-height () "Return the height in pixels of the current buffer's default face font." (let ((default-font (face-font 'default))) diff --git a/lisp/window.el b/lisp/window.el index 14e9f6bc128..e4959da3d21 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -1,7 +1,6 @@ ;;; window.el --- GNU Emacs window commands aside from those written in C -;; Copyright (C) 1985, 1989, 1992-1994, 2000-2013 Free Software -;; Foundation, Inc. +;; Copyright (C) 1985, 1989, 1992-1994, 2000-2013 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: internal @@ -6153,6 +6152,9 @@ reduce this. If it is thicker, you might want to increase this." :version "24.3" :group 'windows) +(declare-function x-display-pixel-height "xfns.c" (&optional terminal)) +(declare-function tool-bar-lines-needed "xdisp.c" (&optional frame)) + (defun fit-frame-to-buffer (&optional frame max-height min-height) "Adjust height of FRAME to display its buffer contents exactly. FRAME can be any live frame and defaults to the selected one. @@ -6163,6 +6165,8 @@ top line of FRAME, minus `fit-frame-to-buffer-bottom-margin'. Optional argument MIN-HEIGHT specifies the minimum height of FRAME. The default corresponds to `window-min-height'." (interactive) + (or (fboundp 'x-display-pixel-height) + (user-error "Cannot resize frame in non-graphic Emacs")) (setq frame (window-normalize-frame frame)) (let* ((root (frame-root-window frame)) (frame-min-height @@ -6685,7 +6689,7 @@ is active. This function is run by `mouse-autoselect-window-timer'." (window-at (cadr mouse-position) (cddr mouse-position) (car mouse-position))))) (cond - ((or (menu-or-popup-active-p) + ((or (and (fboundp 'menu-or-popup-active-p) (menu-or-popup-active-p)) (and window (let ((coords (coordinates-in-window-p (cdr mouse-position) window))) From f0047cb9a54f555bf389ec7f763014b42e756f35 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 20:45:54 -0700 Subject: [PATCH 208/321] wdired.el trivia * lisp/wdired.el (dired-backup-overwrite): Remove declaration. (wdired-mode-map): Add doc string. --- lisp/ChangeLog | 3 +++ lisp/wdired.el | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c6940ca600a..dd6e0572803 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-18 Glenn Morris + * wdired.el (dired-backup-overwrite): Remove declaration. + (wdired-mode-map): Add doc string. + * custom.el (x-get-resource): Declare. * frame.el (x-display-grayscale-p): Declare. diff --git a/lisp/wdired.el b/lisp/wdired.el index 6c2c9777a47..7159db812ac 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el @@ -73,8 +73,6 @@ ;;; Code: -(defvar dired-backup-overwrite) ; Only in Emacs 20.x this is a custom var - (require 'dired) (autoload 'dired-do-create-files-regexp "dired-aux") @@ -185,7 +183,8 @@ renamed by `dired-do-rename' and `dired-do-rename-regexp'." (define-key map [remap capitalize-word] 'wdired-capitalize-word) (define-key map [remap downcase-word] 'wdired-downcase-word) - map)) + map) + "Keymap used in `wdired-mode'.") (defvar wdired-mode-hook nil "Hooks run when changing to WDired mode.") From 8a78544ece0e8939032c0fc4302ec057dd021ea5 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 20:47:11 -0700 Subject: [PATCH 209/321] * mail/rmailmm.el (rmail-mime-set-bulk-data): Silence --without-x compilation. --- lisp/ChangeLog | 3 +++ lisp/mail/rmailmm.el | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dd6e0572803..0875fca369a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-18 Glenn Morris + * mail/rmailmm.el (rmail-mime-set-bulk-data): + Silence --without-x compilation. + * wdired.el (dired-backup-overwrite): Remove declaration. (wdired-mode-map): Add doc string. diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el index 350e3dacbcf..f2437b16d14 100644 --- a/lisp/mail/rmailmm.el +++ b/lisp/mail/rmailmm.el @@ -685,7 +685,8 @@ directly." ((string-match "image/\\(.*\\)" content-type) (setq type (image-type-from-file-name (concat "." (match-string 1 content-type)))) - (if (and (memq type image-types) + (if (and (boundp 'image-types) + (memq type image-types) (image-type-available-p type)) (if (and rmail-mime-show-images (not (eq rmail-mime-show-images 'button)) From d2f3e9f85b5d46fbb128548a9ff78bd15c0bd252 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 20:50:18 -0700 Subject: [PATCH 210/321] * lisp/subr.el (x-popup-dialog): Declare. --- lisp/ChangeLog | 2 ++ lisp/subr.el | 3 +++ 2 files changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0875fca369a..cb19644cbe1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -12,6 +12,8 @@ * simple.el (font-info): Declare. + * subr.el (x-popup-dialog): Declare. + * window.el (x-display-pixel-height, tool-bar-lines-needed): Declare. (fit-frame-to-buffer): Explicit error if --without-x. (mouse-autoselect-window-select): Silence compiler. diff --git a/lisp/subr.el b/lisp/subr.el index adf3f9a97f2..b903ef1ea96 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2239,6 +2239,9 @@ floating point support." (push read unread-command-events) nil)))))) +;; Behind display-popup-menus-p test. +(declare-function x-popup-dialog "xmenu.c" (position contents &optional header)) + (defun y-or-n-p (prompt) "Ask user a \"y or n\" question. Return t if answer is \"y\". PROMPT is the string to display to ask the question. It should From 76e6957735732e586de6276b9ae4e647ce1e9cf4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 20:53:10 -0700 Subject: [PATCH 211/321] * faces.el (x-display-list, x-open-connection, x-get-resource): Declare. --- lisp/ChangeLog | 3 +++ lisp/faces.el | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cb19644cbe1..e92acb0dba0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -8,6 +8,9 @@ * custom.el (x-get-resource): Declare. + * faces.el (x-display-list, x-open-connection, x-get-resource): + Declare. + * frame.el (x-display-grayscale-p): Declare. * simple.el (font-info): Declare. diff --git a/lisp/faces.el b/lisp/faces.el index 9a34aec2549..b135755f165 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -1921,6 +1921,11 @@ Return nil if there is no face." ;;; Frame creation. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(declare-function x-display-list "xfns.c" ()) +(declare-function x-open-connection "xfns.c" + (display &optional xrm-string must-succeed)) +(declare-function x-get-resource "frame.c" + (attribute class &optional component subclass)) (declare-function x-parse-geometry "frame.c" (string)) (defvar x-display-name) From 4bd4c0afe0d700edbf8baa68ffb371b6c900b576 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 20:58:26 -0700 Subject: [PATCH 212/321] * frame.el (x-display-name): Declare. --- lisp/ChangeLog | 2 +- lisp/frame.el | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e92acb0dba0..b1bd0006438 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -11,7 +11,7 @@ * faces.el (x-display-list, x-open-connection, x-get-resource): Declare. - * frame.el (x-display-grayscale-p): Declare. + * frame.el (x-display-grayscale-p, x-display-name): Declare. * simple.el (font-info): Declare. diff --git a/lisp/frame.el b/lisp/frame.el index 1980e639283..8e336629123 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -590,6 +590,8 @@ The functions are run with one arg, the newly created frame.") ;; FIXME: Shouldn't we add `font' here as well? "Parameters `make-frame' copies from the `selected-frame' to the new frame.") +(defvar x-display-name) + (defun make-frame (&optional parameters) "Return a newly created frame displaying the current buffer. Optional argument PARAMETERS is an alist of frame parameters for From 5f30349b1ec61b687a2e238368168bb01bfcfe68 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:21:29 -0700 Subject: [PATCH 213/321] * mouse.el (mouse-yank-primary): Reorder to silence --without-x compilation. --- lisp/ChangeLog | 3 +++ lisp/mouse.el | 31 +++++++++++++++---------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b1bd0006438..af062359d4e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-18 Glenn Morris + * mouse.el (mouse-yank-primary): + Reorder to silence --without-x compilation. + * mail/rmailmm.el (rmail-mime-set-bulk-data): Silence --without-x compilation. diff --git a/lisp/mouse.el b/lisp/mouse.el index 0367cad87b8..219287c4767 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -1147,22 +1147,21 @@ regardless of where you click." (deactivate-mark))) (or mouse-yank-at-point (mouse-set-point click)) (let ((primary - (cond - ((eq (framep (selected-frame)) 'w32) - ;; MS-Windows emulates PRIMARY in x-get-selection, but not - ;; in x-get-selection-value (the latter only accesses the - ;; clipboard). So try PRIMARY first, in case they selected - ;; something with the mouse in the current Emacs session. - (or (x-get-selection 'PRIMARY) - (x-get-selection-value))) - ((fboundp 'x-get-selection-value) ; MS-DOS and X. - ;; On X, x-get-selection-value supports more formats and - ;; encodings, so use it in preference to x-get-selection. - (or (x-get-selection-value) - (x-get-selection 'PRIMARY))) - ;; FIXME: What about xterm-mouse-mode etc.? - (t - (x-get-selection 'PRIMARY))))) + (if (fboundp 'x-get-selection-value) + (if (eq (framep (selected-frame)) 'w32) + ;; MS-Windows emulates PRIMARY in x-get-selection, but not + ;; in x-get-selection-value (the latter only accesses the + ;; clipboard). So try PRIMARY first, in case they selected + ;; something with the mouse in the current Emacs session. + (or (x-get-selection 'PRIMARY) + (x-get-selection-value)) + ;; Else MS-DOS or X. + ;; On X, x-get-selection-value supports more formats and + ;; encodings, so use it in preference to x-get-selection. + (or (x-get-selection-value) + (x-get-selection 'PRIMARY))) + ;; FIXME: What about xterm-mouse-mode etc.? + (x-get-selection 'PRIMARY)))) (unless primary (error "No selection is available")) (push-mark (point)) From 67645389fc19c3573bb94f9f7d94195ac0b7b48f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:24:14 -0700 Subject: [PATCH 214/321] * image.el (image-type-from-buffer): Remove --without-x warning/error. --- lisp/ChangeLog | 2 ++ lisp/image.el | 1 + 2 files changed, 3 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index af062359d4e..747a2bf5265 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-18 Glenn Morris + * image.el (image-type-from-buffer): Remove --without-x warning/error. + * mouse.el (mouse-yank-primary): Reorder to silence --without-x compilation. diff --git a/lisp/image.el b/lisp/image.el index 6c15a7d0b96..8afe3e14b10 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -291,6 +291,7 @@ be determined." (setq types (cdr types))))) (goto-char opoint) (and type + (boundp 'image-types) (memq type image-types) type))) From 9019d095dfd04fffc000c2f00515c661f1a083f3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:26:19 -0700 Subject: [PATCH 215/321] * image.el (image-multi-frame-p): Remove --without-x warning/error. --- lisp/ChangeLog | 3 ++- lisp/image.el | 15 ++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 747a2bf5265..9b18e252aff 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,7 @@ 2013-09-18 Glenn Morris - * image.el (image-type-from-buffer): Remove --without-x warning/error. + * image.el (image-type-from-buffer, image-multi-frame-p): + Remove --without-x warning/error. * mouse.el (mouse-yank-primary): Reorder to silence --without-x compilation. diff --git a/lisp/image.el b/lisp/image.el index 8afe3e14b10..91cc3addb06 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -625,13 +625,14 @@ The actual return value is a cons (NIMAGES . DELAY), where NIMAGES is the number of frames (or sub-images) in the image and DELAY is the delay in seconds that the image specifies between each frame. DELAY may be nil, in which case you might want to use `image-default-frame-delay'." - (let* ((metadata (image-metadata image)) - (images (plist-get metadata 'count)) - (delay (plist-get metadata 'delay))) - (when (and images (> images 1)) - (if (or (not (numberp delay)) (< delay 0)) - (setq delay image-default-frame-delay)) - (cons images delay)))) + (when (fboundp 'image-metadata) + (let* ((metadata (image-metadata image)) + (images (plist-get metadata 'count)) + (delay (plist-get metadata 'delay))) + (when (and images (> images 1)) + (if (or (not (numberp delay)) (< delay 0)) + (setq delay image-default-frame-delay)) + (cons images delay))))) (defun image-animated-p (image) "Like `image-multi-frame-p', but returns nil if no delay is specified." From 047a1a4c20c6af269f16f8a1cfc9d7366764770b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:28:57 -0700 Subject: [PATCH 216/321] * term/common-win.el (x-select-enable-primary, x-last-selected-text-primary) (x-last-selected-text-clipboard): Declare. --- lisp/ChangeLog | 4 ++++ lisp/term/common-win.el | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9b18e252aff..14ba74410b7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -23,6 +23,10 @@ * subr.el (x-popup-dialog): Declare. + * term/common-win.el (x-select-enable-primary) + (x-last-selected-text-primary, x-last-selected-text-clipboard): + Declare. + * window.el (x-display-pixel-height, tool-bar-lines-needed): Declare. (fit-frame-to-buffer): Explicit error if --without-x. (mouse-autoselect-window-select): Silence compiler. diff --git a/lisp/term/common-win.el b/lisp/term/common-win.el index aadab96f75a..158db4d09c8 100644 --- a/lisp/term/common-win.el +++ b/lisp/term/common-win.el @@ -44,6 +44,10 @@ This variable is not used by the Nextstep port." (defvar ns-last-selected-text) ; ns-win.el (declare-function ns-set-pasteboard "ns-win" (string)) +(defvar x-select-enable-primary) ; x-win.el +(defvar x-last-selected-text-primary) +(defvar x-last-selected-text-clipboard) + (defun x-select-text (text) "Select TEXT, a string, according to the window system. From e843de776724c563b32aded5405fcada1a75d465 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:30:33 -0700 Subject: [PATCH 217/321] * term/x-win.el (x-select-enable-clipboard): Declare. --- lisp/ChangeLog | 2 ++ lisp/term/x-win.el | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 14ba74410b7..c88da2e5d69 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -27,6 +27,8 @@ (x-last-selected-text-primary, x-last-selected-text-clipboard): Declare. + * term/x-win.el (x-select-enable-clipboard): Declare. + * window.el (x-display-pixel-height, tool-bar-lines-needed): Declare. (fit-frame-to-buffer): Explicit error if --without-x. (mouse-autoselect-window-select): Silence compiler. diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el index 28fd3d7090c..3c7373b6d65 100644 --- a/lisp/term/x-win.el +++ b/lisp/term/x-win.el @@ -1217,6 +1217,8 @@ The value nil is the same as the list (UTF8_STRING COMPOUND_TEXT STRING)." (remove-text-properties 0 (length text) '(foreign-selection nil) text)) text)) +(defvar x-select-enable-clipboard) ; common-win + ;; Return the value of the current X selection. ;; Consult the selection. Treat empty strings as if they were unset. ;; If this function is called twice and finds the same text, From 5fa89513d571eccb834632574cbfeff41fd1936f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:32:01 -0700 Subject: [PATCH 218/321] * term/w32-win.el (create-default-fontset): Declare. --- lisp/ChangeLog | 2 ++ lisp/term/w32-win.el | 1 + 2 files changed, 3 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c88da2e5d69..b27fbea0d14 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -29,6 +29,8 @@ * term/x-win.el (x-select-enable-clipboard): Declare. + * term/w32-win.el (create-default-fontset): Declare. + * window.el (x-display-pixel-height, tool-bar-lines-needed): Declare. (fit-frame-to-buffer): Explicit error if --without-x. (mouse-autoselect-window-select): Silence compiler. diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el index 55181ab7d6d..892ac9749d6 100644 --- a/lisp/term/w32-win.el +++ b/lisp/term/w32-win.el @@ -238,6 +238,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.") (declare-function x-open-connection "w32fns.c" (display &optional xrm-string must-succeed)) +(declare-function create-default-fontset "fontset" ()) (declare-function create-fontset-from-fontset-spec "fontset" (fontset-spec &optional style-variant noerror)) (declare-function create-fontset-from-x-resource "fontset" ()) From 38702b5be4c489fa9d42cc4998a4a30e975b1bbd Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:34:56 -0700 Subject: [PATCH 219/321] * w32-common-fns.el (x-server-version, x-select-enable-clipboard): Declare. --- lisp/ChangeLog | 3 +++ lisp/w32-common-fns.el | 3 +++ 2 files changed, 6 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b27fbea0d14..1bb24cb549f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -31,6 +31,9 @@ * term/w32-win.el (create-default-fontset): Declare. + * w32-common-fns.el (x-server-version, x-select-enable-clipboard): + Declare. + * window.el (x-display-pixel-height, tool-bar-lines-needed): Declare. (fit-frame-to-buffer): Explicit error if --without-x. (mouse-autoselect-window-select): Silence compiler. diff --git a/lisp/w32-common-fns.el b/lisp/w32-common-fns.el index 5d8d7171860..6b1c3ac976e 100644 --- a/lisp/w32-common-fns.el +++ b/lisp/w32-common-fns.el @@ -23,6 +23,8 @@ ;;; and Cygwin Emacs compiled to use the native Windows widget ;;; library. +(declare-function x-server-version "w32fns.c" (&optional terminal)) + (defun w32-version () "Return the MS-Windows version numbers. The value is a list of three integers: the major and minor version @@ -100,6 +102,7 @@ in `selection-converter-alist', which see." ;; current selection against it, and avoid passing back our own text ;; from x-selection-value. (defvar x-last-selected-text nil) +(defvar x-select-enable-clipboard) (defun x-get-selection-value () "Return the value of the current selection. From f4a1d572bca6f19bf59a3b333f2e588aaf065463 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:36:34 -0700 Subject: [PATCH 220/321] * term/ns-win.el (x-handle-args): Declare. --- lisp/ChangeLog | 2 ++ lisp/term/ns-win.el | 1 + 2 files changed, 3 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1bb24cb549f..b2439d17b6d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -27,6 +27,8 @@ (x-last-selected-text-primary, x-last-selected-text-clipboard): Declare. + * term/ns-win.el (x-handle-args): Declare. + * term/x-win.el (x-select-enable-clipboard): Declare. * term/w32-win.el (create-default-fontset): Declare. diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el index 225f809d70b..53c602048ff 100644 --- a/lisp/term/ns-win.el +++ b/lisp/term/ns-win.el @@ -872,6 +872,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.") (defvar ns-initialized nil "Non-nil if Nextstep windowing has been initialized.") +(declare-function x-handle-args "common-win" (args)) (declare-function ns-list-services "nsfns.m" ()) (declare-function x-open-connection "nsfns.m" (display &optional xrm-string must-succeed)) From 2f68e15795ebd53bfa776c2a7b3ee3dc49c774fc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:38:49 -0700 Subject: [PATCH 221/321] * doc-view.el (doc-view-mode): Silence --without-x compilation. --- lisp/ChangeLog | 2 ++ lisp/doc-view.el | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b2439d17b6d..a49549f9921 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-18 Glenn Morris + * doc-view.el (doc-view-mode): Silence --without-x compilation. + * image.el (image-type-from-buffer, image-multi-frame-p): Remove --without-x warning/error. diff --git a/lisp/doc-view.el b/lisp/doc-view.el index 589a57b64c2..cbf4d0bda31 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -1733,9 +1733,12 @@ toggle between displaying the document or editing it as text. "/" (:eval (number-to-string (doc-view-last-page-number))))) ;; Don't scroll unless the user specifically asked for it. (setq-local auto-hscroll-mode nil) - (setq-local mwheel-scroll-up-function #'doc-view-scroll-up-or-next-page) - (setq-local mwheel-scroll-down-function - #'doc-view-scroll-down-or-previous-page) + (if (boundp 'mwheel-scroll-up-function) ; not --without-x build + (setq-local mwheel-scroll-up-function + #'doc-view-scroll-up-or-next-page)) + (if (boundp 'mwheel-scroll-down-function) + (setq-local mwheel-scroll-down-function + #'doc-view-scroll-down-or-previous-page)) (setq-local cursor-type nil) (use-local-map doc-view-mode-map) (add-hook 'after-revert-hook 'doc-view-reconvert-doc nil t) From 7e58af4b13a4fdd32cb052a08bc6a7121fd3a6a4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:42:30 -0700 Subject: [PATCH 222/321] * follow.el (scroll-bar-toolkit-scroll, scroll-bar-drag) (scroll-bar-scroll-up, scroll-bar-scroll-down, mwheel-scroll): Declare. --- lisp/ChangeLog | 4 ++++ lisp/follow.el | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a49549f9921..b39bf122642 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -19,6 +19,10 @@ * faces.el (x-display-list, x-open-connection, x-get-resource): Declare. + * follow.el (scroll-bar-toolkit-scroll, scroll-bar-drag) + (scroll-bar-scroll-up, scroll-bar-scroll-down, mwheel-scroll): + Declare. + * frame.el (x-display-grayscale-p, x-display-name): Declare. * simple.el (font-info): Declare. diff --git a/lisp/follow.el b/lisp/follow.el index 2c9365b2ba6..32411914a19 100644 --- a/lisp/follow.el +++ b/lisp/follow.el @@ -1,6 +1,6 @@ ;;; follow.el --- synchronize windows showing the same buffer -;; Copyright (C) 1995-1997, 1999, 2001-2013 Free Software Foundation, -;; Inc. + +;; Copyright (C) 1995-1997, 1999, 2001-2013 Free Software Foundation, Inc. ;; Author: Anders Lindgren ;; Maintainer: FSF (Anders' email bounces, Sep 2005) @@ -1299,6 +1299,12 @@ non-first windows in Follow mode." ;; This handles the case where the user drags the scroll bar of a ;; non-selected window whose buffer is in Follow mode. +(declare-function scroll-bar-toolkit-scroll "scroll-bar" (event)) +(declare-function scroll-bar-drag "scroll-bar" (event)) +(declare-function scroll-bar-scroll-up "scroll-bar" (event)) +(declare-function scroll-bar-scroll-down "scroll-bar" (event)) +(declare-function mwheel-scroll "mwheel" (event)) + (defun follow-scroll-bar-toolkit-scroll (event) (interactive "e") (scroll-bar-toolkit-scroll event) From cd8edbbe673d636e262fa499cfee913b640d2e1c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:44:20 -0700 Subject: [PATCH 223/321] * mpc.el (doc-view-mode): Silence --without-x compilation. --- lisp/ChangeLog | 2 ++ lisp/mpc.el | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b39bf122642..7ddc5425435 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -8,6 +8,8 @@ * mouse.el (mouse-yank-primary): Reorder to silence --without-x compilation. + * mpc.el (doc-view-mode): Silence --without-x compilation. + * mail/rmailmm.el (rmail-mime-set-bulk-data): Silence --without-x compilation. diff --git a/lisp/mpc.el b/lisp/mpc.el index bd61c261246..2bb3f91abc9 100644 --- a/lisp/mpc.el +++ b/lisp/mpc.el @@ -1139,7 +1139,8 @@ If PLAYLIST is t or nil or missing, use the main playlist." "Major mode for the features common to all buffers of MPC." (buffer-disable-undo) (setq buffer-read-only t) - (setq-local tool-bar-map mpc-tool-bar-map) + (if (boundp 'tool-bar-map) ; not if --without-x + (setq-local tool-bar-map mpc-tool-bar-map)) (setq-local truncate-lines t)) ;;; The mpc-status-mode buffer ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; From 45069b2e00c0b067da7a3ae730f9a3b0694a5826 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:46:44 -0700 Subject: [PATCH 224/321] * term.el (term-mouse-paste): Reorder to silence --without-x compilation. --- lisp/ChangeLog | 1 + lisp/term.el | 17 ++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7ddc5425435..fd6d8f0a547 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -6,6 +6,7 @@ Remove --without-x warning/error. * mouse.el (mouse-yank-primary): + * term.el (term-mouse-paste): Reorder to silence --without-x compilation. * mpc.el (doc-view-mode): Silence --without-x compilation. diff --git a/lisp/term.el b/lisp/term.el index be080297b2e..d9ba848e8be 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -1252,15 +1252,14 @@ without any interpretation." (setq this-command 'yank) (mouse-set-point click) (term-send-raw-string - (or (cond ; From `mouse-yank-primary': - ((eq system-type 'windows-nt) - (or (x-get-selection 'PRIMARY) - (x-get-selection-value))) - ((fboundp 'x-get-selection-value) - (or (x-get-selection-value) - (x-get-selection 'PRIMARY))) - (t - (x-get-selection 'PRIMARY))) + ;; From `mouse-yank-primary': + (or (if (fboundp 'x-get-selection-value) + (if (eq system-type 'windows-nt) + (or (x-get-selection 'PRIMARY) + (x-get-selection-value)) + (or (x-get-selection-value) + (x-get-selection 'PRIMARY))) + (x-get-selection 'PRIMARY)) (error "No selection is available"))))) (defun term-paste () From 5148da153e385332f3fc87ace4bf4c2fc580b41e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:48:55 -0700 Subject: [PATCH 225/321] * net/eww.el (libxml-parse-html-region): Declare. (eww-display-html): Explicit error if no libxml2 support. --- lisp/ChangeLog | 3 +++ lisp/net/eww.el | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fd6d8f0a547..96f2702f984 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-18 Glenn Morris + * net/eww.el (libxml-parse-html-region): Declare. + (eww-display-html): Explicit error if no libxml2 support. + * doc-view.el (doc-view-mode): Silence --without-x compilation. * image.el (image-type-from-buffer, image-multi-frame-p): diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 6cf4ff2c9bf..e67d9c5a25c 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -197,7 +197,12 @@ word(s) will be searched for via `eww-search-prefix'." "[\t\n\r ]*<\\?xml[\t\n\r ]+[^>]*encoding=\"\\([^\"]+\\)") (match-string 1))))) +(declare-function libxml-parse-html-region "xml.c" + (start end &optional base-url)) + (defun eww-display-html (charset url) + (or (fboundp 'libxml-parse-html-region) + (error "This function requires Emacs to be compiled with libxml2")) (unless (eq charset 'utf8) (condition-case nil (decode-coding-region (point) (point-max) charset) From ffb82dbda37f51c7a997fee74646e94647effad5 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:50:54 -0700 Subject: [PATCH 226/321] * net/gnutls.el (gnutls-log-level): Declare. --- lisp/ChangeLog | 2 ++ lisp/net/gnutls.el | 1 + 2 files changed, 3 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 96f2702f984..3de40545779 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -31,6 +31,8 @@ * frame.el (x-display-grayscale-p, x-display-name): Declare. + * net/gnutls.el (gnutls-log-level): Declare. + * simple.el (font-info): Declare. * subr.el (x-popup-dialog): Declare. diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el index 37755806616..923b108c708 100644 --- a/lisp/net/gnutls.el +++ b/lisp/net/gnutls.el @@ -115,6 +115,7 @@ trust and key files, and priority string." (declare-function gnutls-boot "gnutls.c" (proc type proplist)) (declare-function gnutls-errorp "gnutls.c" (error)) +(defvar gnutls-log-level) ; gnutls.c (cl-defun gnutls-negotiate (&rest spec From 986ed13557e677f6438c130061afeaaa120ae393 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:53:05 -0700 Subject: [PATCH 227/321] * net/shr.el (image-size, image-animate): Declare. --- lisp/ChangeLog | 2 ++ lisp/net/shr.el | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3de40545779..1cb9f9e8aea 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -33,6 +33,8 @@ * net/gnutls.el (gnutls-log-level): Declare. + * net/shr.el (image-size, image-animate): Declare. + * simple.el (font-info): Declare. * subr.el (x-popup-dialog): Declare. diff --git a/lisp/net/shr.el b/lisp/net/shr.el index 9cac618b159..b742172be46 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -732,6 +732,10 @@ If EXTERNAL, browse the URL using `shr-external-browser'." (setq payload (base64-decode-string payload))) payload))) +;; Behind display-graphic-p test. +(declare-function image-size "image.c" (spec &optional pixels frame)) +(declare-function image-animate "image" (image &optional index limit)) + (defun shr-put-image (spec alt &optional flags) "Insert image SPEC with a string ALT. Return image. SPEC is either an image data blob, or a list where the first From 3a5fdd45c40d64d231e64cc26302af9428e9f4e4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:54:21 -0700 Subject: [PATCH 228/321] * gnus-util.el (image-size): Declare. --- lisp/gnus/ChangeLog | 4 ++++ lisp/gnus/gnus-util.el | 2 ++ 2 files changed, 6 insertions(+) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 7805dabc7c8..6d718e7c8f9 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,7 @@ +2013-09-18 Glenn Morris + + * gnus-util.el (image-size): Declare. + 2013-09-17 Katsumi Yamaoka * gnus-icalendar.el (gnus-icalendar-event--find-attendee) diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el index 4f63f4bdbc0..b682e64716f 100644 --- a/lisp/gnus/gnus-util.el +++ b/lisp/gnus/gnus-util.el @@ -1891,6 +1891,8 @@ empty directories from OLD-PATH." (get-char-table ,character ,display-table))) `(aref ,display-table ,character))) +(declare-function image-size "image.c" (spec &optional pixels frame)) + (defun gnus-rescale-image (image size) "Rescale IMAGE to SIZE if possible. SIZE is in format (WIDTH . HEIGHT). Return a new image. From 0a9600e02887b2d9b581ae9ae8f2ecba69a973b5 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 21:57:25 -0700 Subject: [PATCH 229/321] * semantic/complete.el (tooltip-mode, tooltip-frame-parameters, tooltip-show): Declare. --- lisp/cedet/ChangeLog | 5 +++++ lisp/cedet/semantic/complete.el | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 74a4591862a..2a3b53be5db 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,8 @@ +2013-09-18 Glenn Morris + + * semantic/complete.el (tooltip-mode, tooltip-frame-parameters) + (tooltip-show): Declare. + 2013-09-17 Stefan Monnier * semantic/symref/list.el (semantic-symref-results-mode): diff --git a/lisp/cedet/semantic/complete.el b/lisp/cedet/semantic/complete.el index b42e24fb9c0..9af890fb6eb 100644 --- a/lisp/cedet/semantic/complete.el +++ b/lisp/cedet/semantic/complete.el @@ -1634,6 +1634,8 @@ Display mechanism using tooltip for a list of possible completions.") (error nil)) ) +(defvar tooltip-mode) + (defmethod semantic-displayor-show-request ((obj semantic-displayor-tooltip)) "A request to show the current tags table." (if (or (not (featurep 'tooltip)) (not tooltip-mode)) @@ -1726,6 +1728,9 @@ Return a cons cell (X . Y)" (+ (cdr point-pix-pos) (cadr edges) top)))) +(defvar tooltip-frame-parameters) +(declare-function tooltip-show "tooltip" (text &optional use-echo-area)) + (defun semantic-displayor-tooltip-show (text) "Display a tooltip with TEXT near cursor." (let ((point-pix-pos (semantic-displayor-point-position)) From 74be3de16c3df82ec788bd1da4ea1fccc64f7d8a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 22:00:26 -0700 Subject: [PATCH 230/321] * semantic/find.el (semantic-brute-find-first-tag-by-name): Replace obsolete function assoc-ignore-case with assoc-string. --- lisp/cedet/ChangeLog | 3 +++ lisp/cedet/semantic/find.el | 6 ++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 2a3b53be5db..61d79b16cb0 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,5 +1,8 @@ 2013-09-18 Glenn Morris + * semantic/find.el (semantic-brute-find-first-tag-by-name): + Replace obsolete function assoc-ignore-case with assoc-string. + * semantic/complete.el (tooltip-mode, tooltip-frame-parameters) (tooltip-show): Declare. diff --git a/lisp/cedet/semantic/find.el b/lisp/cedet/semantic/find.el index 6670074c0f9..351c6163e2b 100644 --- a/lisp/cedet/semantic/find.el +++ b/lisp/cedet/semantic/find.el @@ -457,13 +457,11 @@ TABLE is a tag table. See `semantic-something-to-tag-table'." "Find a tag NAME within STREAMORBUFFER. NAME is a string. If SEARCH-PARTS is non-nil, search children of tags. If SEARCH-INCLUDE was never implemented. +Respects `semantic-case-fold'. Use `semantic-find-first-tag-by-name' instead." (let* ((stream (semantic-something-to-tag-table streamorbuffer)) - (assoc-fun (if semantic-case-fold - #'assoc-ignore-case - #'assoc)) - (m (funcall assoc-fun name stream))) + (m (assoc-string name stream semantic-case-fold))) (if m m (let ((toklst stream) From 7bb3e76899ec548ac5e1e95e3e38d7b33f3dadf4 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 22:04:41 -0700 Subject: [PATCH 231/321] * emacs-lisp/chart.el (x-display-color-cells): Declare. (chart-face-list): Drop Emacsen without display-color-p. --- lisp/ChangeLog | 3 +++ lisp/emacs-lisp/chart.el | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1cb9f9e8aea..9eaa1cb3ddf 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-18 Glenn Morris + * emacs-lisp/chart.el (x-display-color-cells): Declare. + (chart-face-list): Drop Emacsen without display-color-p. + * net/eww.el (libxml-parse-html-region): Declare. (eww-display-html): Explicit error if no libxml2 support. diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el index 032eced7592..e05c28f23d5 100644 --- a/lisp/emacs-lisp/chart.el +++ b/lisp/emacs-lisp/chart.el @@ -1,7 +1,7 @@ ;;; chart.el --- Draw charts (bar charts, etc) -*- lexical-binding: t -*- -;; Copyright (C) 1996, 1998-1999, 2001, 2004-2005, 2007-2013 Free -;; Software Foundation, Inc. +;; Copyright (C) 1996, 1998-1999, 2001, 2004-2005, 2007-2013 +;; Free Software Foundation, Inc. ;; Author: Eric M. Ludlam ;; Version: 0.2 @@ -86,10 +86,10 @@ Useful if new Emacs is used on B&W display.") :group 'eieio :type 'boolean) +(declare-function x-display-color-cells "xfns.c" (&optional terminal)) + (defvar chart-face-list - (if (if (fboundp 'display-color-p) - (display-color-p) - window-system) + (if (display-color-p) (let ((cl chart-face-color-list) (pl chart-face-pixmap-list) (faces ()) From ee8b701cae9929d655054852dcadc817147305d8 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 22:10:21 -0700 Subject: [PATCH 232/321] Fix typo in declaration --- lisp/url/url-http.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index 3f16ce05a8c..e2a2033e527 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -858,7 +858,7 @@ should be shown to the user." (goto-char (point-min)) success)) -(declare-function zlib-decompress-region "decompress.c" (start) (end)) +(declare-function zlib-decompress-region "decompress.c" (start end)) (defun url-handle-content-transfer-encoding () (let ((encoding (mail-fetch-field "content-encoding"))) From 92d77c897be154cbc9ce960bd974bfd0f8f566df Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 22:11:38 -0700 Subject: [PATCH 233/321] * eshell/em-glob.el (ange-cache): * eshell/em-unix.el (ange-cache): Declare. --- lisp/ChangeLog | 3 +++ lisp/eshell/em-glob.el | 2 ++ lisp/eshell/em-unix.el | 2 ++ 3 files changed, 7 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9eaa1cb3ddf..a23dc06ec91 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -25,6 +25,9 @@ * custom.el (x-get-resource): Declare. + * eshell/em-glob.el (ange-cache): + * eshell/em-unix.el (ange-cache): Declare. + * faces.el (x-display-list, x-open-connection, x-get-resource): Declare. diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el index 596547c3f5e..9d3836431c4 100644 --- a/lisp/eshell/em-glob.el +++ b/lisp/eshell/em-glob.el @@ -232,6 +232,8 @@ resulting regular expression." (regexp-quote (substring pattern matched-in-pattern)) "\\'"))) +(defvar ange-cache) ; XEmacs? See esh-util + (defun eshell-extended-glob (glob) "Return a list of files generated from GLOB, perhaps looking for DIRS-ONLY. This function almost fully supports zsh style filename generation diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index 5792fe17506..1548d181855 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -461,6 +461,8 @@ Remove the DIRECTORY(ies), if they are empty.") (eshell-parse-command (format "tar %s %s" tar-args archive) args)))) +(defvar ange-cache) ; XEmacs? See esh-util + ;; this is to avoid duplicating code... (defmacro eshell-mvcpln-template (command action func query-var force-var &optional preserve) From 30810a057cc36f9374cef60c615e3a66c8e40c4a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 22:16:36 -0700 Subject: [PATCH 234/321] * progmodes/gud.el (gud-find-file): Silence --without-x compilation. --- lisp/ChangeLog | 2 ++ lisp/progmodes/gud.el | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a23dc06ec91..9c9d400f438 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -20,6 +20,8 @@ * mail/rmailmm.el (rmail-mime-set-bulk-data): Silence --without-x compilation. + * progmodes/gud.el (gud-find-file): Silence --without-x compilation. + * wdired.el (dired-backup-overwrite): Remove declaration. (wdired-mode-map): Add doc string. diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index c549d9eedef..c03c64b21ad 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -1,7 +1,6 @@ ;;; gud.el --- Grand Unified Debugger mode for running GDB and other debuggers -;; Copyright (C) 1992-1996, 1998, 2000-2013 Free Software Foundation, -;; Inc. +;; Copyright (C) 1992-1996, 1998, 2000-2013 Free Software Foundation, Inc. ;; Author: Eric S. Raymond ;; Maintainer: FSF @@ -321,8 +320,9 @@ Uses `gud--directories' to find the source files." (when buf ;; Copy `gud-minor-mode' to the found buffer to turn on the menu. (with-current-buffer buf - (set (make-local-variable 'gud-minor-mode) minor-mode) - (set (make-local-variable 'tool-bar-map) gud-tool-bar-map) + (setq-local gud-minor-mode minor-mode) + (if (boundp 'tool-bar-map) + (setq-local tool-bar-map gud-tool-bar-map)) (when (and gud-tooltip-mode (eq gud-minor-mode 'gdbmi)) (make-local-variable 'gdb-define-alist) From 12679bfd15020087eca82df8dcb5df2c48bcef02 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 17 Sep 2013 22:19:28 -0700 Subject: [PATCH 235/321] * progmodes/gud.el (gud-mode): Silence --without-x compilation. (tooltip-mode): Declare. --- lisp/ChangeLog | 4 +++- lisp/progmodes/gud.el | 7 +++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9c9d400f438..abe2ed75ad0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -20,7 +20,9 @@ * mail/rmailmm.el (rmail-mime-set-bulk-data): Silence --without-x compilation. - * progmodes/gud.el (gud-find-file): Silence --without-x compilation. + * progmodes/gud.el (gud-find-file, gud-mode): + Silence --without-x compilation. + (tooltip-mode): Declare. * wdired.el (dired-backup-overwrite): Remove declaration. (wdired-mode-map): Add doc string. diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index c03c64b21ad..14f6aa154d7 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -321,7 +321,7 @@ Uses `gud--directories' to find the source files." ;; Copy `gud-minor-mode' to the found buffer to turn on the menu. (with-current-buffer buf (setq-local gud-minor-mode minor-mode) - (if (boundp 'tool-bar-map) + (if (boundp 'tool-bar-map) ; not --without-x (setq-local tool-bar-map gud-tool-bar-map)) (when (and gud-tooltip-mode (eq gud-minor-mode 'gdbmi)) @@ -2482,7 +2482,8 @@ comint mode, which see." (setq mode-line-process '(":%s")) (define-key (current-local-map) "\C-c\C-l" 'gud-refresh) (set (make-local-variable 'gud-last-frame) nil) - (set (make-local-variable 'tool-bar-map) gud-tool-bar-map) + (if (boundp 'tool-bar-map) ; not --without-x + (setq-local tool-bar-map gud-tool-bar-map)) (make-local-variable 'comint-prompt-regexp) ;; Don't put repeated commands in command history many times. (set (make-local-variable 'comint-input-ignoredups) t) @@ -3282,6 +3283,8 @@ Treats actions as defuns." ;;; Customizable settings +(defvar tooltip-mode) + ;;;###autoload (define-minor-mode gud-tooltip-mode "Toggle the display of GUD tooltips. From 7a0c745ad134aff0bb8f4258ea607137a819b58d Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 18 Sep 2013 10:48:11 +0400 Subject: [PATCH 236/321] * frame.c (x_mouse_grabbed): New function. * dispextern.h (x_mouse_grabbed): Add prototype. (last_mouse_frame): Remove declaration. * xterm.h (struct x_display_info): * w32term.h (struct w32_display_info): * nsterm.h (struct ns_display_info): New member last_mouse_frame, going to replace... * xdisp.c (last_mouse_frame): ...global variable. (note_tool_bar_highlight): * w32term.c (w32_mouse_position, w32_read_socket): * xterm.c (XTmouse_position, handle_one_xevent): Use x_mouse_grabbed. * nsterm.m (ns_mouse_position, mouseDown): Adjust user. --- src/ChangeLog | 16 ++++++++++++++++ src/dispextern.h | 2 +- src/frame.c | 11 ++++++++++- src/nsterm.h | 3 +++ src/nsterm.m | 10 ++++++---- src/w32term.c | 44 ++++++++++++++------------------------------ src/w32term.h | 3 +++ src/xdisp.c | 10 +++------- src/xterm.c | 36 ++++++++++++++++-------------------- src/xterm.h | 3 +++ 10 files changed, 75 insertions(+), 63 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4223573a6ff..b5bdf1dca70 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,19 @@ +2013-09-18 Dmitry Antipov + + * frame.c (x_mouse_grabbed): New function. + * dispextern.h (x_mouse_grabbed): Add prototype. + (last_mouse_frame): Remove declaration. + * xterm.h (struct x_display_info): + * w32term.h (struct w32_display_info): + * nsterm.h (struct ns_display_info): New member + last_mouse_frame, going to replace... + * xdisp.c (last_mouse_frame): ...global variable. + (note_tool_bar_highlight): + * w32term.c (w32_mouse_position, w32_read_socket): + * xterm.c (XTmouse_position, handle_one_xevent): + Use x_mouse_grabbed. + * nsterm.m (ns_mouse_position, mouseDown): Adjust user. + 2013-09-17 Dmitry Antipov * w32term.c (w32_read_socket): Avoid temporary diff --git a/src/dispextern.h b/src/dispextern.h index e91403bce68..c8af00ad915 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3194,7 +3194,6 @@ extern int help_echo_showing_p; extern Lisp_Object help_echo_string, help_echo_window; extern Lisp_Object help_echo_object, previous_help_echo_string; extern ptrdiff_t help_echo_pos; -extern struct frame *last_mouse_frame; extern int last_tool_bar_item; extern void reseat_at_previous_visible_line_start (struct it *); extern Lisp_Object lookup_glyphless_char_display (int, struct it *); @@ -3531,6 +3530,7 @@ enum resource_types RES_TYPE_BOOLEAN_NUMBER }; +extern bool x_mouse_grabbed (Display_Info *); extern Display_Info *check_x_display_info (Lisp_Object); extern Lisp_Object x_get_arg (Display_Info *, Lisp_Object, Lisp_Object, const char *, const char *class, diff --git a/src/frame.c b/src/frame.c index 365629d0f48..a31bf35aa6b 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3432,7 +3432,16 @@ x_set_alpha (struct frame *f, Lisp_Object arg, Lisp_Object oldval) return; } - +/* Non-zero if mouse is grabbed on DPYINFO + and we know the frame where it is. */ + +bool x_mouse_grabbed (Display_Info *dpyinfo) +{ + return (dpyinfo->grabbed + && dpyinfo->last_mouse_frame + && FRAME_LIVE_P (dpyinfo->last_mouse_frame)); +} + /* Subroutines of creating an X frame. */ /* Make sure that Vx_resource_name is set to a reasonable value. diff --git a/src/nsterm.h b/src/nsterm.h index 30ae871da83..373e06cefd2 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -597,6 +597,9 @@ struct ns_display_info struct frame *x_highlight_frame; struct frame *x_focus_frame; + + /* The frame where the mouse was last time we reported a mouse event. */ + struct frame *last_mouse_frame; }; /* This is a chain of structures for all the NS displays currently in use. */ diff --git a/src/nsterm.m b/src/nsterm.m index 6c5f5f54cb9..d41bd856b0c 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -1812,8 +1812,9 @@ Free a pool and temporary objects it refers to (callable from C) XFRAME (frame)->mouse_moved = 0; last_mouse_scroll_bar = nil; - if (last_mouse_frame && FRAME_LIVE_P (last_mouse_frame)) - f = last_mouse_frame; + if (dpyinfo->last_mouse_frame + && FRAME_LIVE_P (dpyinfo->last_mouse_frame)) + f = dpyinfo->last_mouse_frame; else f = dpyinfo->x_focus_frame ? dpyinfo->x_focus_frame : SELECTED_FRAME (); @@ -5362,6 +5363,7 @@ - (NSAttributedString *)attributedSubstringFromRange: (NSRange)theRange /* This is what happens when the user presses a mouse button. */ - (void)mouseDown: (NSEvent *)theEvent { + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (emacsframe); NSPoint p = [self convertPoint: [theEvent locationInWindow] fromView: nil]; NSTRACE (mouseDown); @@ -5371,10 +5373,10 @@ - (void)mouseDown: (NSEvent *)theEvent if (!emacs_event) return; - last_mouse_frame = emacsframe; + dpyinfo->last_mouse_frame = emacsframe; /* appears to be needed to prevent spurious movement events generated on button clicks */ - last_mouse_frame->mouse_moved = 0; + emacsframe->mouse_moved = 0; if ([theEvent type] == NSScrollWheel) { diff --git a/src/w32term.c b/src/w32term.c index 331a86ef7d7..97dda0e8c55 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -3404,6 +3404,7 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, unsigned long *time) { struct frame *f1; + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp); block_input (); @@ -3426,19 +3427,11 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, /* Now we have a position on the root; find the innermost window containing the pointer. */ { - if (FRAME_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame - && FRAME_LIVE_P (last_mouse_frame)) - { - /* If mouse was grabbed on a frame, give coords for that frame - even if the mouse is now outside it. */ - f1 = last_mouse_frame; - } - else - { - /* Is window under mouse one of our frames? */ - f1 = x_any_window_to_frame (FRAME_DISPLAY_INFO (*fp), - WindowFromPoint (pt)); - } + /* If mouse was grabbed on a frame, give coords for that + frame even if the mouse is now outside it. Otherwise + check for window under mouse on one of our frames. */ + f1 = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame + : x_any_window_to_frame (dpyinfo, WindowFromPoint (pt))); /* If not, is it one of our scroll bars? */ if (! f1) @@ -4479,11 +4472,8 @@ w32_read_socket (struct terminal *terminal, previous_help_echo_string = help_echo_string; help_echo_string = Qnil; - if (dpyinfo->grabbed && last_mouse_frame - && FRAME_LIVE_P (last_mouse_frame)) - f = last_mouse_frame; - else - f = x_window_to_frame (dpyinfo, msg.msg.hwnd); + f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame + : x_window_to_frame (dpyinfo, msg.msg.hwnd)); if (hlinfo->mouse_face_hidden) { @@ -4559,11 +4549,8 @@ w32_read_socket (struct terminal *terminal, int button; int up; - if (dpyinfo->grabbed && last_mouse_frame - && FRAME_LIVE_P (last_mouse_frame)) - f = last_mouse_frame; - else - f = x_window_to_frame (dpyinfo, msg.msg.hwnd); + f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame + : x_window_to_frame (dpyinfo, msg.msg.hwnd)); if (f) { @@ -4602,7 +4589,7 @@ w32_read_socket (struct terminal *terminal, else { dpyinfo->grabbed |= (1 << button); - last_mouse_frame = f; + dpyinfo->last_mouse_frame = f; /* Ignore any mouse motion that happened before this event; any subsequent mouse-movement Emacs events should reflect only motion after @@ -4619,11 +4606,8 @@ w32_read_socket (struct terminal *terminal, case WM_MOUSEWHEEL: case WM_MOUSEHWHEEL: { - if (dpyinfo->grabbed && last_mouse_frame - && FRAME_LIVE_P (last_mouse_frame)) - f = last_mouse_frame; - else - f = x_window_to_frame (dpyinfo, msg.msg.hwnd); + f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame + : x_window_to_frame (dpyinfo, msg.msg.hwnd)); if (f) { @@ -4640,7 +4624,7 @@ w32_read_socket (struct terminal *terminal, ButtonPress. */ f->mouse_moved = 0; } - last_mouse_frame = f; + dpyinfo->last_mouse_frame = f; last_tool_bar_item = -1; } break; diff --git a/src/w32term.h b/src/w32term.h index 99253627e64..d29cab35ded 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -182,6 +182,9 @@ struct w32_display_info /* The frame waiting to be auto-raised in w32_read_socket. */ struct frame *w32_pending_autoraise_frame; + + /* The frame where the mouse was last time we reported a mouse event. */ + struct frame *last_mouse_frame; }; /* This is a chain of structures for all the displays currently in use. */ diff --git a/src/xdisp.c b/src/xdisp.c index b07aad51bc9..c4f7b205119 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11454,10 +11454,6 @@ update_menu_bar (struct frame *f, int save_match_data, int hooks_run) #ifdef HAVE_WINDOW_SYSTEM -/* Where the mouse was last time we reported a mouse event. */ - -struct frame *last_mouse_frame; - /* Tool-bar item index of the item on which a mouse button was pressed or -1. */ @@ -12320,9 +12316,9 @@ note_tool_bar_highlight (struct frame *f, int x, int y) clear_mouse_face (hlinfo); /* Mouse is down, but on different tool-bar item? */ - mouse_down_p = (dpyinfo->grabbed - && f == last_mouse_frame - && FRAME_LIVE_P (f)); + mouse_down_p = (x_mouse_grabbed (dpyinfo) + && f == dpyinfo->last_mouse_frame); + if (mouse_down_p && last_tool_bar_item != prop_idx) return; diff --git a/src/xterm.c b/src/xterm.c index 08a360fd52c..7d8c40b8cf0 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -3945,6 +3945,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, Time *timestamp) { struct frame *f1; + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp); block_input (); @@ -4004,22 +4005,24 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, x_catch_errors (FRAME_X_DISPLAY (*fp)); - if (FRAME_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame - && FRAME_LIVE_P (last_mouse_frame)) + if (x_mouse_grabbed (dpyinfo)) { /* If mouse was grabbed on a frame, give coords for that frame even if the mouse is now outside it. */ XTranslateCoordinates (FRAME_X_DISPLAY (*fp), - /* From-window, to-window. */ - root, FRAME_X_WINDOW (last_mouse_frame), + /* From-window. */ + root, + + /* To-window. */ + FRAME_X_WINDOW (dpyinfo->last_mouse_frame), /* From-position, to-position. */ root_x, root_y, &win_x, &win_y, /* Child of win. */ &child); - f1 = last_mouse_frame; + f1 = dpyinfo->last_mouse_frame; } else { @@ -4043,7 +4046,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, want the edit window. For non-Gtk+ the innermost window is the edit window. For Gtk+ it might not be. It might be the tool bar for example. */ - if (x_window_to_frame (FRAME_DISPLAY_INFO (*fp), win)) + if (x_window_to_frame (dpyinfo, win)) break; #endif win = child; @@ -4065,10 +4068,10 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, #ifdef USE_GTK /* We don't wan't to know the innermost window. We want the edit window. */ - f1 = x_window_to_frame (FRAME_DISPLAY_INFO (*fp), win); + f1 = x_window_to_frame (dpyinfo, win); #else /* Is win one of our frames? */ - f1 = x_any_window_to_frame (FRAME_DISPLAY_INFO (*fp), win); + f1 = x_any_window_to_frame (dpyinfo, win); #endif #ifdef USE_X_TOOLKIT @@ -6704,11 +6707,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, previous_help_echo_string = help_echo_string; help_echo_string = Qnil; - if (dpyinfo->grabbed && last_mouse_frame - && FRAME_LIVE_P (last_mouse_frame)) - f = last_mouse_frame; - else - f = x_window_to_frame (dpyinfo, event->xmotion.window); + f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame + : x_window_to_frame (dpyinfo, event->xmotion.window)); if (hlinfo->mouse_face_hidden) { @@ -6845,12 +6845,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, last_mouse_glyph_frame = 0; dpyinfo->last_user_time = event->xbutton.time; - if (dpyinfo->grabbed - && last_mouse_frame - && FRAME_LIVE_P (last_mouse_frame)) - f = last_mouse_frame; - else - f = x_window_to_frame (dpyinfo, event->xbutton.window); + f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame + : x_window_to_frame (dpyinfo, event->xbutton.window)); #ifdef USE_GTK if (f && xg_event_is_for_scrollbar (f, event)) @@ -6923,7 +6919,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, if (event->type == ButtonPress) { dpyinfo->grabbed |= (1 << event->xbutton.button); - last_mouse_frame = f; + dpyinfo->last_mouse_frame = f; if (!tool_bar_p) last_tool_bar_item = -1; diff --git a/src/xterm.h b/src/xterm.h index e1556de36b9..f1bfc883a64 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -305,6 +305,9 @@ struct x_display_info /* The frame waiting to be auto-raised in XTread_socket. */ struct frame *x_pending_autoraise_frame; + /* The frame where the mouse was last time we reported a mouse event. */ + struct frame *last_mouse_frame; + /* Time of last user interaction as returned in X events on this display. */ Time last_user_time; From 18da0d8ad4e5036185acbad3238cbfe2aaf3ca66 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 18 Sep 2013 13:23:10 +0400 Subject: [PATCH 237/321] * frame.c (x_redo_mouse_highlight): New function to factor out common code used in W32 and X ports. * dispextern.h (x_redo_mouse_highlight): Add prototype. * xterm.h (struct x_display_info): * w32term.h (struct w32_display_info): * nsterm.h (struct ns_display_info): New members last_mouse_motion_frame, last_mouse_motion_x and last_mouse_motion_y, going to replace static variables below. * xterm.c (last_mouse_motion_event, last_mouse_motion_frame) (redo_mouse_highlight): Remove. (note_mouse_movement, syms_of_xterm): Adjust user. (handle_one_xevent): Likewise. Use x_redo_mouse_highlight. * w32term.c (last_mouse_motion_event, last_mouse_motion_frame) (redo_mouse_highlight): Remove. (note_mouse_movement, syms_of_w32term): Adjust user. (w32_read_socket): Likewise. Use x_redo_mouse_highlight. * nsterm.m (last_mouse_motion_position, last_mouse_motion_frame): Remove. (note_mouse_movement, mouseMoved, syms_of_nsterm): * nsfns.m (compute_tip_xy): Adjust user. --- src/ChangeLog | 23 +++++++++++++++++++++++ src/dispextern.h | 1 + src/frame.c | 13 +++++++++++++ src/nsfns.m | 4 +++- src/nsterm.h | 9 ++++++++- src/nsterm.m | 22 +++++++++------------- src/w32term.c | 31 +++++++++---------------------- src/w32term.h | 8 ++++++++ src/xterm.c | 35 ++++++++--------------------------- src/xterm.h | 8 ++++++++ 10 files changed, 90 insertions(+), 64 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index b5bdf1dca70..55345027811 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,26 @@ +2013-09-18 Dmitry Antipov + + * frame.c (x_redo_mouse_highlight): New function + to factor out common code used in W32 and X ports. + * dispextern.h (x_redo_mouse_highlight): Add prototype. + * xterm.h (struct x_display_info): + * w32term.h (struct w32_display_info): + * nsterm.h (struct ns_display_info): New members + last_mouse_motion_frame, last_mouse_motion_x and + last_mouse_motion_y, going to replace static variables below. + * xterm.c (last_mouse_motion_event, last_mouse_motion_frame) + (redo_mouse_highlight): Remove. + (note_mouse_movement, syms_of_xterm): Adjust user. + (handle_one_xevent): Likewise. Use x_redo_mouse_highlight. + * w32term.c (last_mouse_motion_event, last_mouse_motion_frame) + (redo_mouse_highlight): Remove. + (note_mouse_movement, syms_of_w32term): Adjust user. + (w32_read_socket): Likewise. Use x_redo_mouse_highlight. + * nsterm.m (last_mouse_motion_position, last_mouse_motion_frame): + Remove. + (note_mouse_movement, mouseMoved, syms_of_nsterm): + * nsfns.m (compute_tip_xy): Adjust user. + 2013-09-18 Dmitry Antipov * frame.c (x_mouse_grabbed): New function. diff --git a/src/dispextern.h b/src/dispextern.h index c8af00ad915..7244c84893d 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3545,6 +3545,7 @@ extern Lisp_Object x_default_parameter (struct frame *, Lisp_Object, enum resource_types); extern char *x_get_string_resource (XrmDatabase, const char *, const char *); +extern void x_redo_mouse_highlight (Display_Info *); #endif /* HAVE_WINDOW_SYSTEM */ diff --git a/src/frame.c b/src/frame.c index a31bf35aa6b..997cc9c73ae 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3442,6 +3442,19 @@ bool x_mouse_grabbed (Display_Info *dpyinfo) && FRAME_LIVE_P (dpyinfo->last_mouse_frame)); } +/* Re-highlight something with mouse-face properties + on DPYINFO using saved frame and mouse position. */ + +void +x_redo_mouse_highlight (Display_Info *dpyinfo) +{ + if (dpyinfo->last_mouse_motion_frame + && FRAME_LIVE_P (dpyinfo->last_mouse_motion_frame)) + note_mouse_highlight (dpyinfo->last_mouse_motion_frame, + dpyinfo->last_mouse_motion_x, + dpyinfo->last_mouse_motion_y); +} + /* Subroutines of creating an X frame. */ /* Make sure that Vx_resource_name is set to a reasonable value. diff --git a/src/nsfns.m b/src/nsfns.m index 408e6d2176e..93b7d12becb 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -2564,6 +2564,7 @@ and GNUstep implementations ("distributor-specific release { Lisp_Object left, top; EmacsView *view = FRAME_NS_VIEW (f); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); NSPoint pt; /* Start with user-specified or mouse position. */ @@ -2572,7 +2573,8 @@ and GNUstep implementations ("distributor-specific release if (!INTEGERP (left) || !INTEGERP (top)) { - pt = last_mouse_motion_position; + pt.x = dpyinfo->last_mouse_motion_x; + pt.y = dpyinfo->last_mouse_motion_y; /* Convert to screen coordinates */ pt = [view convertPoint: pt toView: nil]; pt = [[view window] convertBaseToScreen: pt]; diff --git a/src/nsterm.h b/src/nsterm.h index 373e06cefd2..7a626c75fe6 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -600,6 +600,14 @@ struct ns_display_info /* The frame where the mouse was last time we reported a mouse event. */ struct frame *last_mouse_frame; + + /* The frame where the mouse was last time we reported a mouse motion. */ + struct frame *last_mouse_motion_frame; + + /* Position where the mouse was last time we reported a motion. + This is a position on last_mouse_motion_frame. */ + int last_mouse_motion_x; + int last_mouse_motion_y; }; /* This is a chain of structures for all the NS displays currently in use. */ @@ -869,7 +877,6 @@ extern int ns_select (int nfds, fd_set *readfds, fd_set *writefds, sigset_t const *sigmask); extern unsigned long ns_get_rgb_color (struct frame *f, float r, float g, float b, float a); -extern NSPoint last_mouse_motion_position; /* From nsterm.m, needed in nsfont.m. */ #ifdef __OBJC__ diff --git a/src/nsterm.m b/src/nsterm.m index d41bd856b0c..dc27fd09e30 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -191,10 +191,8 @@ Updated by Christian Limpach (chris@nice.ch) long context_menu_value = 0; /* display update */ -NSPoint last_mouse_motion_position; static NSRect last_mouse_glyph; static Time last_mouse_movement_time = 0; -static Lisp_Object last_mouse_motion_frame; static EmacsScroller *last_mouse_scroll_bar = nil; static struct frame *ns_updating_frame; static NSView *focus_view = NULL; @@ -1742,7 +1740,7 @@ Free a pool and temporary objects it refers to (callable from C) { // NSTRACE (note_mouse_movement); - XSETFRAME (last_mouse_motion_frame, frame); + FRAME_DISPLAY_INFO (frame)->last_mouse_motion_frame = frame; /* Note, this doesn't get called for enter/leave, since we don't have a position. Those are taken care of in the corresponding NSView methods. */ @@ -5448,13 +5446,16 @@ - (void) scrollWheel: (NSEvent *)theEvent - (void)mouseMoved: (NSEvent *)e { Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (emacsframe); + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (emacsframe); Lisp_Object frame; + NSPoint pt; // NSTRACE (mouseMoved); last_mouse_movement_time = EV_TIMESTAMP (e); - last_mouse_motion_position - = [self convertPoint: [e locationInWindow] fromView: nil]; + pt = [self convertPoint: [e locationInWindow] fromView: nil]; + dpyinfo->last_mouse_motion_x = pt.x; + dpyinfo->last_mouse_motion_y = pt.y; /* update any mouse face */ if (hlinfo->mouse_face_hidden) @@ -5471,9 +5472,8 @@ - (void)mouseMoved: (NSEvent *)e { NSTRACE (mouse_autoselect_window); static Lisp_Object last_mouse_window; - Lisp_Object window = window_from_coordinates - (emacsframe, last_mouse_motion_position.x, - last_mouse_motion_position.y, 0, 0); + Lisp_Object window + = window_from_coordinates (emacsframe, pt.x, pt.y, 0, 0); if (WINDOWP (window) && !EQ (window, last_mouse_window) @@ -5491,8 +5491,7 @@ - (void)mouseMoved: (NSEvent *)e last_mouse_window = window; } - if (!note_mouse_movement (emacsframe, last_mouse_motion_position.x, - last_mouse_motion_position.y)) + if (!note_mouse_movement (emacsframe, pt.x, pt.y)) help_echo_string = previous_help_echo_string; XSETFRAME (frame, emacsframe); @@ -7416,9 +7415,6 @@ Convert an X font name (XLFD) to an NS font name. staticpro (&ns_display_name_list); ns_display_name_list = Qnil; - staticpro (&last_mouse_motion_frame); - last_mouse_motion_frame = Qnil; - DEFVAR_LISP ("ns-auto-hide-menu-bar", ns_auto_hide_menu_bar, doc: /* Non-nil means that the menu bar is hidden, but appears when the mouse is near. Only works on OSX 10.6 or later. */); diff --git a/src/w32term.c b/src/w32term.c index 97dda0e8c55..7c0a3987d1e 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -3304,22 +3304,22 @@ queue_notifications (struct input_event *event, W32Msg *msg, struct frame *f, the mainstream emacs code by setting mouse_moved. If not, ask for another motion event, so we can check again the next time it moves. */ -static MSG last_mouse_motion_event; -static Lisp_Object last_mouse_motion_frame; - static int note_mouse_movement (struct frame *frame, MSG *msg) { + struct w32_display_info *dpyinfo; int mouse_x = LOWORD (msg->lParam); int mouse_y = HIWORD (msg->lParam); - last_mouse_movement_time = msg->time; - memcpy (&last_mouse_motion_event, msg, sizeof (last_mouse_motion_event)); - XSETFRAME (last_mouse_motion_frame, frame); - - if (!FRAME_X_OUTPUT (frame)) + if (!FRAME_W32_OUTPUT (frame)) return 0; + dpyinfo = FRAME_DISPLAY_INFO (frame); + last_mouse_movement_time = msg->time; + dpyinfo->last_mouse_motion_frame = frame; + dpyinfo->last_mouse_motion_x = mouse_x; + dpyinfo->last_mouse_motion_y = mouse_y; + if (msg->hwnd != FRAME_W32_WINDOW (frame)) { frame->mouse_moved = 1; @@ -3363,16 +3363,6 @@ static void x_scroll_bar_report_motion (struct frame **, Lisp_Object *, unsigned long *); static void x_check_fullscreen (struct frame *); -static void -redo_mouse_highlight (void) -{ - if (!NILP (last_mouse_motion_frame) - && FRAME_LIVE_P (XFRAME (last_mouse_motion_frame))) - note_mouse_highlight (XFRAME (last_mouse_motion_frame), - LOWORD (last_mouse_motion_event.lParam), - HIWORD (last_mouse_motion_event.lParam)); -} - static void w32_define_cursor (Window window, Cursor cursor) { @@ -4683,7 +4673,7 @@ w32_read_socket (struct terminal *terminal, if (!msg.msg.wParam && msg.msg.hwnd == tip_window) { tip_window = NULL; - redo_mouse_highlight (); + x_redo_mouse_highlight (dpyinfo); } /* If window has been obscured or exposed by another window @@ -6649,9 +6639,6 @@ X toolkit. Possible values are: gtk, motif, xaw, or xaw3d. With MS Windows or Nextstep, the value is t. */); Vx_toolkit_scroll_bars = Qt; - staticpro (&last_mouse_motion_frame); - last_mouse_motion_frame = Qnil; - /* Tell Emacs about this window system. */ Fprovide (Qw32, Qnil); } diff --git a/src/w32term.h b/src/w32term.h index d29cab35ded..ef7f0842680 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -185,6 +185,14 @@ struct w32_display_info /* The frame where the mouse was last time we reported a mouse event. */ struct frame *last_mouse_frame; + + /* The frame where the mouse was last time we reported a mouse motion. */ + struct frame *last_mouse_motion_frame; + + /* Position where the mouse was last time we reported a motion. + This is a position on last_mouse_motion_frame. */ + int last_mouse_motion_x; + int last_mouse_motion_y; }; /* This is a chain of structures for all the displays currently in use. */ diff --git a/src/xterm.c b/src/xterm.c index 7d8c40b8cf0..9e10037685b 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -3860,19 +3860,20 @@ construct_mouse_click (struct input_event *result, the mainstream emacs code by setting mouse_moved. If not, ask for another motion event, so we can check again the next time it moves. */ -static XMotionEvent last_mouse_motion_event; -static Lisp_Object last_mouse_motion_frame; - static int note_mouse_movement (struct frame *frame, const XMotionEvent *event) { - last_mouse_movement_time = event->time; - last_mouse_motion_event = *event; - XSETFRAME (last_mouse_motion_frame, frame); + struct x_display_info *dpyinfo; if (!FRAME_X_OUTPUT (frame)) return 0; + dpyinfo = FRAME_DISPLAY_INFO (frame); + last_mouse_movement_time = event->time; + dpyinfo->last_mouse_motion_frame = frame; + dpyinfo->last_mouse_motion_x = event->x; + dpyinfo->last_mouse_motion_y = event->y; + if (event->window != FRAME_X_WINDOW (frame)) { frame->mouse_moved = 1; @@ -3902,23 +3903,6 @@ note_mouse_movement (struct frame *frame, const XMotionEvent *event) return 0; } - -/************************************************************************ - Mouse Face - ************************************************************************/ - -static void -redo_mouse_highlight (void) -{ - if (!NILP (last_mouse_motion_frame) - && FRAME_LIVE_P (XFRAME (last_mouse_motion_frame))) - note_mouse_highlight (XFRAME (last_mouse_motion_frame), - last_mouse_motion_event.x, - last_mouse_motion_event.y); -} - - - /* Return the current position of the mouse. *FP should be a frame which indicates which display to ask about. @@ -6223,7 +6207,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, if (event->xunmap.window == tip_window) { tip_window = 0; - redo_mouse_highlight (); + x_redo_mouse_highlight (dpyinfo); } f = x_top_window_to_frame (dpyinfo, event->xunmap.window); @@ -10705,9 +10689,6 @@ With MS Windows or Nextstep, the value is t. */); Vx_toolkit_scroll_bars = Qnil; #endif - staticpro (&last_mouse_motion_frame); - last_mouse_motion_frame = Qnil; - Qmodifier_value = intern_c_string ("modifier-value"); Qalt = intern_c_string ("alt"); Fput (Qalt, Qmodifier_value, make_number (alt_modifier)); diff --git a/src/xterm.h b/src/xterm.h index f1bfc883a64..9f01a840e53 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -308,9 +308,17 @@ struct x_display_info /* The frame where the mouse was last time we reported a mouse event. */ struct frame *last_mouse_frame; + /* The frame where the mouse was last time we reported a mouse motion. */ + struct frame *last_mouse_motion_frame; + /* Time of last user interaction as returned in X events on this display. */ Time last_user_time; + /* Position where the mouse was last time we reported a motion. + This is a position on last_mouse_motion_frame. */ + int last_mouse_motion_x; + int last_mouse_motion_y; + /* The gray pixmap. */ Pixmap gray; From 582ed56ca8ca6e4a6f4358deee3be8e227960031 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 18 Sep 2013 13:33:36 +0400 Subject: [PATCH 238/321] Ifdef away recent changes which aren't relevant to NS port. * dispextern.h (x_mouse_grabbed, x_redo_mouse_highlight) [!HAVE_NS]: Declare as such. * frame.c (x_mouse_grabbed, x_redo_mouse_highlight) [!HAVE_NS]: Define as such. --- src/ChangeLog | 8 ++++++++ src/dispextern.h | 5 ++++- src/frame.c | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 55345027811..9337e83a2a7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2013-09-18 Dmitry Antipov + + Ifdef away recent changes which aren't relevant to NS port. + * dispextern.h (x_mouse_grabbed, x_redo_mouse_highlight) + [!HAVE_NS]: Declare as such. + * frame.c (x_mouse_grabbed, x_redo_mouse_highlight) + [!HAVE_NS]: Define as such. + 2013-09-18 Dmitry Antipov * frame.c (x_redo_mouse_highlight): New function diff --git a/src/dispextern.h b/src/dispextern.h index 7244c84893d..e1d48b0e460 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3530,7 +3530,6 @@ enum resource_types RES_TYPE_BOOLEAN_NUMBER }; -extern bool x_mouse_grabbed (Display_Info *); extern Display_Info *check_x_display_info (Lisp_Object); extern Lisp_Object x_get_arg (Display_Info *, Lisp_Object, Lisp_Object, const char *, const char *class, @@ -3545,7 +3544,11 @@ extern Lisp_Object x_default_parameter (struct frame *, Lisp_Object, enum resource_types); extern char *x_get_string_resource (XrmDatabase, const char *, const char *); + +#ifndef HAVE_NS /* These both used on W32 and X only. */ +extern bool x_mouse_grabbed (Display_Info *); extern void x_redo_mouse_highlight (Display_Info *); +#endif /* HAVE_NS */ #endif /* HAVE_WINDOW_SYSTEM */ diff --git a/src/frame.c b/src/frame.c index 997cc9c73ae..78cd6914bc4 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3432,6 +3432,8 @@ x_set_alpha (struct frame *f, Lisp_Object arg, Lisp_Object oldval) return; } +#ifndef HAVE_NS + /* Non-zero if mouse is grabbed on DPYINFO and we know the frame where it is. */ @@ -3455,6 +3457,8 @@ x_redo_mouse_highlight (Display_Info *dpyinfo) dpyinfo->last_mouse_motion_y); } +#endif /* HAVE_NS */ + /* Subroutines of creating an X frame. */ /* Make sure that Vx_resource_name is set to a reasonable value. From 2fd6bdbecb5dbbacb47204c8d4fba82360f35135 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 06:19:31 -0400 Subject: [PATCH 239/321] Auto-commit of loaddefs files. --- lisp/mail/rmail.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index bb4801a523d..246ee5f566a 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -4668,7 +4668,7 @@ With prefix argument N moves forward N messages with these labels. ;;;*** -;;;### (autoloads (rmail-mime) "rmailmm" "rmailmm.el" "93951f748e43e1015da1b485088970ca") +;;;### (autoloads nil "rmailmm" "rmailmm.el" "8c14f4cf6e7dacb0c94fd300d814caf7") ;;; Generated autoloads from rmailmm.el (autoload 'rmail-mime "rmailmm" "\ From abd49271dbcbd1cc0ece36c6f78a142d91d2fa03 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 18 Sep 2013 17:18:39 +0400 Subject: [PATCH 240/321] * w32term.c (note_mouse_movement): Fix last change. --- src/w32term.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/w32term.c b/src/w32term.c index 7c0a3987d1e..805ee59ea4f 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -3311,7 +3311,7 @@ note_mouse_movement (struct frame *frame, MSG *msg) int mouse_x = LOWORD (msg->lParam); int mouse_y = HIWORD (msg->lParam); - if (!FRAME_W32_OUTPUT (frame)) + if (!FRAME_X_OUTPUT (frame)) return 0; dpyinfo = FRAME_DISPLAY_INFO (frame); From ee3ce8a7bbca3f9777c0f3eec6d09be465d051bf Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Wed, 18 Sep 2013 20:47:37 +0000 Subject: [PATCH 241/321] Fix fontification of type when followed by "const". * progmodes/cc-engine.el (c-forward-decl-or-cast-1): Don't exclude "known" types from fontification. --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/cc-engine.el | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index abe2ed75ad0..49f5d73442e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-09-18 Alan Mackenzie + + Fix fontification of type when followed by "const". + * progmodes/cc-engine.el (c-forward-decl-or-cast-1): Don't exclude + "known" types from fontification. + 2013-09-18 Glenn Morris * emacs-lisp/chart.el (x-display-color-cells): Declare. diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index c8a9c461a9d..582f7ef0a54 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -7408,7 +7408,11 @@ comment at the start of cc-engine.el for more info." ;; interactive refontification. (c-put-c-type-property (point) 'c-decl-arg-start)) - (when (and c-record-type-identifiers at-type (not (eq at-type t))) + (when (and c-record-type-identifiers at-type ;; (not (eq at-type t)) + ;; There seems no reason to exclude a token from + ;; fontification just because it's "a known type that can't + ;; be a name or other expression". 2013-09-18. + ) (let ((c-promote-possible-types t)) (save-excursion (goto-char type-start) From a022856b0f99e19a51caff163b477f22faf6418f Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 19:21:31 -0700 Subject: [PATCH 242/321] Address some "unused lexical argument" warnings in erc * erc/erc.el (erc-open-server-buffer-p): Actually use the `buffer' arg. * erc/erc-backend.el (erc-server-process-alive): Take optional `buffer' arg. * erc/erc-button.el (erc-button-click-button, erc-button-press-button): Mark unused arguments. --- lisp/erc/ChangeLog | 8 ++++++++ lisp/erc/erc-backend.el | 11 ++++++----- lisp/erc/erc-button.el | 4 ++-- lisp/erc/erc.el | 6 +++--- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 413969c31ec..93d958d765d 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,11 @@ +2013-09-19 Glenn Morris + + * erc-button.el (erc-button-click-button, erc-button-press-button): + Mark unused arguments. + + * erc.el (erc-open-server-buffer-p): Actually use the `buffer' arg. + * erc-backend.el (erc-server-process-alive): Take optional `buffer' arg. + 2013-09-18 Glenn Morris * erc-button.el (erc-button-add-buttons): Remove unused local vars. diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 4200d4aff7f..4e11f9548b9 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -497,11 +497,12 @@ The current buffer is given by BUFFER." erc-server-ping-handler) erc-server-ping-timer-alist))))) -(defun erc-server-process-alive () - "Return non-nil when `erc-server-process' is open or running." - (and erc-server-process - (processp erc-server-process) - (memq (process-status erc-server-process) '(run open)))) +(defun erc-server-process-alive (&optional buffer) + "Return non-nil when BUFFER has an `erc-server-process' open or running." + (with-current-buffer (or buffer (current-buffer)) + (and erc-server-process + (processp erc-server-process) + (memq (process-status erc-server-process) '(run open))))) ;;;; Connecting to a server diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el index 0edb771438a..751a35dfdff 100644 --- a/lisp/erc/erc-button.el +++ b/lisp/erc/erc-button.el @@ -407,7 +407,7 @@ REGEXP is the regular expression which matched for this button." ;; Since Emacs runs this directly, rather than with ;; widget-button-click, we need to fake an extra arg in the ;; interactive spec. -(defun erc-button-click-button (ignore event) +(defun erc-button-click-button (_ignore event) "Call `erc-button-press-button'." (interactive "P\ne") (save-excursion @@ -416,7 +416,7 @@ REGEXP is the regular expression which matched for this button." ;; XEmacs calls this via widget-button-press with a bunch of arguments ;; which we don't care about. -(defun erc-button-press-button (&rest ignore) +(defun erc-button-press-button (&rest _ignore) "Check text at point for a callback function. If the text at point has a `erc-callback' property, call it with the value of the `erc-data' text property." diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 771b7016bcd..4f719562c38 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -1312,13 +1312,13 @@ If BUFFER is nil, the current buffer is used." (and (eq major-mode 'erc-mode) (null (erc-default-target))))) -(defun erc-open-server-buffer-p (&optional buffer) ;FIXME: `buffer' is ignored! +(defun erc-open-server-buffer-p (&optional buffer) "Return non-nil if argument BUFFER is an ERC server buffer that has an open IRC process. If BUFFER is nil, the current buffer is used." - (and (erc-server-buffer-p) - (erc-server-process-alive))) + (and (erc-server-buffer-p buffer) + (erc-server-process-alive buffer))) (defun erc-query-buffer-p (&optional buffer) "Return non-nil if BUFFER is an ERC query buffer. From ce5033129f16b6554b922a63ef0d499ced55a223 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 19:28:20 -0700 Subject: [PATCH 243/321] Address some "unused lexical argument" warnings in eshell * eshell/em-ls.el (eshell-ls-use-in-dired): Use `symbol' arg. Fix (f)boundp mix-up. * eshell/em-smart.el (eshell-smart-scroll-window) (eshell-disable-after-change): * eshell/em-term.el (eshell-term-sentinel): Mark unused arg. --- lisp/ChangeLog | 9 +++++++++ lisp/eshell/em-ls.el | 20 +++++++++----------- lisp/eshell/em-smart.el | 6 ++++-- lisp/eshell/em-term.el | 3 ++- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 49f5d73442e..736df0d05f6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2013-09-19 Glenn Morris + + * eshell/em-ls.el (eshell-ls-use-in-dired): Use `symbol' arg. + Fix (f)boundp mix-up. + + * eshell/em-smart.el (eshell-smart-scroll-window) + (eshell-disable-after-change): + * eshell/em-term.el (eshell-term-sentinel): Mark unused arg. + 2013-09-18 Alan Mackenzie Fix fontification of type when followed by "const". diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el index 0e10d984f88..c2334d7bd74 100644 --- a/lisp/eshell/em-ls.el +++ b/lisp/eshell/em-ls.el @@ -50,9 +50,7 @@ properties to colorize its output based on the setting of (defcustom eshell-ls-unload-hook (list - (function - (lambda () - (fset 'insert-directory eshell-ls-orig-insert-directory)))) + (lambda () (fset 'insert-directory eshell-ls-orig-insert-directory))) "When unloading `eshell-ls', restore the definition of `insert-directory'." :type 'hook :group 'eshell-ls) @@ -77,17 +75,17 @@ This is useful for enabling human-readable format (-h), for example." :type '(repeat :tag "Arguments" string) :group 'eshell-ls) +;; FIXME should use advice, like ls-lisp.el does now. (defcustom eshell-ls-use-in-dired nil - "If non-nil, use `eshell-ls' to read directories in Dired." + "If non-nil, use `eshell-ls' to read directories in Dired. +Changing this without using customize has no effect." :set (lambda (symbol value) (if value - (unless (and (boundp 'eshell-ls-use-in-dired) - eshell-ls-use-in-dired) - (fset 'insert-directory 'eshell-ls-insert-directory)) - (when (and (boundp 'eshell-ls-insert-directory) - eshell-ls-use-in-dired) - (fset 'insert-directory eshell-ls-orig-insert-directory))) - (setq eshell-ls-use-in-dired value)) + (or (bound-and-true-p eshell-ls-use-in-dired) + (fset 'insert-directory 'eshell-ls-insert-directory)) + (and (fboundp 'eshell-ls-insert-directory) eshell-ls-use-in-dired + (fset 'insert-directory eshell-ls-orig-insert-directory))) + (set symbol value)) :type 'boolean :require 'em-ls :group 'eshell-ls) diff --git a/lisp/eshell/em-smart.el b/lisp/eshell/em-smart.el index e6fa463aec3..8d60444a889 100644 --- a/lisp/eshell/em-smart.el +++ b/lisp/eshell/em-smart.el @@ -194,7 +194,8 @@ The options are `begin', `after' or `end'." (add-hook 'eshell-post-command-hook 'eshell-smart-maybe-jump-to-end nil t)))) -(defun eshell-smart-scroll-window (wind start) +;; This is called by window-scroll-functions with two arguments. +(defun eshell-smart-scroll-window (wind _start) "Scroll the given Eshell window accordingly." (unless eshell-currently-handling-window (let ((inhibit-point-motion-hooks t) @@ -237,7 +238,8 @@ The options are `begin', `after' or `end'." (add-hook 'pre-command-hook 'eshell-smart-display-move nil t) (eshell-refresh-windows)) -(defun eshell-disable-after-change (b e l) +;; Called from after-change-functions with 3 arguments. +(defun eshell-disable-after-change (_b _e _l) "Disable smart display mode if the buffer changes in any way." (when eshell-smart-command-done (remove-hook 'pre-command-hook 'eshell-smart-display-move t) diff --git a/lisp/eshell/em-term.el b/lisp/eshell/em-term.el index 71329f083ee..bfc810f2d2a 100644 --- a/lisp/eshell/em-term.el +++ b/lisp/eshell/em-term.el @@ -189,7 +189,8 @@ allowed." (term-set-escape-char ?\C-x)))) nil) -(defun eshell-term-sentinel (proc string) +;; Process sentinels receive two arguments. +(defun eshell-term-sentinel (proc _string) "Destroy the buffer visiting PROC." (let ((proc-buf (process-buffer proc))) (when (and proc-buf (buffer-live-p proc-buf) From 0bc8d75810cd7ffbb768f6a734363977d6ce2007 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 19:32:27 -0700 Subject: [PATCH 244/321] * erc/erc-list.el (erc-list-handle-322): Mark unused argument. --- lisp/erc/ChangeLog | 1 + lisp/erc/erc-list.el | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 93d958d765d..d07bc341c92 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,6 +1,7 @@ 2013-09-19 Glenn Morris * erc-button.el (erc-button-click-button, erc-button-press-button): + * erc-list.el (erc-list-handle-322): Mark unused arguments. * erc.el (erc-open-server-buffer-p): Actually use the `buffer' arg. diff --git a/lisp/erc/erc-list.el b/lisp/erc/erc-list.el index c243073790e..6349772a59f 100644 --- a/lisp/erc/erc-list.el +++ b/lisp/erc/erc-list.el @@ -164,7 +164,8 @@ ;; Handle a "322" response. This response tells us about a single ;; channel. -(defun erc-list-handle-322 (proc parsed) +;; Called via erc-once-with-server-event with two arguments. +(defun erc-list-handle-322 (_proc parsed) (let* ((args (cdr (erc-response.command-args parsed))) (channel (car args)) (nusers (car (cdr args))) From 8e51b5d087612619a37e4fbb767d1dad8488f110 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 19:38:25 -0700 Subject: [PATCH 245/321] * eshell/em-hist.el (eshell-hist-parse-arguments): Remove unused arg `silent'. Update callers. --- lisp/ChangeLog | 3 +++ lisp/eshell/em-hist.el | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 736df0d05f6..29c32718f89 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-19 Glenn Morris + * eshell/em-hist.el (eshell-hist-parse-arguments): + Remove unused arg `silent'. Update callers. + * eshell/em-ls.el (eshell-ls-use-in-dired): Use `symbol' arg. Fix (f)boundp mix-up. diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el index 12ec8ce1f35..31eb1e1ff10 100644 --- a/lisp/eshell/em-hist.el +++ b/lisp/eshell/em-hist.el @@ -531,7 +531,7 @@ See also `eshell-read-history'." ((string= "%" ref) (error "`%%' history word designator not yet implemented")))) -(defun eshell-hist-parse-arguments (&optional silent b e) +(defun eshell-hist-parse-arguments (&optional b e) "Parse current command arguments in a history-code-friendly way." (let ((end (or e (point))) (begin (or b (save-excursion (eshell-bol) (point)))) @@ -571,7 +571,7 @@ See also `eshell-read-history'." (defun eshell-expand-history-references (beg end) "Parse and expand any history references in current input." - (let ((result (eshell-hist-parse-arguments t beg end))) + (let ((result (eshell-hist-parse-arguments beg end))) (when result (let ((textargs (nreverse (nth 0 result))) (posb (nreverse (nth 1 result))) @@ -699,7 +699,7 @@ matched." (here (point)) textargs) (insert hist) - (setq textargs (car (eshell-hist-parse-arguments nil here (point)))) + (setq textargs (car (eshell-hist-parse-arguments here (point)))) (delete-region here (point)) (if (string= nth "*") (if mth From 3261d4af3d61802556793bfbffd7cc5b73bdf023 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 19:42:36 -0700 Subject: [PATCH 246/321] * eshell/em-unix.el (eshell-remove-entries): Remove unused arg `path'. Update callers. --- lisp/ChangeLog | 3 +++ lisp/eshell/em-unix.el | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 29c32718f89..ed6bf661e26 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-19 Glenn Morris + * eshell/em-unix.el (eshell-remove-entries): + Remove unused arg `path'. Update callers. + * eshell/em-hist.el (eshell-hist-parse-arguments): Remove unused arg `silent'. Update callers. diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index 1548d181855..c278532f349 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -195,8 +195,8 @@ Otherwise, Emacs will attempt to use rsh to invoke du on the remote machine." (Info-menu (car args)) (setq args (cdr args))))) -(defun eshell-remove-entries (path files &optional top-level) - "From PATH, remove all of the given FILES, perhaps interactively." +(defun eshell-remove-entries (files &optional top-level) + "Remove all of the given FILES, perhaps interactively." (while files (if (string-match "\\`\\.\\.?\\'" (file-name-nondirectory (car files))) @@ -296,9 +296,9 @@ Remove (unlink) the FILE(s).") (y-or-n-p (format "rm: descend into directory `%s'? " entry))) - (eshell-remove-entries nil (list entry) t)) + (eshell-remove-entries (list entry) t)) (eshell-error (format "rm: %s: is a directory\n" entry))) - (eshell-remove-entries nil (list entry) t)))))) + (eshell-remove-entries (list entry) t)))))) (setq args (cdr args))) nil)) From 57a3a53d53bbe41dfb4341dc26c9335a61cc5f48 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 19:48:01 -0700 Subject: [PATCH 247/321] * eshell/esh-util.el (eshell-read-hosts-file): Use `filename' arg. (directory-files-and-attributes): Mark unused arg. --- lisp/ChangeLog | 3 +++ lisp/eshell/esh-util.el | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ed6bf661e26..5384713cb40 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-19 Glenn Morris + * eshell/esh-util.el (eshell-read-hosts-file): Use `filename' arg. + (directory-files-and-attributes): Mark unused arg. + * eshell/em-unix.el (eshell-remove-entries): Remove unused arg `path'. Update callers. diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index 6195f3976c1..4d53b3fb86d 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -477,10 +477,10 @@ list." (defalias 'eshell-user-name 'user-login-name) (defun eshell-read-hosts-file (filename) - "Read in the hosts from the /etc/hosts file." + "Read in the hosts from FILENAME, default `eshell-hosts-file'." (let (hosts) (with-temp-buffer - (insert-file-contents eshell-hosts-file) + (insert-file-contents (or filename eshell-hosts-file)) (goto-char (point-min)) (while (re-search-forward "^\\([^#[:space:]]+\\)\\s-+\\(\\S-+\\)\\(\\s-*\\(\\S-+\\)\\)?" nil t) @@ -563,9 +563,11 @@ Unless optional argument INPLACE is non-nil, return a new string." (defvar ange-cache) +;; Partial reimplementation of Emacs's builtin directory-files-and-attributes. +;; id-format not implemented. (and (featurep 'xemacs) (not (fboundp 'directory-files-and-attributes)) - (defun directory-files-and-attributes (directory &optional full match nosort id-format) + (defun directory-files-and-attributes (directory &optional full match nosort _id-format) "Return a list of names of files and their attributes in DIRECTORY. There are three optional arguments: If FULL is non-nil, return absolute file names. Otherwise return names From 390b7f9de6215917c6cf08e30ca898562d2517e3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 19:55:00 -0700 Subject: [PATCH 248/321] * eshell/esh-proc.el (eshell-reset-after-proc): Mark unused arg. --- lisp/ChangeLog | 3 ++- lisp/eshell/esh-proc.el | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5384713cb40..e2173ef57cc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -14,7 +14,8 @@ * eshell/em-smart.el (eshell-smart-scroll-window) (eshell-disable-after-change): - * eshell/em-term.el (eshell-term-sentinel): Mark unused arg. + * eshell/em-term.el (eshell-term-sentinel): + * eshell/esh-proc.el (eshell-reset-after-proc): Mark unused arg. 2013-09-18 Alan Mackenzie diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el index e77287c2f78..b72e6328d64 100644 --- a/lisp/eshell/esh-proc.el +++ b/lisp/eshell/esh-proc.el @@ -133,7 +133,11 @@ PROC and STATUS to both." ; (define-key eshell-command-map [(control ?z)] 'eshell-stop-process) (define-key eshell-command-map [(control ?\\)] 'eshell-quit-process)) -(defun eshell-reset-after-proc (proc status) +;; This used to be on `eshell-kill-hook', which calls its functions +;; with two arguments. Nowadays we call it directly in +;; `eshell-kill-process-function', but in case anyone still has it +;; on `eshell-kill-hook', _proc has to stay. +(defun eshell-reset-after-proc (_proc status) "Reset the command input location after a process terminates. The signals which will cause this to happen are matched by `eshell-reset-signals'." From 336b5a56bc0e840cd2a59f976b2f801d5a4a260c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 20:44:55 -0700 Subject: [PATCH 249/321] Revise previous esh-proc change * eshell/esh-proc.el (eshell-kill-process-function): Remove eshell-reset-after-proc from eshell-kill-hook if present. (eshell-reset-after-proc): Remove unused arg `proc'. --- lisp/ChangeLog | 7 +++++-- lisp/eshell/esh-proc.el | 14 ++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e2173ef57cc..97b22964601 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2013-09-19 Glenn Morris + * eshell/esh-proc.el (eshell-kill-process-function): + Remove eshell-reset-after-proc from eshell-kill-hook if present. + (eshell-reset-after-proc): Remove unused arg `proc'. + * eshell/esh-util.el (eshell-read-hosts-file): Use `filename' arg. (directory-files-and-attributes): Mark unused arg. @@ -14,8 +18,7 @@ * eshell/em-smart.el (eshell-smart-scroll-window) (eshell-disable-after-change): - * eshell/em-term.el (eshell-term-sentinel): - * eshell/esh-proc.el (eshell-reset-after-proc): Mark unused arg. + * eshell/em-term.el (eshell-term-sentinel): Mark unused arg. 2013-09-18 Alan Mackenzie diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el index b72e6328d64..ab7fd349893 100644 --- a/lisp/eshell/esh-proc.el +++ b/lisp/eshell/esh-proc.el @@ -116,9 +116,11 @@ information, for example." (defun eshell-kill-process-function (proc status) "Function run when killing a process. Runs `eshell-reset-after-proc' and `eshell-kill-hook', passing arguments -PROC and STATUS to both." - (or (memq 'eshell-reset-after-proc eshell-kill-hook) - (eshell-reset-after-proc proc status)) +PROC and STATUS to functions on the latter." + ;; Was there till 24.1, but it is not optional. + (if (memq 'eshell-reset-after-proc eshell-kill-hook) + (setq eshell-kill-hook (delq 'eshell-reset-after-proc eshell-kill-hook))) + (eshell-reset-after-proc status) (run-hook-with-args 'eshell-kill-hook proc status)) (defun eshell-proc-initialize () @@ -133,11 +135,7 @@ PROC and STATUS to both." ; (define-key eshell-command-map [(control ?z)] 'eshell-stop-process) (define-key eshell-command-map [(control ?\\)] 'eshell-quit-process)) -;; This used to be on `eshell-kill-hook', which calls its functions -;; with two arguments. Nowadays we call it directly in -;; `eshell-kill-process-function', but in case anyone still has it -;; on `eshell-kill-hook', _proc has to stay. -(defun eshell-reset-after-proc (_proc status) +(defun eshell-reset-after-proc (status) "Reset the command input location after a process terminates. The signals which will cause this to happen are matched by `eshell-reset-signals'." From 091f1e1f29214ab169d60f1f82f1346c1742743b Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Thu, 19 Sep 2013 09:21:32 +0400 Subject: [PATCH 250/321] Do not use external array to process X scroll bar messages. * xterm.c (scroll_bar_windows, scroll_bar_windows_size): Remove. (x_send_scroll_bar_event): Pack window pointer into two slots of XClientMessageEvent if we're 64-bit. Adjust comment. (x_scroll_bar_to_input_event): Unpack accordingly. --- src/ChangeLog | 8 +++++ src/xterm.c | 81 ++++++++++++++++++++++++++------------------------- 2 files changed, 49 insertions(+), 40 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 9337e83a2a7..2a931693f62 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2013-09-19 Dmitry Antipov + + Do not use external array to process X scroll bar messages. + * xterm.c (scroll_bar_windows, scroll_bar_windows_size): Remove. + (x_send_scroll_bar_event): Pack window pointer into two slots + of XClientMessageEvent if we're 64-bit. Adjust comment. + (x_scroll_bar_to_input_event): Unpack accordingly. + 2013-09-18 Dmitry Antipov Ifdef away recent changes which aren't relevant to NS port. diff --git a/src/xterm.c b/src/xterm.c index 9e10037685b..f52466f52d1 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -4266,13 +4266,6 @@ xt_action_hook (Widget widget, XtPointer client_data, String action_name, } #endif /* not USE_GTK */ -/* A vector of windows used for communication between - x_send_scroll_bar_event and x_scroll_bar_to_input_event. */ - -static struct window **scroll_bar_windows; -static ptrdiff_t scroll_bar_windows_size; - - /* Send a client message with message type Xatom_Scrollbar for a scroll action to the frame of WINDOW. PART is a value identifying the part of the scroll bar that was clicked on. PORTION is the @@ -4282,10 +4275,9 @@ static void x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole) { XEvent event; - XClientMessageEvent *ev = (XClientMessageEvent *) &event; + XClientMessageEvent *ev = &event.xclient; struct window *w = XWINDOW (window); struct frame *f = XFRAME (w->frame); - ptrdiff_t i; block_input (); @@ -4296,33 +4288,30 @@ x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole) ev->window = FRAME_X_WINDOW (f); ev->format = 32; - /* We can only transfer 32 bits in the XClientMessageEvent, which is - not enough to store a pointer or Lisp_Object on a 64 bit system. - So, store the window in scroll_bar_windows and pass the index - into that array in the event. */ - for (i = 0; i < scroll_bar_windows_size; ++i) - if (scroll_bar_windows[i] == NULL) - break; + /* 32-bit X client on a 64-bit X server can pass window pointer + as is. 64-bit client on a 32-bit X server is in trouble + because pointer does not fit and will be truncated while + passing through the server. So we should use two slots + and hope that X12 will resolve such an issues someday. */ - if (i == scroll_bar_windows_size) + if (BITS_PER_LONG > 32) { - ptrdiff_t old_nbytes = - scroll_bar_windows_size * sizeof *scroll_bar_windows; - ptrdiff_t nbytes; - enum { XClientMessageEvent_MAX = 0x7fffffff }; - scroll_bar_windows = - xpalloc (scroll_bar_windows, &scroll_bar_windows_size, 1, - XClientMessageEvent_MAX, sizeof *scroll_bar_windows); - nbytes = scroll_bar_windows_size * sizeof *scroll_bar_windows; - memset (&scroll_bar_windows[i], 0, nbytes - old_nbytes); + union { + int i[2]; + void *v; + } val; + val.v = w; + ev->data.l[0] = val.i[0]; + ev->data.l[1] = val.i[1]; } - - scroll_bar_windows[i] = w; - ev->data.l[0] = (long) i; - ev->data.l[1] = (long) part; - ev->data.l[2] = (long) 0; - ev->data.l[3] = (long) portion; - ev->data.l[4] = (long) whole; + else + { + ev->data.l[0] = 0; + ev->data.l[1] = (long) w; + } + ev->data.l[2] = part; + ev->data.l[3] = portion; + ev->data.l[4] = whole; /* Make Xt timeouts work while the scroll bar is active. */ #ifdef USE_X_TOOLKIT @@ -4345,12 +4334,24 @@ static void x_scroll_bar_to_input_event (const XEvent *event, struct input_event *ievent) { - XClientMessageEvent *ev = (XClientMessageEvent *) event; + const XClientMessageEvent *ev = &event->xclient; Lisp_Object window; struct window *w; - w = scroll_bar_windows[ev->data.l[0]]; - scroll_bar_windows[ev->data.l[0]] = NULL; + /* See the comment in the function above. */ + + if (BITS_PER_LONG > 32) + { + union { + int i[2]; + void *v; + } val; + val.i[0] = ev->data.l[0]; + val.i[1] = ev->data.l[1]; + w = val.v; + } + else + w = (void *) ev->data.l[1]; XSETWINDOW (window, w); @@ -4363,10 +4364,10 @@ x_scroll_bar_to_input_event (const XEvent *event, ievent->timestamp = XtLastTimestampProcessed (FRAME_X_DISPLAY (XFRAME (w->frame))); #endif - ievent->part = ev->data.l[1]; - ievent->code = ev->data.l[2]; - ievent->x = make_number ((int) ev->data.l[3]); - ievent->y = make_number ((int) ev->data.l[4]); + ievent->code = 0; + ievent->part = ev->data.l[2]; + ievent->x = make_number (ev->data.l[3]); + ievent->y = make_number (ev->data.l[4]); ievent->modifiers = 0; } From 72fd28777da23f5d3c67344e98a6477f0397316d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 18 Sep 2013 23:56:47 -0700 Subject: [PATCH 251/321] * eshell/em-unix.el (eshell-remove-entries): Rename argument to avoid name-clash with global `top-level'. --- lisp/ChangeLog | 3 +++ lisp/eshell/em-unix.el | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 97b22964601..e6eeca49d66 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-09-19 Glenn Morris + * eshell/em-unix.el (eshell-remove-entries): + Rename argument to avoid name-clash with global `top-level'. + * eshell/esh-proc.el (eshell-kill-process-function): Remove eshell-reset-after-proc from eshell-kill-hook if present. (eshell-reset-after-proc): Remove unused arg `proc'. diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index c278532f349..1cf40d58a49 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -195,12 +195,12 @@ Otherwise, Emacs will attempt to use rsh to invoke du on the remote machine." (Info-menu (car args)) (setq args (cdr args))))) -(defun eshell-remove-entries (files &optional top-level) +(defun eshell-remove-entries (files &optional toplevel) "Remove all of the given FILES, perhaps interactively." (while files (if (string-match "\\`\\.\\.?\\'" (file-name-nondirectory (car files))) - (if top-level + (if toplevel (eshell-error "rm: cannot remove `.' or `..'\n")) (if (and (file-directory-p (car files)) (not (file-symlink-p (car files)))) From f75447737926fd8c898b9e0b77f581f4993a52f1 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 19 Sep 2013 00:14:53 -0700 Subject: [PATCH 252/321] * emacs-lisp/eieio.el (class-parent): Don't use defalias with macros. --- lisp/ChangeLog | 2 ++ lisp/emacs-lisp/eieio.el | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e6eeca49d66..fe5e82cba67 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-19 Glenn Morris + * emacs-lisp/eieio.el (class-parent): Don't use defalias with macros. + * eshell/em-unix.el (eshell-remove-entries): Rename argument to avoid name-clash with global `top-level'. diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index fc5da3198f9..e7ec547af9b 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -322,7 +322,10 @@ The CLOS function `class-direct-subclasses' is aliased to this function." (defmacro eieio-class-parent (class) "Return first parent class to CLASS. (overload of variable)." `(car (eieio-class-parents ,class))) -(define-obsolete-function-alias 'class-parent #'eieio-class-parent "24.4") + +(defmacro class-parent (class) + (declare (obsolete eieio-class-parent "24.4")) + '(eieio-class-parent class)) (defun same-class-p (obj class) "Return t if OBJ is of class-type CLASS." (eieio--check-type class-p class) From ced135ebdbfb0eea719ce165a454e7ff0b681e88 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Thu, 19 Sep 2013 11:48:53 +0400 Subject: [PATCH 253/321] * xterm.h (struct x_display_info): New members last_mouse_glyph_frame, last_mouse_scroll_bar, last_mouse_glyph and last_mouse_movement_time, going to replace static variables below. Adjust comments. * xterm.c (last_mouse_glyph, last_mouse_glyph_frame) (last_mouse_scroll_bar, last_mouse_movement_time): Remove. (note_mouse_movement, XTmouse_position, x_scroll_bar_note_movement) (x_scroll_bar_report_motion, handle_one_xevent, syms_of_xterm): Related users changed. * w32term.h (struct w32_display_info): New members last_mouse_glyph_frame, last_mouse_scroll_bar, last_mouse_scroll_bar_pos, last_mouse_glyph and last_mouse_movement_time, going to replace static variables below. Adjust comments. * w32term.c (last_mouse_glyph_frame, last_mouse_scroll_bar) (last_mouse_scroll_bar_pos, last_mouse_glyph, last_mouse_movement_time): Remove. (note_mouse_movement, w32_mouse_position, w32_scroll_bar_handle_click) (x_scroll_bar_report_motion, syms_of_w32term): Related users changed. * nsterm.h (struct ns_display_info): New members last_mouse_glyph, last_mouse_movement_time and last_mouse_scroll_bar, going to replace static variables below. * nsterm.m (last_mouse_glyph, last_mouse_movement_time) (last_mouse_scroll_bar): Remove. (note_mouse_movement, ns_mouse_position, mouseMoved, mouseEntered) (mouseExited): Related users changed. --- src/ChangeLog | 27 +++++++++ src/nsterm.h | 13 +++++ src/nsterm.m | 49 +++++++++-------- src/w32term.c | 77 +++++++++----------------- src/w32term.h | 17 ++++++ src/xterm.c | 148 +++++++++++++++++++------------------------------- src/xterm.h | 20 ++++++- 7 files changed, 185 insertions(+), 166 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 2a931693f62..d900818231e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,30 @@ +2013-09-19 Dmitry Antipov + + * xterm.h (struct x_display_info): New members last_mouse_glyph_frame, + last_mouse_scroll_bar, last_mouse_glyph and last_mouse_movement_time, + going to replace static variables below. Adjust comments. + * xterm.c (last_mouse_glyph, last_mouse_glyph_frame) + (last_mouse_scroll_bar, last_mouse_movement_time): Remove. + (note_mouse_movement, XTmouse_position, x_scroll_bar_note_movement) + (x_scroll_bar_report_motion, handle_one_xevent, syms_of_xterm): + Related users changed. + * w32term.h (struct w32_display_info): New members last_mouse_glyph_frame, + last_mouse_scroll_bar, last_mouse_scroll_bar_pos, last_mouse_glyph and + last_mouse_movement_time, going to replace static variables below. + Adjust comments. + * w32term.c (last_mouse_glyph_frame, last_mouse_scroll_bar) + (last_mouse_scroll_bar_pos, last_mouse_glyph, last_mouse_movement_time): + Remove. + (note_mouse_movement, w32_mouse_position, w32_scroll_bar_handle_click) + (x_scroll_bar_report_motion, syms_of_w32term): Related users changed. + * nsterm.h (struct ns_display_info): New members last_mouse_glyph, + last_mouse_movement_time and last_mouse_scroll_bar, going to replace + static variables below. + * nsterm.m (last_mouse_glyph, last_mouse_movement_time) + (last_mouse_scroll_bar): Remove. + (note_mouse_movement, ns_mouse_position, mouseMoved, mouseEntered) + (mouseExited): Related users changed. + 2013-09-19 Dmitry Antipov Do not use external array to process X scroll bar messages. diff --git a/src/nsterm.h b/src/nsterm.h index 7a626c75fe6..9f7767b312e 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -608,6 +608,19 @@ struct ns_display_info This is a position on last_mouse_motion_frame. */ int last_mouse_motion_x; int last_mouse_motion_y; + + /* Where the mouse was last time we reported a mouse position. */ + NSRect last_mouse_glyph; + + /* Time of last mouse movement. */ + Time last_mouse_movement_time; + + /* The scroll bar in which the last motion event occurred. */ +#ifdef __OBJC__ + EmacsScroller *last_mouse_scroll_bar; +#else + void *last_mouse_scroll_bar; +#endif }; /* This is a chain of structures for all the NS displays currently in use. */ diff --git a/src/nsterm.m b/src/nsterm.m index dc27fd09e30..5c9800f5416 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -191,9 +191,6 @@ Updated by Christian Limpach (chris@nice.ch) long context_menu_value = 0; /* display update */ -static NSRect last_mouse_glyph; -static Time last_mouse_movement_time = 0; -static EmacsScroller *last_mouse_scroll_bar = nil; static struct frame *ns_updating_frame; static NSView *focus_view = NULL; static int ns_window_num = 0; @@ -1738,24 +1735,26 @@ Free a pool and temporary objects it refers to (callable from C) known as last_mouse_glyph. ------------------------------------------------------------------------ */ { + struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame); + NSRect *r; + // NSTRACE (note_mouse_movement); - FRAME_DISPLAY_INFO (frame)->last_mouse_motion_frame = frame; + dpyinfo->last_mouse_motion_frame = frame; + r = &dpyinfo->last_mouse_glyph; /* Note, this doesn't get called for enter/leave, since we don't have a position. Those are taken care of in the corresponding NSView methods. */ /* has movement gone beyond last rect we were tracking? */ - if (x < last_mouse_glyph.origin.x || - x >= (last_mouse_glyph.origin.x + last_mouse_glyph.size.width) || - y < last_mouse_glyph.origin.y || - y >= (last_mouse_glyph.origin.y + last_mouse_glyph.size.height)) + if (x < r->origin.x || x >= r->origin.x + r->size.width + || y < r->origin.y || y >= r->origin.y + r->size.height) { - ns_update_begin(frame); + ns_update_begin (frame); frame->mouse_moved = 1; note_mouse_highlight (frame, x, y); - remember_mouse_glyph (frame, x, y, &last_mouse_glyph); - ns_update_end(frame); + remember_mouse_glyph (frame, x, y, r); + ns_update_end (frame); return 1; } @@ -1792,14 +1791,15 @@ Free a pool and temporary objects it refers to (callable from C) block_input (); - if (last_mouse_scroll_bar != nil && insist == 0) + if (dpyinfo->last_mouse_scroll_bar != nil && insist == 0) { /* TODO: we do not use this path at the moment because drag events will go directly to the EmacsScroller. Leaving code in for now. */ - [last_mouse_scroll_bar getMouseMotionPart: (int *)part window: bar_window - x: x y: y]; - if (time) *time = last_mouse_movement_time; - last_mouse_scroll_bar = nil; + [dpyinfo->last_mouse_scroll_bar + getMouseMotionPart: (int *)part window: bar_window x: x y: y]; + if (time) + *time = dpyinfo->last_mouse_movement_time; + dpyinfo->last_mouse_scroll_bar = nil; } else { @@ -1809,7 +1809,7 @@ Free a pool and temporary objects it refers to (callable from C) && FRAME_NS_DISPLAY (XFRAME (frame)) == FRAME_NS_DISPLAY (*fp)) XFRAME (frame)->mouse_moved = 0; - last_mouse_scroll_bar = nil; + dpyinfo->last_mouse_scroll_bar = nil; if (dpyinfo->last_mouse_frame && FRAME_LIVE_P (dpyinfo->last_mouse_frame)) f = dpyinfo->last_mouse_frame; @@ -1823,7 +1823,8 @@ Free a pool and temporary objects it refers to (callable from C) position = [[view window] mouseLocationOutsideOfEventStream]; position = [view convertPoint: position fromView: nil]; - remember_mouse_glyph (f, position.x, position.y, &last_mouse_glyph); + remember_mouse_glyph (f, position.x, position.y, + &dpyinfo->last_mouse_glyph); /*fprintf (stderr, "ns_mouse_position: %.0f, %.0f\n", position.x, position.y); */ if (bar_window) *bar_window = Qnil; @@ -1831,7 +1832,8 @@ Free a pool and temporary objects it refers to (callable from C) if (x) XSETINT (*x, lrint (position.x)); if (y) XSETINT (*y, lrint (position.y)); - if (time) *time = last_mouse_movement_time; + if (time) + *time = dpyinfo->last_mouse_movement_time; *fp = f; } } @@ -5452,7 +5454,7 @@ - (void)mouseMoved: (NSEvent *)e // NSTRACE (mouseMoved); - last_mouse_movement_time = EV_TIMESTAMP (e); + dpyinfo->last_mouse_movement_time = EV_TIMESTAMP (e); pt = [self convertPoint: [e locationInWindow] fromView: nil]; dpyinfo->last_mouse_motion_x = pt.x; dpyinfo->last_mouse_motion_y = pt.y; @@ -6336,7 +6338,9 @@ - (void) setFSValue: (int)value - (void)mouseEntered: (NSEvent *)theEvent { NSTRACE (mouseEntered); - last_mouse_movement_time = EV_TIMESTAMP (theEvent); + if (emacsframe) + FRAME_DISPLAY_INFO (emacsframe)->last_mouse_movement_time + = EV_TIMESTAMP (theEvent); } @@ -6349,7 +6353,8 @@ - (void)mouseExited: (NSEvent *)theEvent if (!hlinfo) return; - last_mouse_movement_time = EV_TIMESTAMP (theEvent); + FRAME_DISPLAY_INFO (emacsframe)->last_mouse_movement_time + = EV_TIMESTAMP (theEvent); if (emacsframe == hlinfo->mouse_face_mouse_frame) { diff --git a/src/w32term.c b/src/w32term.c index 805ee59ea4f..3377a8911e2 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -171,31 +171,6 @@ int last_scroll_bar_drag_pos; /* Keyboard code page - may be changed by language-change events. */ int w32_keyboard_codepage; -/* Mouse movement. */ - -/* Where the mouse was last time we reported a mouse event. */ -static RECT last_mouse_glyph; -static struct frame *last_mouse_glyph_frame; - -/* The scroll bar in which the last motion event occurred. - - If the last motion event occurred in a scroll bar, we set this - so w32_mouse_position can know whether to report a scroll bar motion or - an ordinary motion. - - If the last motion event didn't occur in a scroll bar, we set this - to Qnil, to tell w32_mouse_position to return an ordinary motion event. */ -static Lisp_Object last_mouse_scroll_bar; -static int last_mouse_scroll_bar_pos; - -/* This is a hack. We would really prefer that w32_mouse_position would - return the time associated with the position it returns, but there - doesn't seem to be any way to wrest the time-stamp from the server - along with the position query. So, we just keep track of the time - of the last movement we received, and return that in hopes that - it's somewhat accurate. */ -static Time last_mouse_movement_time; - /* Incremented by w32_read_socket whenever it really tries to read events. */ static int volatile input_signal_count; @@ -3310,12 +3285,13 @@ note_mouse_movement (struct frame *frame, MSG *msg) struct w32_display_info *dpyinfo; int mouse_x = LOWORD (msg->lParam); int mouse_y = HIWORD (msg->lParam); + RECT *r; if (!FRAME_X_OUTPUT (frame)) return 0; dpyinfo = FRAME_DISPLAY_INFO (frame); - last_mouse_movement_time = msg->time; + dpyinfo->last_mouse_movement_time = msg->time; dpyinfo->last_mouse_motion_frame = frame; dpyinfo->last_mouse_motion_x = mouse_x; dpyinfo->last_mouse_motion_y = mouse_y; @@ -3323,28 +3299,27 @@ note_mouse_movement (struct frame *frame, MSG *msg) if (msg->hwnd != FRAME_W32_WINDOW (frame)) { frame->mouse_moved = 1; - last_mouse_scroll_bar = Qnil; + dpyinfo->last_mouse_scroll_bar = NULL; note_mouse_highlight (frame, -1, -1); - last_mouse_glyph_frame = 0; + dpyinfo->last_mouse_glyph_frame = NULL; return 1; } /* Has the mouse moved off the glyph it was on at the last sighting? */ - if (frame != last_mouse_glyph_frame - || mouse_x < last_mouse_glyph.left - || mouse_x >= last_mouse_glyph.right - || mouse_y < last_mouse_glyph.top - || mouse_y >= last_mouse_glyph.bottom) + r = &dpyinfo->last_mouse_glyph; + if (frame != dpyinfo->last_mouse_glyph_frame + || mouse_x < r->left || mouse_x >= r->right + || mouse_y < r->top || mouse_y >= r->bottom) { frame->mouse_moved = 1; - last_mouse_scroll_bar = Qnil; + dpyinfo->last_mouse_scroll_bar = NULL; note_mouse_highlight (frame, mouse_x, mouse_y); /* Remember the mouse position here, as w32_mouse_position only gets called when mouse tracking is enabled but we also need to keep track of the mouse for help_echo and highlighting at other times. */ - remember_mouse_glyph (frame, mouse_x, mouse_y, &last_mouse_glyph); - last_mouse_glyph_frame = frame; + remember_mouse_glyph (frame, mouse_x, mouse_y, r); + dpyinfo->last_mouse_glyph_frame = frame; return 1; } @@ -3398,7 +3373,7 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, block_input (); - if (! NILP (last_mouse_scroll_bar) && insist == 0) + if (dpyinfo->last_mouse_scroll_bar && insist == 0) x_scroll_bar_report_motion (fp, bar_window, part, x, y, time); else { @@ -3410,7 +3385,7 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, FOR_EACH_FRAME (tail, frame) XFRAME (frame)->mouse_moved = 0; - last_mouse_scroll_bar = Qnil; + dpyinfo->last_mouse_scroll_bar = NULL; GetCursorPos (&pt); @@ -3448,16 +3423,17 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, on it, i.e. into the same rectangles that matrices on the frame are divided into. */ + dpyinfo = FRAME_DISPLAY_INFO (f1); ScreenToClient (FRAME_W32_WINDOW (f1), &pt); - remember_mouse_glyph (f1, pt.x, pt.y, &last_mouse_glyph); - last_mouse_glyph_frame = f1; + remember_mouse_glyph (f1, pt.x, pt.y, &dpyinfo->last_mouse_glyph); + dpyinfo->last_mouse_glyph_frame = f1; *bar_window = Qnil; *part = 0; *fp = f1; XSETINT (*x, pt.x); XSETINT (*y, pt.y); - *time = last_mouse_movement_time; + *time = dpyinfo->last_mouse_movement_time; } } } @@ -4005,6 +3981,7 @@ w32_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg, { int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); + struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); int y; int dragging = !NILP (bar->dragging); SCROLLINFO si; @@ -4016,9 +3993,7 @@ w32_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg, y = si.nPos; bar->dragging = Qnil; - - - last_mouse_scroll_bar_pos = msg->msg.wParam; + FRAME_DISPLAY_INFO (f)->last_mouse_scroll_bar_pos = msg->msg.wParam; switch (LOWORD (msg->msg.wParam)) { @@ -4101,7 +4076,8 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window, Lisp_Object *x, Lisp_Object *y, unsigned long *time) { - struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); + struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp); + struct scroll_bar *bar = dpyinfo->last_mouse_scroll_bar; Window w = SCROLL_BAR_W32_WINDOW (bar); struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); int pos; @@ -4120,13 +4096,13 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window, pos = si.nPos; top_range = si.nMax - si.nPage + 1; - switch (LOWORD (last_mouse_scroll_bar_pos)) + switch (LOWORD (dpyinfo->last_mouse_scroll_bar_pos)) { case SB_THUMBPOSITION: case SB_THUMBTRACK: *part = scroll_bar_handle; if (VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)) <= 0xffff) - pos = HIWORD (last_mouse_scroll_bar_pos); + pos = HIWORD (dpyinfo->last_mouse_scroll_bar_pos); break; case SB_LINEDOWN: *part = scroll_bar_handle; @@ -4141,9 +4117,9 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window, XSETINT (*y, top_range); f->mouse_moved = 0; - last_mouse_scroll_bar = Qnil; + dpyinfo->last_mouse_scroll_bar = NULL; - *time = last_mouse_movement_time; + *time = dpyinfo->last_mouse_movement_time; unblock_input (); } @@ -6553,9 +6529,6 @@ syms_of_w32term (void) staticpro (&w32_display_name_list); w32_display_name_list = Qnil; - staticpro (&last_mouse_scroll_bar); - last_mouse_scroll_bar = Qnil; - DEFSYM (Qvendor_specific_keysyms, "vendor-specific-keysyms"); DEFSYM (Qadded, "added"); diff --git a/src/w32term.h b/src/w32term.h index ef7f0842680..21b9b6894a7 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -189,10 +189,27 @@ struct w32_display_info /* The frame where the mouse was last time we reported a mouse motion. */ struct frame *last_mouse_motion_frame; + /* The frame where the mouse was last time we reported a mouse position. */ + struct frame *last_mouse_glyph_frame; + /* Position where the mouse was last time we reported a motion. This is a position on last_mouse_motion_frame. */ int last_mouse_motion_x; int last_mouse_motion_y; + + /* Where the mouse was last time we reported a mouse position. + This is a rectangle on last_mouse_glyph_frame. */ + RECT last_mouse_glyph; + + /* The scroll bar in which the last motion event occurred. */ + struct scroll_bar *last_mouse_scroll_bar; + + /* Mouse position on the scroll bar above. + FIXME: shouldn't it be a member of struct scroll_bar? */ + int last_mouse_scroll_bar_pos; + + /* Time of last mouse movement. */ + Time last_mouse_movement_time; }; /* This is a chain of structures for all the displays currently in use. */ diff --git a/src/xterm.c b/src/xterm.c index f52466f52d1..963cd4d8896 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -172,52 +172,6 @@ static bool toolkit_scroll_bar_interaction; static Time ignore_next_mouse_click_timeout; -/* Mouse movement. - - Formerly, we used PointerMotionHintMask (in standard_event_mask) - so that we would have to call XQueryPointer after each MotionNotify - event to ask for another such event. However, this made mouse tracking - slow, and there was a bug that made it eventually stop. - - Simply asking for MotionNotify all the time seems to work better. - - In order to avoid asking for motion events and then throwing most - of them away or busy-polling the server for mouse positions, we ask - the server for pointer motion hints. This means that we get only - one event per group of mouse movements. "Groups" are delimited by - other kinds of events (focus changes and button clicks, for - example), or by XQueryPointer calls; when one of these happens, we - get another MotionNotify event the next time the mouse moves. This - is at least as efficient as getting motion events when mouse - tracking is on, and I suspect only negligibly worse when tracking - is off. */ - -/* Where the mouse was last time we reported a mouse event. */ - -static XRectangle last_mouse_glyph; -static struct frame *last_mouse_glyph_frame; - -/* The scroll bar in which the last X motion event occurred. - - If the last X motion event occurred in a scroll bar, we set this so - XTmouse_position can know whether to report a scroll bar motion or - an ordinary motion. - - If the last X motion event didn't occur in a scroll bar, we set - this to Qnil, to tell XTmouse_position to return an ordinary motion - event. */ - -static Lisp_Object last_mouse_scroll_bar; - -/* This is a hack. We would really prefer that XTmouse_position would - return the time associated with the position it returns, but there - doesn't seem to be any way to wrest the time-stamp from the server - along with the position query. So, we just keep track of the time - of the last movement we received, and return that in hopes that - it's somewhat accurate. */ - -static Time last_mouse_movement_time; - /* Incremented by XTread_socket whenever it really tries to read events. */ @@ -3820,9 +3774,25 @@ x_get_keysym_name (int keysym) return value; } +/* Mouse clicks and mouse movement. Rah. - -/* Mouse clicks and mouse movement. Rah. */ + Formerly, we used PointerMotionHintMask (in standard_event_mask) + so that we would have to call XQueryPointer after each MotionNotify + event to ask for another such event. However, this made mouse tracking + slow, and there was a bug that made it eventually stop. + + Simply asking for MotionNotify all the time seems to work better. + + In order to avoid asking for motion events and then throwing most + of them away or busy-polling the server for mouse positions, we ask + the server for pointer motion hints. This means that we get only + one event per group of mouse movements. "Groups" are delimited by + other kinds of events (focus changes and button clicks, for + example), or by XQueryPointer calls; when one of these happens, we + get another MotionNotify event the next time the mouse moves. This + is at least as efficient as getting motion events when mouse + tracking is on, and I suspect only negligibly worse when tracking + is off. */ /* Prepare a mouse-event in *RESULT for placement in the input queue. @@ -3863,13 +3833,14 @@ construct_mouse_click (struct input_event *result, static int note_mouse_movement (struct frame *frame, const XMotionEvent *event) { + XRectangle *r; struct x_display_info *dpyinfo; if (!FRAME_X_OUTPUT (frame)) return 0; dpyinfo = FRAME_DISPLAY_INFO (frame); - last_mouse_movement_time = event->time; + dpyinfo->last_mouse_movement_time = event->time; dpyinfo->last_mouse_motion_frame = frame; dpyinfo->last_mouse_motion_x = event->x; dpyinfo->last_mouse_motion_y = event->y; @@ -3877,26 +3848,25 @@ note_mouse_movement (struct frame *frame, const XMotionEvent *event) if (event->window != FRAME_X_WINDOW (frame)) { frame->mouse_moved = 1; - last_mouse_scroll_bar = Qnil; + dpyinfo->last_mouse_scroll_bar = NULL; note_mouse_highlight (frame, -1, -1); - last_mouse_glyph_frame = 0; + dpyinfo->last_mouse_glyph_frame = NULL; return 1; } /* Has the mouse moved off the glyph it was on at the last sighting? */ - if (frame != last_mouse_glyph_frame - || event->x < last_mouse_glyph.x - || event->x >= last_mouse_glyph.x + last_mouse_glyph.width - || event->y < last_mouse_glyph.y - || event->y >= last_mouse_glyph.y + last_mouse_glyph.height) + r = &dpyinfo->last_mouse_glyph; + if (frame != dpyinfo->last_mouse_glyph_frame + || event->x < r->x || event->x >= r->x + r->width + || event->y < r->y || event->y >= r->y + r->height) { frame->mouse_moved = 1; - last_mouse_scroll_bar = Qnil; + dpyinfo->last_mouse_scroll_bar = NULL; note_mouse_highlight (frame, event->x, event->y); /* Remember which glyph we're now on. */ - remember_mouse_glyph (frame, event->x, event->y, &last_mouse_glyph); - last_mouse_glyph_frame = frame; + remember_mouse_glyph (frame, event->x, event->y, r); + dpyinfo->last_mouse_glyph_frame = frame; return 1; } @@ -3933,7 +3903,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, block_input (); - if (! NILP (last_mouse_scroll_bar) && insist == 0) + if (dpyinfo->last_mouse_scroll_bar && insist == 0) x_scroll_bar_report_motion (fp, bar_window, part, x, y, timestamp); else { @@ -3951,7 +3921,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, && FRAME_X_DISPLAY (XFRAME (frame)) == FRAME_X_DISPLAY (*fp)) XFRAME (frame)->mouse_moved = 0; - last_mouse_scroll_bar = Qnil; + dpyinfo->last_mouse_scroll_bar = NULL; /* Figure out which root window we're on. */ XQueryPointer (FRAME_X_DISPLAY (*fp), @@ -4101,15 +4071,17 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, on it, i.e. into the same rectangles that matrices on the frame are divided into. */ - remember_mouse_glyph (f1, win_x, win_y, &last_mouse_glyph); - last_mouse_glyph_frame = f1; + /* FIXME: what if F1 is not an X frame? */ + dpyinfo = FRAME_DISPLAY_INFO (f1); + remember_mouse_glyph (f1, win_x, win_y, &dpyinfo->last_mouse_glyph); + dpyinfo->last_mouse_glyph_frame = f1; *bar_window = Qnil; *part = 0; *fp = f1; XSETINT (*x, win_x); XSETINT (*y, win_y); - *timestamp = last_mouse_movement_time; + *timestamp = dpyinfo->last_mouse_movement_time; } } } @@ -5589,11 +5561,11 @@ x_scroll_bar_note_movement (struct scroll_bar *bar, const XMotionEvent *event) { struct frame *f = XFRAME (XWINDOW (bar->window)->frame); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); - last_mouse_movement_time = event->time; - + dpyinfo->last_mouse_movement_time = event->time; + dpyinfo->last_mouse_scroll_bar = bar; f->mouse_moved = 1; - XSETVECTOR (last_mouse_scroll_bar, bar); /* If we're dragging the bar, display it. */ if (bar->dragging != -1) @@ -5620,7 +5592,8 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window, enum scroll_bar_part *part, Lisp_Object *x, Lisp_Object *y, Time *timestamp) { - struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp); + struct scroll_bar *bar = dpyinfo->last_mouse_scroll_bar; Window w = bar->x_window; struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); int win_x, win_y; @@ -5632,22 +5605,19 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window, /* Get the mouse's position relative to the scroll bar window, and report that. */ - if (! XQueryPointer (FRAME_X_DISPLAY (f), w, + if (XQueryPointer (FRAME_X_DISPLAY (f), w, - /* Root, child, root x and root y. */ - &dummy_window, &dummy_window, - &dummy_coord, &dummy_coord, + /* Root, child, root x and root y. */ + &dummy_window, &dummy_window, + &dummy_coord, &dummy_coord, - /* Position relative to scroll bar. */ - &win_x, &win_y, + /* Position relative to scroll bar. */ + &win_x, &win_y, - /* Mouse buttons and modifier keys. */ - &dummy_mask)) - ; - else + /* Mouse buttons and modifier keys. */ + &dummy_mask)) { - int top_range - = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height); + int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height); win_y -= VERTICAL_SCROLL_BAR_TOP_BORDER; @@ -5675,11 +5645,10 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window, XSETINT (*y, top_range); f->mouse_moved = 0; - last_mouse_scroll_bar = Qnil; + dpyinfo->last_mouse_scroll_bar = NULL; + *timestamp = dpyinfo->last_mouse_movement_time; } - *timestamp = last_mouse_movement_time; - unblock_input (); } @@ -6644,8 +6613,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, #ifdef USE_GTK /* We may get an EnterNotify on the buttons in the toolbar. In that case we moved out of any highlighted area and need to note this. */ - if (!f && last_mouse_glyph_frame) - note_mouse_movement (last_mouse_glyph_frame, &event->xmotion); + if (!f && dpyinfo->last_mouse_glyph_frame) + note_mouse_movement (dpyinfo->last_mouse_glyph_frame, &event->xmotion); #endif goto OTHER; @@ -6677,8 +6646,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, } #ifdef USE_GTK /* See comment in EnterNotify above */ - else if (last_mouse_glyph_frame) - note_mouse_movement (last_mouse_glyph_frame, &event->xmotion); + else if (dpyinfo->last_mouse_glyph_frame) + note_mouse_movement (dpyinfo->last_mouse_glyph_frame, &event->xmotion); #endif goto OTHER; @@ -6827,7 +6796,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, bool tool_bar_p = 0; memset (&compose_status, 0, sizeof (compose_status)); - last_mouse_glyph_frame = 0; + dpyinfo->last_mouse_glyph_frame = NULL; dpyinfo->last_user_time = event->xbutton.time; f = (x_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame @@ -10629,9 +10598,6 @@ syms_of_xterm (void) staticpro (&x_display_name_list); x_display_name_list = Qnil; - staticpro (&last_mouse_scroll_bar); - last_mouse_scroll_bar = Qnil; - DEFSYM (Qvendor_specific_keysyms, "vendor-specific-keysyms"); DEFSYM (Qlatin_1, "latin-1"); diff --git a/src/xterm.h b/src/xterm.h index 9f01a840e53..36aa8e52b1c 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -305,12 +305,18 @@ struct x_display_info /* The frame waiting to be auto-raised in XTread_socket. */ struct frame *x_pending_autoraise_frame; - /* The frame where the mouse was last time we reported a mouse event. */ + /* The frame where the mouse was last time we reported a ButtonPress event. */ struct frame *last_mouse_frame; + /* The frame where the mouse was last time we reported a mouse position. */ + struct frame *last_mouse_glyph_frame; + /* The frame where the mouse was last time we reported a mouse motion. */ struct frame *last_mouse_motion_frame; + /* The scroll bar in which the last X motion event occurred. */ + struct scroll_bar *last_mouse_scroll_bar; + /* Time of last user interaction as returned in X events on this display. */ Time last_user_time; @@ -319,6 +325,18 @@ struct x_display_info int last_mouse_motion_x; int last_mouse_motion_y; + /* Where the mouse was last time we reported a mouse position. + This is a rectangle on last_mouse_glyph_frame. */ + XRectangle last_mouse_glyph; + + /* Time of last mouse movement on this display. This is a hack because + we would really prefer that XTmouse_position would return the time + associated with the position it returns, but there doesn't seem to be + any way to wrest the time-stamp from the server along with the position + query. So, we just keep track of the time of the last movement we + received, and return that in hopes that it's somewhat accurate. */ + Time last_mouse_movement_time; + /* The gray pixmap. */ Pixmap gray; From 13d9698ae43a2b156a9081895293ae1b17b5f89e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 19 Sep 2013 11:25:43 +0300 Subject: [PATCH 254/321] Fix a compiler warning on MS-Windows due to recent changes. src/w32reg.c (w32_get_string_resource): Make the first 2 arguments 'const char *' to avoid compiler warnings due to similar change in the prototype of x_get_string_resource. --- src/ChangeLog | 6 ++++++ src/w32reg.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index d900818231e..ff5d265e51f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-09-19 Eli Zaretskii + + * w32reg.c (w32_get_string_resource): Make the first 2 arguments + 'const char *' to avoid compiler warnings due to similar change in + the prototype of x_get_string_resource. + 2013-09-19 Dmitry Antipov * xterm.h (struct x_display_info): New members last_mouse_glyph_frame, diff --git a/src/w32reg.c b/src/w32reg.c index 9d088538e0b..c41675019dd 100644 --- a/src/w32reg.c +++ b/src/w32reg.c @@ -74,7 +74,7 @@ w32_get_rdb_resource (char *rdb, const char *resource) } static LPBYTE -w32_get_string_resource (char *name, char *class, DWORD dwexptype) +w32_get_string_resource (const char *name, const char *class, DWORD dwexptype) { LPBYTE lpvalue = NULL; HKEY hrootkey = NULL; @@ -92,7 +92,7 @@ w32_get_string_resource (char *name, char *class, DWORD dwexptype) if (RegOpenKeyEx (hive, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS) { - char *keyname; + const char *keyname; if (RegQueryValueEx (hrootkey, name, NULL, &dwType, NULL, &cbData) == ERROR_SUCCESS && dwType == dwexptype) From be9bc55efdc1c1f665a84e5f10cdef9af0685ab7 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 19 Sep 2013 11:43:01 +0300 Subject: [PATCH 255/321] Fix MinGW builds from inside the MSYS installation tree. configure.ac [MINGW32]: Make sure the value of 'srcdir' is in the full /d/foo/bar form. See the discussion in http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00210.html, and in particular http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00252.html and its followups, for the details. --- ChangeLog | 9 +++++++++ configure.ac | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/ChangeLog b/ChangeLog index c075c60be23..990db8da28d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2013-09-19 Eli Zaretskii + + * configure.ac [MINGW32]: Make sure the value of 'srcdir' + is in the full /d/foo/bar form. See the discussion in + http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00210.html, + and in particular + http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00252.html + and its followups, for the details. + 2013-09-17 Dmitry Antipov * configure.ac: Do not check for g_type_init because we diff --git a/configure.ac b/configure.ac index 903537f8a59..fe326623571 100644 --- a/configure.ac +++ b/configure.ac @@ -443,6 +443,17 @@ case "${srcdir}" in * ) srcdir=`(cd "$srcdir"; pwd)` ;; esac +#### When building with MinGW inside the MSYS tree, 'pwd' produces +#### directories relative to the root of the MSYS tree, +#### e.g. '/home/user/foo' instead of '/d/MSYS/home/user/foo'. When +#### such a value of srcdir is written to the top-level Makefile, it +#### gets propagated to src/epaths.h, and that causes temacs to fail, +#### because, being a MinGW program that knows nothing of MSYS root +#### substitution, it cannot find the data directory. "pwd -W" +#### produces Windows-style 'd:/foo/bar' absolute directory names, so +#### we use it here to countermand that lossage. +test "$MSYSTEM" = "MINGW32" && srcdir=`(cd "$srcdir"; pwd -W | sed -e 's,^\([[A-Za-z]]\):,/\1,')` + ### Canonicalize the configuration name. AC_CANONICAL_HOST From 52d4169a69b1610680181947cd7784662b0b1730 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 19 Sep 2013 06:17:39 -0400 Subject: [PATCH 256/321] Auto-commit of generated files. --- autogen/configure | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/autogen/configure b/autogen/configure index 206f5301e82..c5ee6973db8 100755 --- a/autogen/configure +++ b/autogen/configure @@ -4623,6 +4623,17 @@ case "${srcdir}" in * ) srcdir=`(cd "$srcdir"; pwd)` ;; esac +#### When building with MinGW inside the MSYS tree, 'pwd' produces +#### directories relative to the root of the MSYS tree, +#### e.g. '/home/user/foo' instead of '/d/MSYS/home/user/foo'. When +#### such a value of srcdir is written to the top-level Makefile, it +#### gets propagated to src/epaths.h, and that causes temacs to fail, +#### because, being a MinGW program that knows nothing of MSYS root +#### substitution, it cannot find the data directory. "pwd -W" +#### produces Windows-style 'd:/foo/bar' absolute directory names, so +#### we use it here to countermand that lossage. +test "$MSYSTEM" = "MINGW32" && srcdir=`(cd "$srcdir"; pwd -W | sed -e 's,^\([A-Za-z]\):,/\1,')` + ### Canonicalize the configuration name. # Make sure we can run config.sub. From 85e05915242ee49f568e4502bde3bad3730f3097 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Thu, 19 Sep 2013 13:08:01 +0200 Subject: [PATCH 257/321] * net/tramp-sh.el (tramp-get-remote-id): Do not raise an error. (tramp-get-remote-uid-with-id, tramp-get-remote-gid-with-id) (tramp-get-remote-python): New defuns. (tramp-get-remote-uid-with-perl) (tramp-get-remote-gid-with-perl): New defuns. Perl code contributed by yary (tiny change). (tramp-get-remote-uid-with-python) (tramp-get-remote-gid-with-python): New defuns. Python code contributed by Andrey Tykhonov (tiny change). (tramp-get-remote-uid, tramp-get-remote-gid): Use new defuns. --- lisp/ChangeLog | 13 ++++++ lisp/net/tramp-sh.el | 107 +++++++++++++++++++++++++++++++++---------- 2 files changed, 96 insertions(+), 24 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fe5e82cba67..a557359db95 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,16 @@ +2013-09-19 Michael Albinus + + * net/tramp-sh.el (tramp-get-remote-id): Do not raise an error. + (tramp-get-remote-uid-with-id, tramp-get-remote-gid-with-id) + (tramp-get-remote-python): New defuns. + (tramp-get-remote-uid-with-perl) + (tramp-get-remote-gid-with-perl): New defuns. Perl code + contributed by yary (tiny change). + (tramp-get-remote-uid-with-python) + (tramp-get-remote-gid-with-python): New defuns. Python code + contributed by Andrey Tykhonov (tiny change). + (tramp-get-remote-uid, tramp-get-remote-gid): Use new defuns. + 2013-09-19 Glenn Morris * emacs-lisp/eieio.el (class-parent): Don't use defalias with macros. diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index e37c34e0df9..def19e99515 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -4950,38 +4950,97 @@ Return ATTR." (defun tramp-get-remote-id (vec) (with-tramp-connection-property vec "id" (tramp-message vec 5 "Finding POSIX `id' command") - (or - (catch 'id-found - (let ((dl (tramp-get-remote-path vec)) - result) - (while (and dl (setq result (tramp-find-executable vec "id" dl t t))) - ;; Check POSIX parameter. - (when (tramp-send-command-and-check vec (format "%s -u" result)) - (throw 'id-found result)) - (setq dl (cdr dl))))) - (tramp-error vec 'file-error "Couldn't find a POSIX `id' command")))) + (catch 'id-found + (let ((dl (tramp-get-remote-path vec)) + result) + (while (and dl (setq result (tramp-find-executable vec "id" dl t t))) + ;; Check POSIX parameter. + (when (tramp-send-command-and-check vec (format "%s -u" result)) + (throw 'id-found result)) + (setq dl (cdr dl))))))) + +(defun tramp-get-remote-uid-with-id (vec id-format) + (tramp-send-command-and-read + vec + (format "%s -u%s %s" + (tramp-get-remote-id vec) + (if (equal id-format 'integer) "" "n") + (if (equal id-format 'integer) + "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/")))) + +(defun tramp-get-remote-uid-with-perl (vec id-format) + (tramp-send-command-and-read + vec + (format "%s -le '%s'" + (tramp-get-remote-perl vec) + (if (equal id-format 'integer) + "print $>" + "print \"\\\"\", scalar getpwuid($>), \"\\\"\"")))) + +(defun tramp-get-remote-python (vec) + (with-tramp-connection-property vec "python" + (tramp-message vec 5 "Finding a suitable `python' command") + (tramp-find-executable vec "python" (tramp-get-remote-path vec)))) + +(defun tramp-get-remote-uid-with-python (vec id-format) + (tramp-send-command-and-read + vec + (format "%s -c \"%s\"" + (tramp-get-remote-python vec) + (if (equal id-format 'integer) + "import os; print os.getuid()" + "import os, pwd; print '\\\"' + pwd.getpwuid(os.getuid())[0] + '\\\"'")))) (defun tramp-get-remote-uid (vec id-format) (with-tramp-connection-property vec (format "uid-%s" id-format) - (let ((res (tramp-send-command-and-read - vec - (format "%s -u%s %s" - (tramp-get-remote-id vec) - (if (equal id-format 'integer) "" "n") - (if (equal id-format 'integer) - "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/"))))) + (let ((res (cond + ((tramp-get-remote-id vec) + (tramp-get-remote-uid-with-id vec id-format)) + ((tramp-get-remote-perl vec) + (tramp-get-remote-uid-with-perl vec id-format)) + ((tramp-get-remote-python vec) + (tramp-get-remote-uid-with-python vec id-format)) + (t (tramp-error vec "Cannot determine remote uid"))))) ;; The command might not always return a number. (if (and (equal id-format 'integer) (not (integerp res))) -1 res)))) +(defun tramp-get-remote-gid-with-id (vec id-format) + (tramp-send-command-and-read + vec + (format "%s -g%s %s" + (tramp-get-remote-id vec) + (if (equal id-format 'integer) "" "n") + (if (equal id-format 'integer) + "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/")))) + +(defun tramp-get-remote-gid-with-perl (vec id-format) + (tramp-send-command-and-read + vec + (format "%s -le '%s'" + (tramp-get-remote-perl vec) + (if (equal id-format 'integer) + "print ($)=~/(\\d+)/)" + "print \"\\\"\", scalar getgrgid($)), \"\\\"\"")))) + +(defun tramp-get-remote-gid-with-python (vec id-format) + (tramp-send-command-and-read + vec + (format "%s -c \"%s\"" + (tramp-get-remote-python vec) + (if (equal id-format 'integer) + "import os; print os.getgid()" + "import os, grp; print '\\\"' + grp.getgrgid(os.getgid())[0] + '\\\"'")))) + (defun tramp-get-remote-gid (vec id-format) (with-tramp-connection-property vec (format "gid-%s" id-format) - (let ((res (tramp-send-command-and-read - vec - (format "%s -g%s %s" - (tramp-get-remote-id vec) - (if (equal id-format 'integer) "" "n") - (if (equal id-format 'integer) - "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/"))))) + (let ((res (cond + ((tramp-get-remote-id vec) + (tramp-get-remote-gid-with-id vec id-format)) + ((tramp-get-remote-perl vec) + (tramp-get-remote-gid-with-perl vec id-format)) + ((tramp-get-remote-python vec) + (tramp-get-remote-gid-with-python vec id-format)) + (t (tramp-error vec "Cannot determine remote gid"))))) ;; The command might not always return a number. (if (and (equal id-format 'integer) (not (integerp res))) -1 res)))) From e189e54eea9d4317c484e534cfbce0bcfb4046ce Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Thu, 19 Sep 2013 21:14:26 +0200 Subject: [PATCH 258/321] Fix previous patch. --- lisp/net/tramp-sh.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index def19e99515..4bc836b88d5 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -5000,7 +5000,8 @@ Return ATTR." (tramp-get-remote-uid-with-perl vec id-format)) ((tramp-get-remote-python vec) (tramp-get-remote-uid-with-python vec id-format)) - (t (tramp-error vec "Cannot determine remote uid"))))) + (t (tramp-error + vec 'file-error "Cannot determine remote uid"))))) ;; The command might not always return a number. (if (and (equal id-format 'integer) (not (integerp res))) -1 res)))) @@ -5040,7 +5041,8 @@ Return ATTR." (tramp-get-remote-gid-with-perl vec id-format)) ((tramp-get-remote-python vec) (tramp-get-remote-gid-with-python vec id-format)) - (t (tramp-error vec "Cannot determine remote gid"))))) + (t (tramp-error + vec 'file-error "Cannot determine remote gid"))))) ;; The command might not always return a number. (if (and (equal id-format 'integer) (not (integerp res))) -1 res)))) From 9a0289a2e92c6737ef3e866b466b237435fe45d3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 19 Sep 2013 16:11:48 -0400 Subject: [PATCH 259/321] * lisp/emacs-lisp/eieio.el (class-parent): Undo previous change. Ref: http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00354.html --- lisp/ChangeLog | 4 ++++ lisp/emacs-lisp/eieio.el | 5 +---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a557359db95..52d3c015687 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-19 Glenn Morris + + * emacs-lisp/eieio.el (class-parent): Undo previous change. + 2013-09-19 Michael Albinus * net/tramp-sh.el (tramp-get-remote-id): Do not raise an error. diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index e7ec547af9b..46381ede9d1 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -322,10 +322,7 @@ The CLOS function `class-direct-subclasses' is aliased to this function." (defmacro eieio-class-parent (class) "Return first parent class to CLASS. (overload of variable)." `(car (eieio-class-parents ,class))) - -(defmacro class-parent (class) - (declare (obsolete eieio-class-parent "24.4")) - '(eieio-class-parent class)) +(define-obsolete-function-alias 'class-parent 'eieio-class-parent "24.4") (defun same-class-p (obj class) "Return t if OBJ is of class-type CLASS." (eieio--check-type class-p class) From c440407a90b70ef278113f502f6e2fd57ad38f26 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 19 Sep 2013 16:31:26 -0400 Subject: [PATCH 260/321] * lisp/simple.el (x-selection-owner-p, x-selection-exists-p): Declare. --- lisp/ChangeLog | 2 ++ lisp/simple.el | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 52d3c015687..f0d7480371b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-19 Glenn Morris + * simple.el (x-selection-owner-p, x-selection-exists-p): Declare. + * emacs-lisp/eieio.el (class-parent): Undo previous change. 2013-09-19 Michael Albinus diff --git a/lisp/simple.el b/lisp/simple.el index bf531de8ae4..d259851dc85 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -4159,6 +4159,12 @@ a mistake; see the documentation of `set-mark'." (marker-position (mark-marker)) (signal 'mark-inactive nil))) +;; Behind display-selections-p. +(declare-function x-selection-owner-p "xselect.c" + (&optional selection terminal)) +(declare-function x-selection-exists-p "xselect.c" + (&optional selection terminal)) + (defun deactivate-mark (&optional force) "Deactivate the mark. If Transient Mark mode is disabled, this function normally does From a2c501b84eae05b1c7cb820537c12f201379648c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 19 Sep 2013 16:31:54 -0400 Subject: [PATCH 261/321] * lisp/emacs-lisp/cl-macs.el (cl-defsubst): Remove unused local `pbody'. --- lisp/ChangeLog | 2 ++ lisp/emacs-lisp/cl-macs.el | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f0d7480371b..2da4ea8f360 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-19 Glenn Morris + * emacs-lisp/cl-macs.el (cl-defsubst): Remove unused local `pbody'. + * simple.el (x-selection-owner-p, x-selection-exists-p): Declare. * emacs-lisp/eieio.el (class-parent): Undo previous change. diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index af7c41d5c4c..7e50b5bbc9e 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -2701,8 +2701,10 @@ The function's arguments should be treated as immutable. \(fn NAME ARGLIST [DOCSTRING] BODY...)" (declare (debug cl-defun) (indent 2)) - (let* ((argns (cl--arglist-args args)) (p argns) - (pbody (cons 'progn body))) + (let* ((argns (cl--arglist-args args)) + (p argns) + ;; (pbody (cons 'progn body)) + ) (while (and p (eq (cl--expr-contains args (car p)) 1)) (pop p)) `(progn ,(if p nil ; give up if defaults refer to earlier args From c39cc7d149d28060c40bc206eb8a63f7a0636301 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 19 Sep 2013 16:51:33 -0400 Subject: [PATCH 262/321] * lisp/eshell/em-ls.el: Use advice. Remove redundant :group keywords. (eshell-ls-orig-insert-directory): Remove. (eshell-ls-unload-hook): Not a defcustom any more. Use advice-remove. (eshell-ls-use-in-dired): Use advice-add/remove. (eshell-ls--insert-directory): Rename from eshell-ls-insert-directory. Add `orig-fun' arg for use in :around advice. Make it check (redundantly) eshell-ls-use-in-dired. --- lisp/ChangeLog | 10 +++ lisp/eshell/em-ls.el | 150 +++++++++++++++++-------------------------- 2 files changed, 70 insertions(+), 90 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2da4ea8f360..7ada78fc09a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2013-09-19 Stefan Monnier + + * eshell/em-ls.el: Use advice. Remove redundant :group keywords. + (eshell-ls-orig-insert-directory): Remove. + (eshell-ls-unload-hook): Not a defcustom any more. Use advice-remove. + (eshell-ls-use-in-dired): Use advice-add/remove. + (eshell-ls--insert-directory): Rename from eshell-ls-insert-directory. + Add `orig-fun' arg for use in :around advice. + Make it check (redundantly) eshell-ls-use-in-dired. + 2013-09-19 Glenn Morris * emacs-lisp/cl-macs.el (cl-defsubst): Remove unused local `pbody'. diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el index c2334d7bd74..16cc6a22008 100644 --- a/lisp/eshell/em-ls.el +++ b/lisp/eshell/em-ls.el @@ -44,125 +44,102 @@ properties to colorize its output based on the setting of ;;; User Variables: -(defvar eshell-ls-orig-insert-directory - (symbol-function 'insert-directory) - "Preserve the original definition of `insert-directory'.") - -(defcustom eshell-ls-unload-hook - (list - (lambda () (fset 'insert-directory eshell-ls-orig-insert-directory))) - "When unloading `eshell-ls', restore the definition of `insert-directory'." - :type 'hook - :group 'eshell-ls) - (defcustom eshell-ls-date-format "%Y-%m-%d" "How to display time information in `eshell-ls-file'. This is passed to `format-time-string' as a format string. To display the date using the current locale, use \"%b \%e\"." :version "24.1" - :type 'string - :group 'eshell-ls) + :type 'string) (defcustom eshell-ls-initial-args nil "If non-nil, this list of args is included before any call to `ls'. This is useful for enabling human-readable format (-h), for example." - :type '(repeat :tag "Arguments" string) - :group 'eshell-ls) + :type '(repeat :tag "Arguments" string)) (defcustom eshell-ls-dired-initial-args nil "If non-nil, args is included before any call to `ls' in Dired. This is useful for enabling human-readable format (-h), for example." - :type '(repeat :tag "Arguments" string) - :group 'eshell-ls) + :type '(repeat :tag "Arguments" string)) -;; FIXME should use advice, like ls-lisp.el does now. (defcustom eshell-ls-use-in-dired nil "If non-nil, use `eshell-ls' to read directories in Dired. Changing this without using customize has no effect." :set (lambda (symbol value) (if value - (or (bound-and-true-p eshell-ls-use-in-dired) - (fset 'insert-directory 'eshell-ls-insert-directory)) - (and (fboundp 'eshell-ls-insert-directory) eshell-ls-use-in-dired - (fset 'insert-directory eshell-ls-orig-insert-directory))) - (set symbol value)) + (advice-add 'insert-directory :around + #'eshell-ls--insert-directory) + (advice-remove 'insert-directory + #'eshell-ls--insert-directory)) + (set symbol value)) :type 'boolean - :require 'em-ls - :group 'eshell-ls) + :require 'em-ls) +(add-hook 'eshell-ls-unload-hook + (lambda () (advice-remove 'insert-directory + #'eshell-ls--insert-directory))) + (defcustom eshell-ls-default-blocksize 1024 "The default blocksize to use when display file sizes with -s." - :type 'integer - :group 'eshell-ls) + :type 'integer) (defcustom eshell-ls-exclude-regexp nil "Unless -a is specified, files matching this regexp will not be shown." - :type '(choice regexp (const nil)) - :group 'eshell-ls) + :type '(choice regexp (const nil))) (defcustom eshell-ls-exclude-hidden t "Unless -a is specified, files beginning with . will not be shown. Using this boolean, instead of `eshell-ls-exclude-regexp', is both faster and conserves more memory." - :type 'boolean - :group 'eshell-ls) + :type 'boolean) (defcustom eshell-ls-use-colors t "If non-nil, use colors in file listings." - :type 'boolean - :group 'eshell-ls) + :type 'boolean) (defface eshell-ls-directory '((((class color) (background light)) (:foreground "Blue" :weight bold)) (((class color) (background dark)) (:foreground "SkyBlue" :weight bold)) (t (:weight bold))) - "The face used for highlight directories." - :group 'eshell-ls) + "The face used for highlight directories.") (define-obsolete-face-alias 'eshell-ls-directory-face 'eshell-ls-directory "22.1") (defface eshell-ls-symlink '((((class color) (background light)) (:foreground "Dark Cyan" :weight bold)) (((class color) (background dark)) (:foreground "Cyan" :weight bold))) - "The face used for highlight symbolic links." - :group 'eshell-ls) + "The face used for highlight symbolic links.") (define-obsolete-face-alias 'eshell-ls-symlink-face 'eshell-ls-symlink "22.1") (defface eshell-ls-executable '((((class color) (background light)) (:foreground "ForestGreen" :weight bold)) (((class color) (background dark)) (:foreground "Green" :weight bold))) - "The face used for highlighting executables (not directories, though)." - :group 'eshell-ls) + "The face used for highlighting executables (not directories, though).") (define-obsolete-face-alias 'eshell-ls-executable-face 'eshell-ls-executable "22.1") (defface eshell-ls-readonly '((((class color) (background light)) (:foreground "Brown")) (((class color) (background dark)) (:foreground "Pink"))) - "The face used for highlighting read-only files." - :group 'eshell-ls) + "The face used for highlighting read-only files.") (define-obsolete-face-alias 'eshell-ls-readonly-face 'eshell-ls-readonly "22.1") (defface eshell-ls-unreadable '((((class color) (background light)) (:foreground "Grey30")) (((class color) (background dark)) (:foreground "DarkGrey"))) - "The face used for highlighting unreadable files." - :group 'eshell-ls) + "The face used for highlighting unreadable files.") (define-obsolete-face-alias 'eshell-ls-unreadable-face 'eshell-ls-unreadable "22.1") (defface eshell-ls-special '((((class color) (background light)) (:foreground "Magenta" :weight bold)) (((class color) (background dark)) (:foreground "Magenta" :weight bold))) - "The face used for highlighting non-regular files." - :group 'eshell-ls) + "The face used for highlighting non-regular files.") (define-obsolete-face-alias 'eshell-ls-special-face 'eshell-ls-special "22.1") (defface eshell-ls-missing '((((class color) (background light)) (:foreground "Red" :weight bold)) (((class color) (background dark)) (:foreground "Red" :weight bold))) - "The face used for highlighting non-existent file names." - :group 'eshell-ls) + "The face used for highlighting non-existent file names.") (define-obsolete-face-alias 'eshell-ls-missing-face 'eshell-ls-missing "22.1") (defcustom eshell-ls-archive-regexp @@ -172,27 +149,23 @@ faster and conserves more memory." This typically includes both traditional archives and compressed files." :version "24.1" ; added xz - :type 'regexp - :group 'eshell-ls) + :type 'regexp) (defface eshell-ls-archive '((((class color) (background light)) (:foreground "Orchid" :weight bold)) (((class color) (background dark)) (:foreground "Orchid" :weight bold))) - "The face used for highlighting archived and compressed file names." - :group 'eshell-ls) + "The face used for highlighting archived and compressed file names.") (define-obsolete-face-alias 'eshell-ls-archive-face 'eshell-ls-archive "22.1") (defcustom eshell-ls-backup-regexp "\\(\\`\\.?#\\|\\(\\.bak\\|~\\)\\'\\)" "A regular expression that matches names of backup files." - :type 'regexp - :group 'eshell-ls) + :type 'regexp) (defface eshell-ls-backup '((((class color) (background light)) (:foreground "OrangeRed")) (((class color) (background dark)) (:foreground "LightSalmon"))) - "The face used for highlighting backup file names." - :group 'eshell-ls) + "The face used for highlighting backup file names.") (define-obsolete-face-alias 'eshell-ls-backup-face 'eshell-ls-backup "22.1") (defcustom eshell-ls-product-regexp @@ -200,14 +173,12 @@ files." "A regular expression that matches names of product files. Products are files that get generated from a source file, and hence ought to be recreatable if they are deleted." - :type 'regexp - :group 'eshell-ls) + :type 'regexp) (defface eshell-ls-product '((((class color) (background light)) (:foreground "OrangeRed")) (((class color) (background dark)) (:foreground "LightSalmon"))) - "The face used for highlighting files that are build products." - :group 'eshell-ls) + "The face used for highlighting files that are build products.") (define-obsolete-face-alias 'eshell-ls-product-face 'eshell-ls-product "22.1") (defcustom eshell-ls-clutter-regexp @@ -215,14 +186,12 @@ ought to be recreatable if they are deleted." "A regular expression that matches names of junk files. These are mainly files that get created for various reasons, but don't really need to stick around for very long." - :type 'regexp - :group 'eshell-ls) + :type 'regexp) (defface eshell-ls-clutter '((((class color) (background light)) (:foreground "OrangeRed" :weight bold)) (((class color) (background dark)) (:foreground "OrangeRed" :weight bold))) - "The face used for highlighting junk file names." - :group 'eshell-ls) + "The face used for highlighting junk file names.") (define-obsolete-face-alias 'eshell-ls-clutter-face 'eshell-ls-clutter "22.1") (defsubst eshell-ls-filetype-p (attrs type) @@ -263,8 +232,7 @@ The format of the members of this alist is If TEST-SEXP evals to non-nil, that face will be used to highlight the name of the file. The first match wins. `file' and `attrs' are in scope during the evaluation of TEST-SEXP." - :type '(repeat (cons function face)) - :group 'eshell-ls) + :type '(repeat (cons function face))) (defvar block-size) (defvar dereference-links) @@ -287,8 +255,8 @@ scope during the evaluation of TEST-SEXP." ;;; Functions: -(defun eshell-ls-insert-directory - (file switches &optional wildcard full-directory-p) +(defun eshell-ls--insert-directory + (orig-fun file switches &optional wildcard full-directory-p) "Insert directory listing for FILE, formatted according to SWITCHES. Leaves point after the inserted text. SWITCHES may be a string of options, or a list of strings. @@ -299,29 +267,31 @@ switches do not contain `d', so that a full listing is expected. This version of the function uses `eshell/ls'. If any of the switches passed are not recognized, the operating system's version will be used instead." - (let ((handler (find-file-name-handler file 'insert-directory))) - (if handler - (funcall handler 'insert-directory file switches - wildcard full-directory-p) - (if (stringp switches) - (setq switches (split-string switches))) - (let (eshell-current-handles - eshell-current-subjob-p - font-lock-mode) - ;; use the fancy highlighting in `eshell-ls' rather than font-lock - (when (and eshell-ls-use-colors - (featurep 'font-lock)) - (font-lock-mode -1) - (setq font-lock-defaults nil) - (if (boundp 'font-lock-buffers) - (set 'font-lock-buffers - (delq (current-buffer) - (symbol-value 'font-lock-buffers))))) - (let ((insert-func 'insert) - (error-func 'insert) - (flush-func 'ignore) - eshell-ls-dired-initial-args) - (eshell-do-ls (append switches (list file)))))))) + (if (not eshell-ls-use-in-dired) + (funcall orig-fun file switches wildcard full-directory-p) + (let ((handler (find-file-name-handler file 'insert-directory))) + (if handler + (funcall handler 'insert-directory file switches + wildcard full-directory-p) + (if (stringp switches) + (setq switches (split-string switches))) + (let (eshell-current-handles + eshell-current-subjob-p + font-lock-mode) + ;; use the fancy highlighting in `eshell-ls' rather than font-lock + (when (and eshell-ls-use-colors + (featurep 'font-lock)) + (font-lock-mode -1) + (setq font-lock-defaults nil) + (if (boundp 'font-lock-buffers) + (set 'font-lock-buffers + (delq (current-buffer) + (symbol-value 'font-lock-buffers))))) + (let ((insert-func 'insert) + (error-func 'insert) + (flush-func 'ignore) + eshell-ls-dired-initial-args) + (eshell-do-ls (append switches (list file))))))))) (defsubst eshell/ls (&rest args) "An alias version of `eshell-do-ls'." From 230fe2a5a10f2bc128f354e3fb1b48536b1f143b Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 19 Sep 2013 14:40:08 -0700 Subject: [PATCH 263/321] Merge from gnulib. This incorporates the following changes: 2013-09-19 stdio: OS X port of putc_unlocked + extern inline 2013-09-19 signal: OS X port of sigaddset etc. + extern inline 2013-09-19 extern-inline: do not always suppress extern inline on OS X 2013-09-17 getgroups: statement without effect 2013-08-28 headers: check that _GL_INLINE_HEADER_BEGIN is defined --- ChangeLog | 9 +++++ doc/misc/texinfo.tex | 82 +++++++++++++++++++++++++++++++++----------- lib/acl-internal.h | 3 ++ lib/binary-io.h | 3 ++ lib/dtotimespec.c | 30 ++++++---------- lib/execinfo.in.h | 3 ++ lib/getgroups.c | 2 +- lib/openat.h | 3 ++ lib/signal.in.h | 14 ++++++++ lib/stat-time.h | 3 ++ lib/stdio.in.h | 9 +++++ lib/timespec-add.c | 7 ++-- lib/timespec-sub.c | 7 ++-- lib/timespec.h | 3 ++ lib/u64.h | 3 ++ lib/unistd.in.h | 3 ++ lib/utimens.c | 6 ++-- lib/utimens.h | 3 ++ m4/extern-inline.m4 | 17 ++++++--- 19 files changed, 153 insertions(+), 57 deletions(-) diff --git a/ChangeLog b/ChangeLog index 990db8da28d..7d21714922c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2013-09-19 Paul Eggert + + Merge from gnulib, incorporating: + 2013-09-19 stdio: OS X port of putc_unlocked + extern inline + 2013-09-19 signal: OS X port of sigaddset etc. + extern inline + 2013-09-19 extern-inline: do not always suppress extern inline on OS X + 2013-09-17 getgroups: statement without effect + 2013-08-28 headers: check that _GL_INLINE_HEADER_BEGIN is defined + 2013-09-19 Eli Zaretskii * configure.ac [MINGW32]: Make sure the value of 'srcdir' diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index 9ba8c949fd1..bfd765dd211 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2013-08-20.10} +\def\texinfoversion{2013-09-11.11} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, @@ -322,10 +322,13 @@ % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). + \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars} + % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% + % \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to @@ -2891,6 +2894,15 @@ \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } +% +% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if +% FMTNAME is tex, else ELSE-TEXT. +\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} +\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% + \def\inlinefmtname{#1}% + \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi +} +% % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being @@ -2907,6 +2919,23 @@ \endgroup % close group opened by \tex. } +% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. +% +\long\def\inlineifset#1{\doinlineifset #1,\finish} +\long\def\doinlineifset#1,#2,\finish{% + \def\inlinevarname{#1}% + \expandafter\ifx\csname SET\inlinevarname\endcsname\relax + \else\ignorespaces#2\fi +} + +% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. +% +\long\def\inlineifclear#1{\doinlineifclear #1,\finish} +\long\def\doinlineifclear#1,#2,\finish{% + \def\inlinevarname{#1}% + \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi +} + \message{glyphs,} % and logos. @@ -4202,7 +4231,7 @@ \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { - \catcode`\- = \active \catcode`\_ = \active + \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue @@ -4222,7 +4251,12 @@ % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). -% +% +% Unfortunately, this has the consequence that when _ is in the *value* +% of an @set, it does not print properly in the roman fonts (get the cmr +% dot accent at position 126 instead). No fix comes to mind, and it's +% been this way since 2003 or earlier, so just ignore it. +% \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% @@ -6276,8 +6310,8 @@ \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other - \catcode`\`=\other - \catcode`\'=\other + \catcode `\`=\other + \catcode `\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our @@ -6301,7 +6335,7 @@ \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext - \expandafter \let\csname top\endcsname=\ptextop % outer + \expandafter \let\csname top\endcsname=\ptextop % we've made it outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% @@ -9944,11 +9978,9 @@ \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} +\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} +\catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} @@ -9958,16 +9990,26 @@ \catcode`\|=\active \def|{{\tt\char124}} + \chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} +\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix +\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr +\catcode`\+=\active \def+{{\tt \char 43}} +\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% used for headline/footline in the output routine, in case the page +% breaks in the middle of an @tex block. +\def\texinfochars{% + \let< = \activeless + \let> = \activegtr + \let~ = \activetilde + \let^ = \activehat + \markupsetuplqdefault \markupsetuprqdefault + \let\b = \strong + \let\i = \smartitalic + % in principle, all other definitions in \tex have to be undone too. +} % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. diff --git a/lib/acl-internal.h b/lib/acl-internal.h index 7e6d77a5fd4..55c224ca883 100644 --- a/lib/acl-internal.h +++ b/lib/acl-internal.h @@ -60,6 +60,9 @@ extern int aclsort (int, int, struct acl *); # define fchmod(fd, mode) (-1) #endif +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif _GL_INLINE_HEADER_BEGIN #ifndef ACL_INTERNAL_INLINE # define ACL_INTERNAL_INLINE _GL_INLINE diff --git a/lib/binary-io.h b/lib/binary-io.h index 317fe3d3c20..423c2ae3fff 100644 --- a/lib/binary-io.h +++ b/lib/binary-io.h @@ -25,6 +25,9 @@ so we include it here first. */ #include +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif _GL_INLINE_HEADER_BEGIN #ifndef BINARY_IO_INLINE # define BINARY_IO_INLINE _GL_INLINE diff --git a/lib/dtotimespec.c b/lib/dtotimespec.c index ecce2e5bcc5..064f7d3a0a9 100644 --- a/lib/dtotimespec.c +++ b/lib/dtotimespec.c @@ -29,41 +29,31 @@ struct timespec dtotimespec (double sec) { - enum { BILLION = 1000 * 1000 * 1000 }; double min_representable = TYPE_MINIMUM (time_t); double max_representable = - ((TYPE_MAXIMUM (time_t) * (double) BILLION + (BILLION - 1)) - / BILLION); - struct timespec r; + ((TYPE_MAXIMUM (time_t) * (double) TIMESPEC_RESOLUTION + + (TIMESPEC_RESOLUTION - 1)) + / TIMESPEC_RESOLUTION); if (! (min_representable < sec)) - { - r.tv_sec = TYPE_MINIMUM (time_t); - r.tv_nsec = 0; - } + return make_timespec (TYPE_MINIMUM (time_t), 0); else if (! (sec < max_representable)) - { - r.tv_sec = TYPE_MAXIMUM (time_t); - r.tv_nsec = BILLION - 1; - } + return make_timespec (TYPE_MAXIMUM (time_t), TIMESPEC_RESOLUTION - 1); else { time_t s = sec; - double frac = BILLION * (sec - s); + double frac = TIMESPEC_RESOLUTION * (sec - s); long ns = frac; ns += ns < frac; - s += ns / BILLION; - ns %= BILLION; + s += ns / TIMESPEC_RESOLUTION; + ns %= TIMESPEC_RESOLUTION; if (ns < 0) { s--; - ns += BILLION; + ns += TIMESPEC_RESOLUTION; } - r.tv_sec = s; - r.tv_nsec = ns; + return make_timespec (s, ns); } - - return r; } diff --git a/lib/execinfo.in.h b/lib/execinfo.in.h index 6cfc8d56d2d..344f26add2b 100644 --- a/lib/execinfo.in.h +++ b/lib/execinfo.in.h @@ -20,6 +20,9 @@ #ifndef _GL_EXECINFO_H #define _GL_EXECINFO_H +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_EXECINFO_INLINE # define _GL_EXECINFO_INLINE _GL_INLINE diff --git a/lib/getgroups.c b/lib/getgroups.c index 9856adc1a4d..e71b5439c7e 100644 --- a/lib/getgroups.c +++ b/lib/getgroups.c @@ -86,7 +86,7 @@ rpl_getgroups (int n, gid_t *group) } saved_errno = errno; free (gbuf); - errno == saved_errno; + errno = saved_errno; return result; } diff --git a/lib/openat.h b/lib/openat.h index eb90990da1d..7208f4459fe 100644 --- a/lib/openat.h +++ b/lib/openat.h @@ -26,6 +26,9 @@ #include #include +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif _GL_INLINE_HEADER_BEGIN #if !HAVE_OPENAT diff --git a/lib/signal.in.h b/lib/signal.in.h index 54849504d77..a531487e355 100644 --- a/lib/signal.in.h +++ b/lib/signal.in.h @@ -195,6 +195,20 @@ typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; # endif +/* When also using extern inline, suppress the use of static inline in + standard headers of problematic Apple configurations, as Libc at + least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., + . + Perhaps Apple will fix this some day. */ +#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ + && (defined __i386__ || defined __x86_64__)) +# undef sigaddset +# undef sigdelset +# undef sigemptyset +# undef sigfillset +# undef sigismember +#endif + /* Test whether a given signal is contained in a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ diff --git a/lib/stat-time.h b/lib/stat-time.h index 2d3b5cd6514..d58eddde334 100644 --- a/lib/stat-time.h +++ b/lib/stat-time.h @@ -23,6 +23,9 @@ #include #include +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_STAT_TIME_INLINE # define _GL_STAT_TIME_INLINE _GL_INLINE diff --git a/lib/stdio.in.h b/lib/stdio.in.h index 06cbad00d3d..76e62fba6ba 100644 --- a/lib/stdio.in.h +++ b/lib/stdio.in.h @@ -124,6 +124,15 @@ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) +/* When also using extern inline, suppress the use of static inline in + standard headers of problematic Apple configurations, as Libc at + least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., + . + Perhaps Apple will fix this some day. */ +#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ + && defined __GNUC__ && defined __STDC__) +# undef putc_unlocked +#endif #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ diff --git a/lib/timespec-add.c b/lib/timespec-add.c index 6ce2c73064f..51323a63207 100644 --- a/lib/timespec-add.c +++ b/lib/timespec-add.c @@ -28,11 +28,10 @@ struct timespec timespec_add (struct timespec a, struct timespec b) { - struct timespec r; time_t rs = a.tv_sec; time_t bs = b.tv_sec; int ns = a.tv_nsec + b.tv_nsec; - int nsd = ns - 1000000000; + int nsd = ns - TIMESPEC_RESOLUTION; int rns = ns; if (0 <= nsd) @@ -65,7 +64,5 @@ timespec_add (struct timespec a, struct timespec b) else rs += bs; - r.tv_sec = rs; - r.tv_nsec = rns; - return r; + return make_timespec (rs, rns); } diff --git a/lib/timespec-sub.c b/lib/timespec-sub.c index 97c9f9de88c..b164a8380d0 100644 --- a/lib/timespec-sub.c +++ b/lib/timespec-sub.c @@ -29,7 +29,6 @@ struct timespec timespec_sub (struct timespec a, struct timespec b) { - struct timespec r; time_t rs = a.tv_sec; time_t bs = b.tv_sec; int ns = a.tv_nsec - b.tv_nsec; @@ -37,7 +36,7 @@ timespec_sub (struct timespec a, struct timespec b) if (ns < 0) { - rns = ns + 1000000000; + rns = ns + TIMESPEC_RESOLUTION; if (rs == TYPE_MINIMUM (time_t)) { if (bs <= 0) @@ -65,7 +64,5 @@ timespec_sub (struct timespec a, struct timespec b) else rs -= bs; - r.tv_sec = rs; - r.tv_nsec = rns; - return r; + return make_timespec (rs, rns); } diff --git a/lib/timespec.h b/lib/timespec.h index c7450ad8de0..d0c029b5704 100644 --- a/lib/timespec.h +++ b/lib/timespec.h @@ -21,6 +21,9 @@ # include +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_TIMESPEC_INLINE # define _GL_TIMESPEC_INLINE _GL_INLINE diff --git a/lib/u64.h b/lib/u64.h index d8009ad3913..af8441f52e5 100644 --- a/lib/u64.h +++ b/lib/u64.h @@ -19,6 +19,9 @@ #include +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_U64_INLINE # define _GL_U64_INLINE _GL_INLINE diff --git a/lib/unistd.in.h b/lib/unistd.in.h index 2ea9af43652..874c628a63b 100644 --- a/lib/unistd.in.h +++ b/lib/unistd.in.h @@ -116,6 +116,9 @@ # include #endif +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UNISTD_INLINE # define _GL_UNISTD_INLINE _GL_INLINE diff --git a/lib/utimens.c b/lib/utimens.c index 013843d6da4..44a33c1d791 100644 --- a/lib/utimens.c +++ b/lib/utimens.c @@ -90,10 +90,12 @@ validate_timespec (struct timespec timespec[2]) assert (timespec); if ((timespec[0].tv_nsec != UTIME_NOW && timespec[0].tv_nsec != UTIME_OMIT - && (timespec[0].tv_nsec < 0 || 1000000000 <= timespec[0].tv_nsec)) + && ! (0 <= timespec[0].tv_nsec + && timespec[0].tv_nsec < TIMESPEC_RESOLUTION)) || (timespec[1].tv_nsec != UTIME_NOW && timespec[1].tv_nsec != UTIME_OMIT - && (timespec[1].tv_nsec < 0 || 1000000000 <= timespec[1].tv_nsec))) + && ! (0 <= timespec[1].tv_nsec + && timespec[1].tv_nsec < TIMESPEC_RESOLUTION))) { errno = EINVAL; return -1; diff --git a/lib/utimens.h b/lib/utimens.h index 82a72a7a451..f1633c966aa 100644 --- a/lib/utimens.h +++ b/lib/utimens.h @@ -26,6 +26,9 @@ int lutimens (char const *, struct timespec const [2]); # include # include +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UTIMENS_INLINE # define _GL_UTIMENS_INLINE _GL_INLINE diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4 index c4c5e7f221b..4862d60d8e7 100644 --- a/m4/extern-inline.m4 +++ b/m4/extern-inline.m4 @@ -19,20 +19,28 @@ AC_DEFUN([gl_EXTERN_INLINE], 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. - Suppress the use of extern inline on Apple's platforms, as Libc at least - through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g., + Suppress the use of extern inline on problematic Apple configurations, as + Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., . Perhaps Apple will fix this some day. */ +#if (defined __APPLE__ \ + && ((! defined _DONT_USE_CTYPE_INLINE_ \ + && (defined __GNUC__ || defined __cplusplus)) \ + || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ + && defined __GNUC__ && ! defined __cplusplus))) +# define _GL_EXTERN_INLINE_APPLE_BUG +#endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !(defined __SUNPRO_C && __STDC__))) \ - && !defined __APPLE__) + && !defined _GL_EXTERN_INLINE_APPLE_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline +# define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ - && !defined __APPLE__) + && !defined _GL_EXTERN_INLINE_APPLE_BUG) # if __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) @@ -40,6 +48,7 @@ AC_DEFUN([gl_EXTERN_INLINE], # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern +# define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED From 2b943ba68988e9925cf50f4df37550f0342370dd Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Fri, 20 Sep 2013 07:30:50 +0400 Subject: [PATCH 264/321] * xterm.c (handle_one_xevent): Revert part of 2013-09-17 change to avoid Bug#15398. --- src/ChangeLog | 5 +++++ src/xterm.c | 21 ++++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index ff5d265e51f..bf6fcc3c870 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-20 Dmitry Antipov + + * xterm.c (handle_one_xevent): Revert part of 2013-09-17 change + to avoid Bug#15398. + 2013-09-19 Eli Zaretskii * w32reg.c (w32_get_string_resource): Make the first 2 arguments diff --git a/src/xterm.c b/src/xterm.c index 963cd4d8896..2633bf18d56 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -6101,13 +6101,6 @@ handle_one_xevent (struct x_display_info *dpyinfo, f = x_window_to_frame (dpyinfo, event->xexpose.window); if (f) { -#if ! GTK_CHECK_VERSION (2, 7, 0) - /* This seems to be needed for GTK 2.6. */ - x_clear_area (event->xexpose.display, - event->xexpose.window, - event->xexpose.x, event->xexpose.y, - event->xexpose.width, event->xexpose.height); -#endif if (!FRAME_VISIBLE_P (f)) { SET_FRAME_VISIBLE (f, 1); @@ -6116,8 +6109,18 @@ handle_one_xevent (struct x_display_info *dpyinfo, SET_FRAME_GARBAGED (f); } else - expose_frame (f, event->xexpose.x, event->xexpose.y, - event->xexpose.width, event->xexpose.height); + { +#ifdef USE_GTK + /* This seems to be needed for GTK 2.6 and later, see + http://debbugs.gnu.org/cgi/bugreport.cgi?bug=15398. */ + x_clear_area (event->xexpose.display, + event->xexpose.window, + event->xexpose.x, event->xexpose.y, + event->xexpose.width, event->xexpose.height); +#endif + expose_frame (f, event->xexpose.x, event->xexpose.y, + event->xexpose.width, event->xexpose.height); + } } else { From f5f0132bc9cfc037fa6a22983061704748d4091f Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 19 Sep 2013 20:41:37 -0700 Subject: [PATCH 265/321] Work around performance bug on OS X 10.8 and earlier. Perhaps Apple will fix this bug some day. See the thread starting with Daniel Colascione's email in: http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00343.html * configure.ac (FORTIFY_SOUR): New verbatim section. --- ChangeLog | 8 ++++++++ configure.ac | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/ChangeLog b/ChangeLog index 7d21714922c..07967de1cbe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2013-09-20 Paul Eggert + + Work around performance bug on OS X 10.8 and earlier. + Perhaps Apple will fix this bug some day. + See the thread starting with Daniel Colascione's email in: + http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00343.html + * configure.ac (FORTIFY_SOUR): New verbatim section. + 2013-09-19 Paul Eggert Merge from gnulib, incorporating: diff --git a/configure.ac b/configure.ac index fe326623571..8ff33e779a8 100644 --- a/configure.ac +++ b/configure.ac @@ -4703,6 +4703,24 @@ AC_SUBST(CYGWIN_OBJ) AC_SUBST(PRE_ALLOC_OBJ) AC_SUBST(POST_ALLOC_OBJ) +dnl Call this 'FORTIFY_SOUR' so that it sorts before the 'FORTIFY_SOURCE' +dnl verbatim defined above. The tricky name is apropos, as this hack +dnl makes Fortify go sour! +AH_VERBATIM([FORTIFY_SOUR], +[/* Without the following workaround, Emacs runs slowly on OS X 10.8. + The workaround disables some useful run-time checking, so it + should be conditional to the platforms with the performance bug. + Perhaps Apple will fix this some day; also see m4/extern-inline.m4. */ +#if defined __APPLE__ && defined __GNUC__ +# ifndef _DONT_USE_CTYPE_INLINE_ +# define _DONT_USE_CTYPE_INLINE_ +# endif +# ifndef _FORTIFY_SOURCE +# define _FORTIFY_SOURCE 0 +# endif +#endif +]) + # Configure gnulib. Although this does not affect CFLAGS or LIBS permanently. # it temporarily reverts them to their pre-pkg-config values, # because gnulib needs to work with both src (which uses the From 98ccf24eab43a7434108cc6a5300e777356557e3 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Fri, 20 Sep 2013 13:39:53 +0800 Subject: [PATCH 266/321] Rename cvs-append-to-ignore to vc-cvs-append-to-ignore. 2013-09-20 Xue Fuqiao * lisp/vc/pcvs.el (cvs-mode-ignore): * lisp/vc/vc-cvs.el (vc-cvs-ignore, vc-cvs-append-to-ignore): Rename cvs-append-to-ignore to vc-cvs-append-to-ignore. If/when someone complains about her package calling that function we can add an obsolete alias at that point. --- etc/NEWS | 3 +++ lisp/ChangeLog | 6 ++++++ lisp/vc/pcvs.el | 2 +- lisp/vc/vc-cvs.el | 5 ++--- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 6042ed8bf5f..736bf8f14e6 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -279,6 +279,9 @@ controlled tree in a window. under current version control system. When called with a prefix argument, you can remove a file from the ignored file list. +*** `cvs-append-to-ignore' has been renamed to `vc-cvs-append-to-ignore' +because it is moved to vc-cvs.el. + ** cl-lib *** New macro cl-tagbody. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7ada78fc09a..f32363a16a0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-09-20 Xue Fuqiao + + * vc/pcvs.el (cvs-mode-ignore): + * vc/vc-cvs.el (vc-cvs-ignore, vc-cvs-append-to-ignore): Rename + cvs-append-to-ignore to vc-cvs-append-to-ignore. + 2013-09-19 Stefan Monnier * eshell/em-ls.el: Use advice. Remove redundant :group keywords. diff --git a/lisp/vc/pcvs.el b/lisp/vc/pcvs.el index 914eef4dd39..539e8b43735 100644 --- a/lisp/vc/pcvs.el +++ b/lisp/vc/pcvs.el @@ -1963,7 +1963,7 @@ With a prefix argument, prompt for cvs flags." This command ignores files that are not flagged as `Unknown'." (interactive) (dolist (fi (cvs-mode-marked 'ignore)) - (cvs-append-to-ignore (cvs-fileinfo->dir fi) (cvs-fileinfo->file fi) + (vc-cvs-append-to-ignore (cvs-fileinfo->dir fi) (cvs-fileinfo->file fi) (eq (cvs-fileinfo->subtype fi) 'NEW-DIR)) (setf (cvs-fileinfo->type fi) 'DEAD)) (cvs-cleanup-collection cvs-cookies nil nil nil)) diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el index 11a30991391..57e23aba4d9 100644 --- a/lisp/vc/vc-cvs.el +++ b/lisp/vc/vc-cvs.el @@ -1228,10 +1228,9 @@ is non-nil." (defun vc-cvs-ignore (file &optional _directory _remove) "Ignore FILE under CVS." - (cvs-append-to-ignore (file-name-directory file) file)) + (vc-cvs-append-to-ignore (file-name-directory file) file)) -;; FIXME This should be in the vc-cvs- namespace if it is to live here. -(defun cvs-append-to-ignore (dir str &optional old-dir) +(defun vc-cvs-append-to-ignore (dir str &optional old-dir) "In DIR, add STR to the .cvsignore file. If OLD-DIR is non-nil, then this is a directory that we don't want to hear about anymore." From 485a4a6e8ac6b766f25ea42bf348c33b01646b20 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Fri, 20 Sep 2013 13:52:34 +0800 Subject: [PATCH 267/321] * admin/FOR-RELEASE: Remove outdated info. --- admin/FOR-RELEASE | 1 - 1 file changed, 1 deletion(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index c578d3d37e1..7dca2992850 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -68,7 +68,6 @@ I think this is different to what you get if you just use eg `make emacs.pdf' (e.g., enable "smallbook"). ** Check the keybindings in the refcards are correct, and add any new ones. -Regenerate the pdf versions in etc/refcards/. What paper size are the English versions supposed to be on? On Debian testing, the packages texlive-lang-czechslovak and texlive-lang-polish will let you generate the cs-* and sk-* pdfs. From 673558beaa96378d2fe0cdd2c57e423e9f1611ab Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 20 Sep 2013 10:21:20 +0300 Subject: [PATCH 268/321] Avoid replacing 'struct timeval' and compiling lib/gettimeofday.c on MinGW. nt/mingw-cfg.site (gl_cv_sys_struct_timeval_tv_sec): Set to "yes" to avoid gnulib replacement of 'struct timeval' and the resulting compilation of lib/gettimeofday.c with incompatible version of gettimeofday. Related discussions on emacs-devel: http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00286.html http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00361.html --- nt/ChangeLog | 9 +++++++++ nt/mingw-cfg.site | 3 +++ 2 files changed, 12 insertions(+) diff --git a/nt/ChangeLog b/nt/ChangeLog index e7d9ed99e3c..2f9a2f5608d 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,12 @@ +2013-09-20 Eli Zaretskii + + * mingw-cfg.site (gl_cv_sys_struct_timeval_tv_sec): Set to "yes" + to avoid gnulib replacement of 'struct timeval' and the resulting + compilation of lib/gettimeofday.c with incompatible version of + gettimeofday. Related discussions on emacs-devel: + http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00286.html + http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00361.html + 2013-08-31 Glenn Morris * INSTALL: Rename from INSTALL.MSYS. diff --git a/nt/mingw-cfg.site b/nt/mingw-cfg.site index 325bba29ae5..a217cbc8c70 100644 --- a/nt/mingw-cfg.site +++ b/nt/mingw-cfg.site @@ -31,6 +31,9 @@ # We want to use getopt.h from gnulib ac_cv_header_getopt_h=no +# We don't want our struct timeval replaced due to Posix conformance +gl_cv_sys_struct_timeval_tv_sec=yes + # ACL functions are implemented in w32.c ac_cv_search_acl_get_file="none required" ac_cv_func_acl_get_file=yes From 3054cd0150ff169bc57bc3044dda2b29d563e357 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Fri, 20 Sep 2013 17:19:56 +0800 Subject: [PATCH 269/321] * INSTALL: New homepage of libtiff. --- ChangeLog | 4 ++++ INSTALL | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 07967de1cbe..ad6163cd7f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-09-20 Xue Fuqiao + + * INSTALL: New homepage of libtiff. + 2013-09-20 Paul Eggert Work around performance bug on OS X 10.8 and earlier. diff --git a/INSTALL b/INSTALL index 262928e63ac..02813ac871b 100644 --- a/INSTALL +++ b/INSTALL @@ -176,7 +176,7 @@ does not provide them): . libpng for PNG: http://www.libpng.org/ . libz (for PNG): http://www.zlib.net/ . libjpeg for JPEG: http://www.ijg.org/ - . libtiff for TIFF: http://www.libtiff.org/ + . libtiff for TIFF: http://www.remotesensing.org/libtiff/ . libgif for GIF: http://sourceforge.net/projects/giflib/ Emacs will configure itself to build with these libraries if the From ad4c8083673d833dddc1934c5629654a3de491ef Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Sep 2013 06:17:44 -0400 Subject: [PATCH 270/321] Auto-commit of generated files. --- autogen/config.in | 31 +++++++++++++++++++++++++++---- autogen/configure | 2 ++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/autogen/config.in b/autogen/config.in index 9b2bbdfc949..c45b9920d06 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -127,6 +127,20 @@ along with GNU Emacs. If not, see . */ */ #undef FIRST_PTY_LETTER +/* Without the following workaround, Emacs runs slowly on OS X 10.8. + The workaround disables some useful run-time checking, so it + should be conditional to the platforms with the performance bug. + Perhaps Apple will fix this some day; also see m4/extern-inline.m4. */ +#if defined __APPLE__ && defined __GNUC__ +# ifndef _DONT_USE_CTYPE_INLINE_ +# define _DONT_USE_CTYPE_INLINE_ +# endif +# ifndef _FORTIFY_SOURCE +# define _FORTIFY_SOURCE 0 +# endif +#endif + + /* Enable compile-time and run-time bounds-checking, and some warnings, without upsetting glibc 2.15+. */ #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__ @@ -1642,20 +1656,28 @@ along with GNU Emacs. If not, see . */ 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. - Suppress the use of extern inline on Apple's platforms, as Libc at least - through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g., + Suppress the use of extern inline on problematic Apple configurations, as + Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., . Perhaps Apple will fix this some day. */ +#if (defined __APPLE__ \ + && ((! defined _DONT_USE_CTYPE_INLINE_ \ + && (defined __GNUC__ || defined __cplusplus)) \ + || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ + && defined __GNUC__ && ! defined __cplusplus))) +# define _GL_EXTERN_INLINE_APPLE_BUG +#endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !(defined __SUNPRO_C && __STDC__))) \ - && !defined __APPLE__) + && !defined _GL_EXTERN_INLINE_APPLE_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline +# define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ - && !defined __APPLE__) + && !defined _GL_EXTERN_INLINE_APPLE_BUG) # if __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) @@ -1663,6 +1685,7 @@ along with GNU Emacs. If not, see . */ # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern +# define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED diff --git a/autogen/configure b/autogen/configure index c5ee6973db8..9010a4cac5b 100755 --- a/autogen/configure +++ b/autogen/configure @@ -17561,6 +17561,8 @@ fi + + # Configure gnulib. Although this does not affect CFLAGS or LIBS permanently. # it temporarily reverts them to their pre-pkg-config values, # because gnulib needs to work with both src (which uses the From 2fd3a9f7491a59d427150fab0ad4df6ea12b3249 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Fri, 20 Sep 2013 18:22:20 +0800 Subject: [PATCH 271/321] Checked TUTORIAL.cn. --- admin/FOR-RELEASE | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index 7dca2992850..ea496e16cf0 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE @@ -137,7 +137,7 @@ SECTION READERS ---------------------------------- TUTORIAL cyd TUTORIAL.bg ogi -TUTORIAL.cn +TUTORIAL.cn xfq TUTORIAL.cs TUTORIAL.de wl TUTORIAL.eo @@ -145,7 +145,7 @@ TUTORIAL.es TUTORIAL.fr TUTORIAL.he eliz TUTORIAL.it -TUTORIAL.ja +TUTORIAL.ja TUTORIAL.ko TUTORIAL.nl Pieter Schoenmakers TUTORIAL.pl From 00382e8b9834e58203507d0461884671b78ebc01 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 20 Sep 2013 08:34:36 -0700 Subject: [PATCH 272/321] A simpler, centralized INLINE. * lib-src/profile.c (INLINE): New macro. (SYSTIME_INLINE): Remove. * src/conf_post.h (INLINE): Define only if not already defined. This allows us to use a single INLINE, defined by one file per executable. * src/emacs.c (INLINE): Define it. Also, include category.h, charset.h, composite.h, dispextern.h, syntax.h, systime.h, so that their INLINE definitions are expanded properly for Emacs. * src/blockinput.h, src/keyboard.c (BLOCKINPUT_INLINE): * src/buffer.h, src/buffer.c (BUFFER_INLINE): * src/category.h, src/category.c (CATEGORY_INLINE): * src/character.h, src/character.c (CHARACTER_INLINE): * src/charset.h, src/charset.c (CHARSET_INLINE): * src/composite.h, src/composite.c (COMPOSITE_INLINE): * src/dispextern.h, src/dispnew.c (DISPEXTERN_INLINE): * src/frame.h, src/frame.c (FRAME_INLINE): * src/intervals.h, src/intervals.c (INTERVALS_INLINE): * src/keyboard.h, src/keyboard.c (KEYBOARD_INLINE): * src/lisp.h, src/alloc.c (LISP_INLINE): * src/process.h, src/process.c (PROCESS_INLINE): * src/syntax.h, src/syntax.c (SYNTAX_INLINE): * src/systime.h, src/sysdep.c (SYSTIME_INLINE): * src/termhooks.h, src/terminal.h (TERMHOOKS_INLINE): * src/window.h, src/window.c (WINDOW_INLINE): Remove. All uses replaced with INLINE. --- lib-src/ChangeLog | 6 + lib-src/profile.c | 4 +- src/ChangeLog | 28 ++++ src/alloc.c | 2 - src/blockinput.h | 7 +- src/buffer.c | 2 - src/buffer.h | 75 +++++----- src/category.c | 2 - src/category.h | 5 +- src/character.c | 2 - src/character.h | 7 +- src/charset.c | 2 - src/charset.h | 5 +- src/composite.c | 2 - src/composite.h | 11 +- src/conf_post.h | 18 +-- src/dispextern.h | 19 +-- src/dispnew.c | 2 - src/emacs.c | 9 +- src/frame.c | 2 - src/frame.h | 51 +++---- src/intervals.c | 2 - src/intervals.h | 7 +- src/keyboard.c | 3 - src/keyboard.h | 19 +-- src/lisp.h | 365 +++++++++++++++++++++++----------------------- src/process.c | 2 - src/process.h | 7 +- src/syntax.c | 2 - src/syntax.h | 19 +-- src/sysdep.c | 2 - src/systime.h | 9 +- src/termhooks.h | 7 +- src/terminal.c | 2 - src/window.c | 2 - src/window.h | 19 +-- 36 files changed, 345 insertions(+), 383 deletions(-) diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index d2e9dd18177..1186a0c025c 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,9 @@ +2013-09-20 Paul Eggert + + A simpler, centralized INLINE. + * profile.c (INLINE): New macro. + (SYSTIME_INLINE): Remove. + 2013-08-28 Paul Eggert * Makefile.in (SHELL): Now @SHELL@, not /bin/sh, diff --git a/lib-src/profile.c b/lib-src/profile.c index bddfea76334..aab44a0fe86 100644 --- a/lib-src/profile.c +++ b/lib-src/profile.c @@ -29,9 +29,9 @@ along with GNU Emacs. If not, see . */ ** abstraction : a stopwatch ** operations: reset_watch, get_time */ -#include -#define SYSTIME_INLINE EXTERN_INLINE +#define INLINE EXTERN_INLINE +#include #include #include diff --git a/src/ChangeLog b/src/ChangeLog index bf6fcc3c870..5cce3ad3056 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,31 @@ +2013-09-20 Paul Eggert + + A simpler, centralized INLINE. + * conf_post.h (INLINE): Define only if not already defined. + This allows us to use a single INLINE, defined by one file + per executable. + * emacs.c (INLINE): Define it. + Also, include category.h, charset.h, composite.h, dispextern.h, + syntax.h, systime.h, so that their INLINE definitions are expanded + properly for Emacs. + * blockinput.h, keyboard.c (BLOCKINPUT_INLINE): + * buffer.h, buffer.c (BUFFER_INLINE): + * category.h, category.c (CATEGORY_INLINE): + * character.h, character.c (CHARACTER_INLINE): + * charset.h, charset.c (CHARSET_INLINE): + * composite.h, composite.c (COMPOSITE_INLINE): + * dispextern.h, dispnew.c (DISPEXTERN_INLINE): + * frame.h, frame.c (FRAME_INLINE): + * intervals.h, intervals.c (INTERVALS_INLINE): + * keyboard.h, keyboard.c (KEYBOARD_INLINE): + * lisp.h, alloc.c (LISP_INLINE): + * process.h, process.c (PROCESS_INLINE): + * syntax.h, syntax.c (SYNTAX_INLINE): + * systime.h, sysdep.c (SYSTIME_INLINE): + * termhooks.h, terminal.h (TERMHOOKS_INLINE): + * window.h, window.c (WINDOW_INLINE): + Remove. All uses replaced with INLINE. + 2013-09-20 Dmitry Antipov * xterm.c (handle_one_xevent): Revert part of 2013-09-17 change diff --git a/src/alloc.c b/src/alloc.c index 0989e63664f..de73ce9bae0 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -20,8 +20,6 @@ along with GNU Emacs. If not, see . */ #include -#define LISP_INLINE EXTERN_INLINE - #include #include /* For CHAR_BIT. */ diff --git a/src/blockinput.h b/src/blockinput.h index 6dc22c6f5dd..8f1b1e18985 100644 --- a/src/blockinput.h +++ b/src/blockinput.h @@ -20,9 +20,6 @@ along with GNU Emacs. If not, see . */ #define EMACS_BLOCKINPUT_H INLINE_HEADER_BEGIN -#ifndef BLOCKINPUT_INLINE -# define BLOCKINPUT_INLINE INLINE -#endif /* Emacs should avoid doing anything hairy in a signal handler, because so many system functions are non-reentrant. For example, malloc @@ -52,7 +49,7 @@ extern volatile int interrupt_input_blocked; /* Begin critical section. */ -BLOCKINPUT_INLINE void +INLINE void block_input (void) { interrupt_input_blocked++; @@ -64,7 +61,7 @@ extern void unblock_input_to (int); /* In critical section ? */ -BLOCKINPUT_INLINE bool +INLINE bool input_blocked_p (void) { return interrupt_input_blocked > 0; diff --git a/src/buffer.c b/src/buffer.c index 3d7468904f2..815f3926c55 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -20,8 +20,6 @@ along with GNU Emacs. If not, see . */ #include -#define BUFFER_INLINE EXTERN_INLINE - #include #include #include diff --git a/src/buffer.h b/src/buffer.h index 169a15c7d0f..a36c0d13c9e 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -22,9 +22,6 @@ along with GNU Emacs. If not, see . */ #include INLINE_HEADER_BEGIN -#ifndef BUFFER_INLINE -# define BUFFER_INLINE INLINE -#endif /* Accessing the parameters of the current buffer. */ @@ -875,97 +872,97 @@ struct buffer /* Most code should use these functions to set Lisp fields in struct buffer. */ -BUFFER_INLINE void +INLINE void bset_bidi_paragraph_direction (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (bidi_paragraph_direction) = val; } -BUFFER_INLINE void +INLINE void bset_case_canon_table (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (case_canon_table) = val; } -BUFFER_INLINE void +INLINE void bset_case_eqv_table (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (case_eqv_table) = val; } -BUFFER_INLINE void +INLINE void bset_directory (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (directory) = val; } -BUFFER_INLINE void +INLINE void bset_display_count (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (display_count) = val; } -BUFFER_INLINE void +INLINE void bset_display_time (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (display_time) = val; } -BUFFER_INLINE void +INLINE void bset_downcase_table (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (downcase_table) = val; } -BUFFER_INLINE void +INLINE void bset_enable_multibyte_characters (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (enable_multibyte_characters) = val; } -BUFFER_INLINE void +INLINE void bset_filename (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (filename) = val; } -BUFFER_INLINE void +INLINE void bset_keymap (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (keymap) = val; } -BUFFER_INLINE void +INLINE void bset_last_selected_window (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (last_selected_window) = val; } -BUFFER_INLINE void +INLINE void bset_local_var_alist (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (local_var_alist) = val; } -BUFFER_INLINE void +INLINE void bset_mark_active (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (mark_active) = val; } -BUFFER_INLINE void +INLINE void bset_point_before_scroll (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (point_before_scroll) = val; } -BUFFER_INLINE void +INLINE void bset_read_only (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (read_only) = val; } -BUFFER_INLINE void +INLINE void bset_truncate_lines (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (truncate_lines) = val; } -BUFFER_INLINE void +INLINE void bset_undo_list (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (undo_list) = val; } -BUFFER_INLINE void +INLINE void bset_upcase_table (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (upcase_table) = val; } -BUFFER_INLINE void +INLINE void bset_width_table (struct buffer *b, Lisp_Object val) { b->INTERNAL_FIELD (width_table) = val; @@ -1089,7 +1086,7 @@ extern void set_buffer_if_live (Lisp_Object); windows than the selected one requires a select_window at some time, and that increments windows_or_buffers_changed. */ -BUFFER_INLINE void +INLINE void set_buffer_internal (struct buffer *b) { if (current_buffer != b) @@ -1099,7 +1096,7 @@ set_buffer_internal (struct buffer *b) /* Arrange to go back to the original buffer after the next call to unbind_to if the original buffer is still alive. */ -BUFFER_INLINE void +INLINE void record_unwind_current_buffer (void) { record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ()); @@ -1138,7 +1135,7 @@ extern Lisp_Object Qpriority, Qbefore_string, Qafter_string; /* Get text properties of B. */ -BUFFER_INLINE INTERVAL +INLINE INTERVAL buffer_intervals (struct buffer *b) { eassert (b->text != NULL); @@ -1147,7 +1144,7 @@ buffer_intervals (struct buffer *b) /* Set text properties of B to I. */ -BUFFER_INLINE void +INLINE void set_buffer_intervals (struct buffer *b, INTERVAL i) { eassert (b->text != NULL); @@ -1156,7 +1153,7 @@ set_buffer_intervals (struct buffer *b, INTERVAL i) /* Non-zero if current buffer has overlays. */ -BUFFER_INLINE bool +INLINE bool buffer_has_overlays (void) { return current_buffer->overlays_before || current_buffer->overlays_after; @@ -1176,7 +1173,7 @@ buffer_has_overlays (void) the buffer to the next character after fetching this one. Instead, use either FETCH_CHAR_ADVANCE or STRING_CHAR_AND_LENGTH. */ -BUFFER_INLINE int +INLINE int FETCH_MULTIBYTE_CHAR (ptrdiff_t pos) { unsigned char *p = ((pos >= GPT_BYTE ? GAP_SIZE : 0) @@ -1188,7 +1185,7 @@ FETCH_MULTIBYTE_CHAR (ptrdiff_t pos) If POS doesn't point the head of valid multi-byte form, only the byte at POS is returned. No range checking. */ -BUFFER_INLINE int +INLINE int BUF_FETCH_MULTIBYTE_CHAR (struct buffer *buf, ptrdiff_t pos) { unsigned char *p @@ -1199,7 +1196,7 @@ BUF_FETCH_MULTIBYTE_CHAR (struct buffer *buf, ptrdiff_t pos) /* Return number of windows showing B. */ -BUFFER_INLINE int +INLINE int buffer_window_count (struct buffer *b) { if (b->base_buffer) @@ -1306,13 +1303,13 @@ extern int last_per_buffer_idx; /* Functions to get and set default value of the per-buffer variable at offset OFFSET in the buffer structure. */ -BUFFER_INLINE Lisp_Object +INLINE Lisp_Object per_buffer_default (int offset) { return *(Lisp_Object *)(offset + (char *) &buffer_defaults); } -BUFFER_INLINE void +INLINE void set_per_buffer_default (int offset, Lisp_Object value) { *(Lisp_Object *)(offset + (char *) &buffer_defaults) = value; @@ -1321,20 +1318,20 @@ set_per_buffer_default (int offset, Lisp_Object value) /* Functions to get and set buffer-local value of the per-buffer variable at offset OFFSET in the buffer structure. */ -BUFFER_INLINE Lisp_Object +INLINE Lisp_Object per_buffer_value (struct buffer *b, int offset) { return *(Lisp_Object *)(offset + (char *) b); } -BUFFER_INLINE void +INLINE void set_per_buffer_value (struct buffer *b, int offset, Lisp_Object value) { *(Lisp_Object *)(offset + (char *) b) = value; } /* Downcase a character C, or make no change if that cannot be done. */ -BUFFER_INLINE int +INLINE int downcase (int c) { Lisp_Object downcase_table = BVAR (current_buffer, downcase_table); @@ -1343,10 +1340,10 @@ downcase (int c) } /* 1 if C is upper case. */ -BUFFER_INLINE bool uppercasep (int c) { return downcase (c) != c; } +INLINE bool uppercasep (int c) { return downcase (c) != c; } /* Upcase a character C known to be not upper case. */ -BUFFER_INLINE int +INLINE int upcase1 (int c) { Lisp_Object upcase_table = BVAR (current_buffer, upcase_table); @@ -1355,13 +1352,13 @@ upcase1 (int c) } /* 1 if C is lower case. */ -BUFFER_INLINE bool +INLINE bool lowercasep (int c) { return !uppercasep (c) && upcase1 (c) != c; } /* Upcase a character C, or make no change if that cannot be done. */ -BUFFER_INLINE int upcase (int c) { return uppercasep (c) ? c : upcase1 (c); } +INLINE int upcase (int c) { return uppercasep (c) ? c : upcase1 (c); } INLINE_HEADER_END diff --git a/src/category.c b/src/category.c index b28978fb721..da5e81e4709 100644 --- a/src/category.c +++ b/src/category.c @@ -30,8 +30,6 @@ along with GNU Emacs. If not, see . */ #include -#define CATEGORY_INLINE EXTERN_INLINE - #include "lisp.h" #include "character.h" #include "buffer.h" diff --git a/src/category.h b/src/category.h index 17cd203db45..828dcd1f325 100644 --- a/src/category.h +++ b/src/category.h @@ -54,9 +54,6 @@ along with GNU Emacs. If not, see . */ But, for the moment, we are not using this slot. */ INLINE_HEADER_BEGIN -#ifndef CATEGORY_INLINE -# define CATEGORY_INLINE INLINE -#endif #define CATEGORYP(x) RANGED_INTEGERP (0x20, x, 0x7E) @@ -84,7 +81,7 @@ INLINE_HEADER_BEGIN >> ((category) % 8)) & 1) /* Return true if category set of CH contains CATEGORY. */ -CATEGORY_INLINE bool +INLINE bool CHAR_HAS_CATEGORY (int ch, int category) { Lisp_Object category_set = CATEGORY_SET (ch); diff --git a/src/character.c b/src/character.c index 6fefb6e8824..9807339a61e 100644 --- a/src/character.c +++ b/src/character.c @@ -29,8 +29,6 @@ along with GNU Emacs. If not, see . */ #include #endif -#define CHARACTER_INLINE EXTERN_INLINE - #include #ifdef emacs diff --git a/src/character.h b/src/character.h index b2cdcb76699..cb03cb39947 100644 --- a/src/character.h +++ b/src/character.h @@ -26,9 +26,6 @@ along with GNU Emacs. If not, see . */ #include INLINE_HEADER_BEGIN -#ifndef CHARACTER_INLINE -# define CHARACTER_INLINE INLINE -#endif /* character code 1st byte byte sequence -------------- -------- ------------- @@ -558,7 +555,7 @@ INLINE_HEADER_BEGIN #define SANE_TAB_WIDTH(buf) \ sanitize_tab_width (XFASTINT (BVAR (buf, tab_width))) -CHARACTER_INLINE int +INLINE int sanitize_tab_width (EMACS_INT width) { return 0 < width && width <= 1000 ? width : 8; @@ -579,7 +576,7 @@ sanitize_tab_width (EMACS_INT width) /* Return a non-outlandish value for a character width. */ -CHARACTER_INLINE int +INLINE int sanitize_char_width (EMACS_INT width) { return 0 <= width && width <= 1000 ? width : 1000; diff --git a/src/charset.c b/src/charset.c index d46cb445f85..ef040a94605 100644 --- a/src/charset.c +++ b/src/charset.c @@ -26,8 +26,6 @@ along with GNU Emacs. If not, see . */ #include -#define CHARSET_INLINE EXTERN_INLINE - #include #include #include diff --git a/src/charset.h b/src/charset.h index d9a5662e520..6e6a8891b4a 100644 --- a/src/charset.h +++ b/src/charset.h @@ -30,9 +30,6 @@ along with GNU Emacs. If not, see . */ #include INLINE_HEADER_BEGIN -#ifndef CHARSET_INLINE -# define CHARSET_INLINE INLINE -#endif /* Index to arguments of Fdefine_charset_internal. */ @@ -331,7 +328,7 @@ extern int emacs_mule_charset[256]; #define CHARSET_DEUNIFIER(charset) \ (CHARSET_ATTR_DEUNIFIER (CHARSET_ATTRIBUTES (charset))) -CHARSET_INLINE void +INLINE void set_charset_attr (struct charset *charset, enum charset_attr_index idx, Lisp_Object val) { diff --git a/src/composite.c b/src/composite.c index 28942fe4f74..ee4195572a5 100644 --- a/src/composite.c +++ b/src/composite.c @@ -24,8 +24,6 @@ along with GNU Emacs. If not, see . */ #include -#define COMPOSITE_INLINE EXTERN_INLINE - #include "lisp.h" #include "character.h" #include "buffer.h" diff --git a/src/composite.h b/src/composite.h index df170093797..9026d03f7b6 100644 --- a/src/composite.h +++ b/src/composite.h @@ -28,9 +28,6 @@ along with GNU Emacs. If not, see . */ #include "font.h" INLINE_HEADER_BEGIN -#ifndef COMPOSITE_INLINE -# define COMPOSITE_INLINE INLINE -#endif /* Methods to display a sequence of components of a composition. */ enum composition_method { @@ -59,7 +56,7 @@ enum composition_method { They don't check validity of PROP. */ /* Return true if PROP is already registered. */ -COMPOSITE_INLINE bool +INLINE bool composition_registered_p (Lisp_Object prop) { return INTEGERP (XCAR (prop)); @@ -207,7 +204,7 @@ extern void compose_text (ptrdiff_t, ptrdiff_t, Lisp_Object, Lisp_Object, /* Return the method of a composition with property PROP. */ -COMPOSITE_INLINE enum composition_method +INLINE enum composition_method composition_method (Lisp_Object prop) { if (composition_registered_p (prop)) @@ -226,7 +223,7 @@ composition_method (Lisp_Object prop) /* Given offsets START and END, return true if PROP is a valid composition property with length END - START. */ -COMPOSITE_INLINE bool +INLINE bool composition_valid_p (ptrdiff_t start, ptrdiff_t end, Lisp_Object prop) { return (CONSP (prop) @@ -262,7 +259,7 @@ composition_valid_p (ptrdiff_t start, ptrdiff_t end, Lisp_Object prop) #define LGSTRING_GLYPH_LEN(lgs) (ASIZE ((lgs)) - 2) #define LGSTRING_GLYPH(lgs, idx) AREF ((lgs), (idx) + 2) #define LGSTRING_SET_GLYPH(lgs, idx, val) ASET ((lgs), (idx) + 2, (val)) -COMPOSITE_INLINE Lisp_Object * +INLINE Lisp_Object * lgstring_glyph_addr (Lisp_Object lgs, ptrdiff_t idx) { return aref_addr (lgs, idx + 2); diff --git a/src/conf_post.h b/src/conf_post.h index 16714076f6f..30a4a5a9422 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -208,11 +208,8 @@ extern void _DebPrint (const char *fmt, ...); [#include any other .h files first.] ... INLINE_HEADER_BEGIN - #ifndef FOO_INLINE - # define FOO_INLINE INLINE - #endif ... - FOO_INLINE int + INLINE int incr (int i) { return i + 1; @@ -220,19 +217,22 @@ extern void _DebPrint (const char *fmt, ...); ... INLINE_HEADER_END - The corresponding foo.c file should do this: + For every executable, exactly one file that includes the header + should do this: - #define FOO_INLINE EXTERN_INLINE + #define INLINE EXTERN_INLINE - before including any .h file other than config.h. - Other .c files should not define FOO_INLINE. + before including config.h or any other .h file. + Other .c files should not define INLINE. C99 compilers compile functions like 'incr' as C99-style extern inline functions. Pre-C99 GCCs do something similar with GNU-specific keywords. Pre-C99 non-GCC compilers use static functions, which bloats the code but is good enough. */ -#define INLINE _GL_INLINE +#ifndef INLINE +# define INLINE _GL_INLINE +#endif #define EXTERN_INLINE _GL_EXTERN_INLINE #define INLINE_HEADER_BEGIN _GL_INLINE_HEADER_BEGIN #define INLINE_HEADER_END _GL_INLINE_HEADER_END diff --git a/src/dispextern.h b/src/dispextern.h index e1d48b0e460..45c1bedb64c 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -49,12 +49,9 @@ typedef struct { #endif INLINE_HEADER_BEGIN -#ifndef DISPEXTERN_INLINE -# define DISPEXTERN_INLINE INLINE -#endif #include -DISPEXTERN_INLINE int +INLINE int xstrcasecmp (char const *a, char const *b) { return c_strcasecmp (a, b); @@ -289,10 +286,10 @@ typedef struct { } GLYPH; /* Return a glyph's character code. */ -DISPEXTERN_INLINE int GLYPH_CHAR (GLYPH glyph) { return glyph.ch; } +INLINE int GLYPH_CHAR (GLYPH glyph) { return glyph.ch; } /* Return a glyph's face ID. */ -DISPEXTERN_INLINE int GLYPH_FACE (GLYPH glyph) { return glyph.face_id; } +INLINE int GLYPH_FACE (GLYPH glyph) { return glyph.face_id; } #define SET_GLYPH_CHAR(glyph, char) ((glyph).ch = (char)) #define SET_GLYPH_FACE(glyph, face) ((glyph).face_id = (face)) @@ -301,7 +298,7 @@ DISPEXTERN_INLINE int GLYPH_FACE (GLYPH glyph) { return glyph.face_id; } /* The following are valid only if GLYPH_CODE_P (gc). */ -DISPEXTERN_INLINE int +INLINE int GLYPH_CODE_CHAR (Lisp_Object gc) { return (CONSP (gc) @@ -309,7 +306,7 @@ GLYPH_CODE_CHAR (Lisp_Object gc) : XINT (gc) & MAX_CHAR); } -DISPEXTERN_INLINE int +INLINE int GLYPH_CODE_FACE (Lisp_Object gc) { return CONSP (gc) ? XINT (XCDR (gc)) : XINT (gc) >> CHARACTERBITS; @@ -1824,7 +1821,7 @@ struct face_cache #endif /* not HAVE_WINDOW_SYSTEM */ /* Return true if G contains a valid character code. */ -DISPEXTERN_INLINE bool +INLINE bool GLYPH_CHAR_VALID_P (GLYPH g) { return CHAR_VALID_P (GLYPH_CHAR (g)); @@ -1834,7 +1831,7 @@ GLYPH_CHAR_VALID_P (GLYPH g) encodes a char code in the lower CHARACTERBITS bits and a (very small) face-id in the upper bits, or it may be a cons (CHAR . FACE-ID). */ -DISPEXTERN_INLINE bool +INLINE bool GLYPH_CODE_P (Lisp_Object gc) { return (CONSP (gc) @@ -2705,7 +2702,7 @@ typedef struct { unsigned mouse_face_hidden : 1; } Mouse_HLInfo; -DISPEXTERN_INLINE void +INLINE void reset_mouse_highlight (Mouse_HLInfo *hlinfo) { diff --git a/src/dispnew.c b/src/dispnew.c index 2b16e881c80..5bdc84f1b1d 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -20,8 +20,6 @@ along with GNU Emacs. If not, see . */ #include -#define DISPEXTERN_INLINE EXTERN_INLINE - #include "sysstdio.h" #include diff --git a/src/emacs.c b/src/emacs.c index dc4c23b3991..79f759cd5b5 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -18,8 +18,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ - +#define INLINE EXTERN_INLINE #include + #include #include @@ -72,6 +73,12 @@ along with GNU Emacs. If not, see . */ #include "termhooks.h" #include "keyboard.h" #include "keymap.h" +#include "category.h" +#include "charset.h" +#include "composite.h" +#include "dispextern.h" +#include "syntax.h" +#include "systime.h" #ifdef HAVE_GNUTLS #include "gnutls.h" diff --git a/src/frame.c b/src/frame.c index 78cd6914bc4..d2943211377 100644 --- a/src/frame.c +++ b/src/frame.c @@ -19,8 +19,6 @@ along with GNU Emacs. If not, see . */ #include -#define FRAME_INLINE EXTERN_INLINE - #include #include #include diff --git a/src/frame.h b/src/frame.h index f5fd7dbcc36..ffab992023a 100644 --- a/src/frame.h +++ b/src/frame.h @@ -27,9 +27,6 @@ along with GNU Emacs. If not, see . */ #include "termhooks.h" INLINE_HEADER_BEGIN -#ifndef FRAME_INLINE -# define FRAME_INLINE INLINE -#endif enum vertical_scroll_bar_type { @@ -448,105 +445,105 @@ struct frame /* Most code should use these functions to set Lisp fields in struct frame. */ -FRAME_INLINE void +INLINE void fset_buffer_list (struct frame *f, Lisp_Object val) { f->buffer_list = val; } -FRAME_INLINE void +INLINE void fset_buried_buffer_list (struct frame *f, Lisp_Object val) { f->buried_buffer_list = val; } -FRAME_INLINE void +INLINE void fset_condemned_scroll_bars (struct frame *f, Lisp_Object val) { f->condemned_scroll_bars = val; } -FRAME_INLINE void +INLINE void fset_face_alist (struct frame *f, Lisp_Object val) { f->face_alist = val; } -FRAME_INLINE void +INLINE void fset_focus_frame (struct frame *f, Lisp_Object val) { f->focus_frame = val; } -FRAME_INLINE void +INLINE void fset_icon_name (struct frame *f, Lisp_Object val) { f->icon_name = val; } -FRAME_INLINE void +INLINE void fset_menu_bar_items (struct frame *f, Lisp_Object val) { f->menu_bar_items = val; } -FRAME_INLINE void +INLINE void fset_menu_bar_vector (struct frame *f, Lisp_Object val) { f->menu_bar_vector = val; } #if defined (HAVE_X_WINDOWS) && ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) -FRAME_INLINE void +INLINE void fset_menu_bar_window (struct frame *f, Lisp_Object val) { f->menu_bar_window = val; } #endif -FRAME_INLINE void +INLINE void fset_name (struct frame *f, Lisp_Object val) { f->name = val; } -FRAME_INLINE void +INLINE void fset_param_alist (struct frame *f, Lisp_Object val) { f->param_alist = val; } -FRAME_INLINE void +INLINE void fset_root_window (struct frame *f, Lisp_Object val) { f->root_window = val; } -FRAME_INLINE void +INLINE void fset_scroll_bars (struct frame *f, Lisp_Object val) { f->scroll_bars = val; } -FRAME_INLINE void +INLINE void fset_selected_window (struct frame *f, Lisp_Object val) { f->selected_window = val; } -FRAME_INLINE void +INLINE void fset_title (struct frame *f, Lisp_Object val) { f->title = val; } -FRAME_INLINE void +INLINE void fset_tool_bar_items (struct frame *f, Lisp_Object val) { f->tool_bar_items = val; } -FRAME_INLINE void +INLINE void fset_tool_bar_position (struct frame *f, Lisp_Object val) { f->tool_bar_position = val; } #if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS) -FRAME_INLINE void +INLINE void fset_tool_bar_window (struct frame *f, Lisp_Object val) { f->tool_bar_window = val; } -FRAME_INLINE void +INLINE void fset_current_tool_bar_string (struct frame *f, Lisp_Object val) { f->current_tool_bar_string = val; } -FRAME_INLINE void +INLINE void fset_desired_tool_bar_string (struct frame *f, Lisp_Object val) { f->desired_tool_bar_string = val; @@ -555,7 +552,7 @@ fset_desired_tool_bar_string (struct frame *f, Lisp_Object val) #define NUMVAL(X) ((INTEGERP (X) || FLOATP (X)) ? XFLOATINT (X) : -1) -FRAME_INLINE double +INLINE double default_pixels_per_inch_x (void) { Lisp_Object v = (CONSP (Vdisplay_pixels_per_inch) @@ -564,7 +561,7 @@ default_pixels_per_inch_x (void) return NUMVAL (v) > 0 ? NUMVAL (v) : 72.0; } -FRAME_INLINE double +INLINE double default_pixels_per_inch_y (void) { Lisp_Object v = (CONSP (Vdisplay_pixels_per_inch) @@ -1282,7 +1279,7 @@ extern int x_bitmap_icon (struct frame *, Lisp_Object); /* Set F's bitmap icon, if specified among F's parameters. */ -FRAME_INLINE void +INLINE void x_set_bitmap_icon (struct frame *f) { Lisp_Object obj = assq_no_quit (Qicon_type, f->param_alist); @@ -1295,7 +1292,7 @@ x_set_bitmap_icon (struct frame *f) #endif /* HAVE_WINDOW_SYSTEM */ -FRAME_INLINE void +INLINE void flush_frame (struct frame *f) { struct redisplay_interface *rif = FRAME_RIF (f); diff --git a/src/intervals.c b/src/intervals.c index ded536ca3c8..66b486e1422 100644 --- a/src/intervals.c +++ b/src/intervals.c @@ -40,8 +40,6 @@ along with GNU Emacs. If not, see . */ #include -#define INTERVALS_INLINE EXTERN_INLINE - #include #include "lisp.h" #include "intervals.h" diff --git a/src/intervals.h b/src/intervals.h index a38e83cf10e..51dfa09c5c4 100644 --- a/src/intervals.h +++ b/src/intervals.h @@ -19,9 +19,6 @@ along with GNU Emacs. If not, see . */ #include "dispextern.h" INLINE_HEADER_BEGIN -#ifndef INTERVALS_INLINE -# define INTERVALS_INLINE INLINE -#endif /* Basic data type for use of intervals. */ @@ -136,14 +133,14 @@ struct interval /* Use these functions to set Lisp_Object or pointer slots of struct interval. */ -INTERVALS_INLINE void +INLINE void set_interval_parent (INTERVAL i, INTERVAL parent) { i->up_obj = 0; i->up.interval = parent; } -INTERVALS_INLINE void +INLINE void set_interval_plist (INTERVAL i, Lisp_Object plist) { i->plist = plist; diff --git a/src/keyboard.c b/src/keyboard.c index 020c8859941..201b9ec8f5b 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -20,9 +20,6 @@ along with GNU Emacs. If not, see . */ #include -#define BLOCKINPUT_INLINE EXTERN_INLINE -#define KEYBOARD_INLINE EXTERN_INLINE - #include "sysstdio.h" #include "lisp.h" diff --git a/src/keyboard.h b/src/keyboard.h index 1ee4a97c5c5..49f87b20a43 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -22,9 +22,6 @@ along with GNU Emacs. If not, see . */ #include "termhooks.h" INLINE_HEADER_BEGIN -#ifndef KEYBOARD_INLINE -# define KEYBOARD_INLINE INLINE -#endif /* Most code should use this macro to access Lisp fields in struct kboard. */ @@ -179,42 +176,42 @@ struct kboard ptrdiff_t echo_after_prompt; }; -KEYBOARD_INLINE void +INLINE void kset_default_minibuffer_frame (struct kboard *kb, Lisp_Object val) { kb->INTERNAL_FIELD (Vdefault_minibuffer_frame) = val; } -KEYBOARD_INLINE void +INLINE void kset_defining_kbd_macro (struct kboard *kb, Lisp_Object val) { kb->INTERNAL_FIELD (defining_kbd_macro) = val; } -KEYBOARD_INLINE void +INLINE void kset_input_decode_map (struct kboard *kb, Lisp_Object val) { kb->INTERNAL_FIELD (Vinput_decode_map) = val; } -KEYBOARD_INLINE void +INLINE void kset_last_command (struct kboard *kb, Lisp_Object val) { kb->INTERNAL_FIELD (Vlast_command) = val; } -KEYBOARD_INLINE void +INLINE void kset_last_kbd_macro (struct kboard *kb, Lisp_Object val) { kb->INTERNAL_FIELD (Vlast_kbd_macro) = val; } -KEYBOARD_INLINE void +INLINE void kset_prefix_arg (struct kboard *kb, Lisp_Object val) { kb->INTERNAL_FIELD (Vprefix_arg) = val; } -KEYBOARD_INLINE void +INLINE void kset_system_key_alist (struct kboard *kb, Lisp_Object val) { kb->INTERNAL_FIELD (Vsystem_key_alist) = val; } -KEYBOARD_INLINE void +INLINE void kset_window_system (struct kboard *kb, Lisp_Object val) { kb->INTERNAL_FIELD (Vwindow_system) = val; diff --git a/src/lisp.h b/src/lisp.h index 2b1af1faa19..bd09cab5a75 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -33,9 +33,6 @@ along with GNU Emacs. If not, see . */ #include INLINE_HEADER_BEGIN -#ifndef LISP_INLINE -# define LISP_INLINE INLINE -#endif /* The ubiquitous max and min macros. */ #undef min @@ -345,11 +342,11 @@ enum enum_USE_LSB_TAG { USE_LSB_TAG = 0 }; ARGS should be parenthesized. Implement the function by calling lisp_h_NAME ARGS. */ #define LISP_MACRO_DEFUN(name, type, argdecls, args) \ - LISP_INLINE type (name) argdecls { return lisp_h_##name args; } + INLINE type (name) argdecls { return lisp_h_##name args; } /* like LISP_MACRO_DEFUN, except NAME returns void. */ #define LISP_MACRO_DEFUN_VOID(name, argdecls, args) \ - LISP_INLINE void (name) argdecls { lisp_h_##name args; } + INLINE void (name) argdecls { lisp_h_##name args; } /* Define the fundamental Lisp data structures. */ @@ -610,14 +607,14 @@ LISP_MACRO_DEFUN (XUNTAG, void *, (Lisp_Object a, int type), (a, type)) /* Make a Lisp integer representing the value of the low order bits of N. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object make_number (EMACS_INT n) { return XIL (USE_LSB_TAG ? n << INTTYPEBITS : n & INTMASK); } /* Extract A's value as a signed integer. */ -LISP_INLINE EMACS_INT +INLINE EMACS_INT XINT (Lisp_Object a) { EMACS_INT i = XLI (a); @@ -627,7 +624,7 @@ XINT (Lisp_Object a) /* Like XINT (A), but may be faster. A must be nonnegative. If ! USE_LSB_TAG, this takes advantage of the fact that Lisp integers have zero-bits in their tags. */ -LISP_INLINE EMACS_INT +INLINE EMACS_INT XFASTINT (Lisp_Object a) { EMACS_INT n = USE_LSB_TAG ? XINT (a) : XLI (a); @@ -636,7 +633,7 @@ XFASTINT (Lisp_Object a) } /* Extract A's type. */ -LISP_INLINE enum Lisp_Type +INLINE enum Lisp_Type XTYPE (Lisp_Object a) { EMACS_UINT i = XLI (a); @@ -644,7 +641,7 @@ XTYPE (Lisp_Object a) } /* Extract A's pointer value, assuming A's type is TYPE. */ -LISP_INLINE void * +INLINE void * XUNTAG (Lisp_Object a, int type) { if (USE_LSB_TAG) @@ -658,7 +655,7 @@ XUNTAG (Lisp_Object a, int type) #endif /* ! USE_LSB_TAG */ /* Extract A's value as an unsigned integer. */ -LISP_INLINE EMACS_UINT +INLINE EMACS_UINT XUINT (Lisp_Object a) { EMACS_UINT i = XLI (a); @@ -671,7 +668,7 @@ XUINT (Lisp_Object a) LISP_MACRO_DEFUN (XHASH, EMACS_INT, (Lisp_Object a), (a)) /* Like make_number (N), but may be faster. N must be in nonnegative range. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object make_natnum (EMACS_INT n) { eassert (0 <= n && n <= MOST_POSITIVE_FIXNUM); @@ -688,7 +685,7 @@ LISP_MACRO_DEFUN (EQ, bool, (Lisp_Object x, Lisp_Object y), (x, y)) #define FIXNUM_OVERFLOW_P(i) \ (! ((0 <= (i) || MOST_NEGATIVE_FIXNUM <= (i)) && (i) <= MOST_POSITIVE_FIXNUM)) -LISP_INLINE ptrdiff_t +INLINE ptrdiff_t clip_to_bounds (ptrdiff_t lower, EMACS_INT num, ptrdiff_t upper) { return num < lower ? lower : num <= upper ? num : upper; @@ -698,31 +695,31 @@ clip_to_bounds (ptrdiff_t lower, EMACS_INT num, ptrdiff_t upper) /* Defined in this file. */ union Lisp_Fwd; -LISP_INLINE bool BOOL_VECTOR_P (Lisp_Object); -LISP_INLINE bool BUFFER_OBJFWDP (union Lisp_Fwd *); -LISP_INLINE bool BUFFERP (Lisp_Object); -LISP_INLINE bool CHAR_TABLE_P (Lisp_Object); -LISP_INLINE Lisp_Object CHAR_TABLE_REF_ASCII (Lisp_Object, ptrdiff_t); -LISP_INLINE bool (CONSP) (Lisp_Object); -LISP_INLINE bool (FLOATP) (Lisp_Object); -LISP_INLINE bool functionp (Lisp_Object); -LISP_INLINE bool (INTEGERP) (Lisp_Object); -LISP_INLINE bool (MARKERP) (Lisp_Object); -LISP_INLINE bool (MISCP) (Lisp_Object); -LISP_INLINE bool (NILP) (Lisp_Object); -LISP_INLINE bool OVERLAYP (Lisp_Object); -LISP_INLINE bool PROCESSP (Lisp_Object); -LISP_INLINE bool PSEUDOVECTORP (Lisp_Object, int); -LISP_INLINE bool SAVE_VALUEP (Lisp_Object); -LISP_INLINE void set_sub_char_table_contents (Lisp_Object, ptrdiff_t, +INLINE bool BOOL_VECTOR_P (Lisp_Object); +INLINE bool BUFFER_OBJFWDP (union Lisp_Fwd *); +INLINE bool BUFFERP (Lisp_Object); +INLINE bool CHAR_TABLE_P (Lisp_Object); +INLINE Lisp_Object CHAR_TABLE_REF_ASCII (Lisp_Object, ptrdiff_t); +INLINE bool (CONSP) (Lisp_Object); +INLINE bool (FLOATP) (Lisp_Object); +INLINE bool functionp (Lisp_Object); +INLINE bool (INTEGERP) (Lisp_Object); +INLINE bool (MARKERP) (Lisp_Object); +INLINE bool (MISCP) (Lisp_Object); +INLINE bool (NILP) (Lisp_Object); +INLINE bool OVERLAYP (Lisp_Object); +INLINE bool PROCESSP (Lisp_Object); +INLINE bool PSEUDOVECTORP (Lisp_Object, int); +INLINE bool SAVE_VALUEP (Lisp_Object); +INLINE void set_sub_char_table_contents (Lisp_Object, ptrdiff_t, Lisp_Object); -LISP_INLINE bool STRINGP (Lisp_Object); -LISP_INLINE bool SUB_CHAR_TABLE_P (Lisp_Object); -LISP_INLINE bool SUBRP (Lisp_Object); -LISP_INLINE bool (SYMBOLP) (Lisp_Object); -LISP_INLINE bool (VECTORLIKEP) (Lisp_Object); -LISP_INLINE bool WINDOWP (Lisp_Object); -LISP_INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object); +INLINE bool STRINGP (Lisp_Object); +INLINE bool SUB_CHAR_TABLE_P (Lisp_Object); +INLINE bool SUBRP (Lisp_Object); +INLINE bool (SYMBOLP) (Lisp_Object); +INLINE bool (VECTORLIKEP) (Lisp_Object); +INLINE bool WINDOWP (Lisp_Object); +INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object); /* Defined in chartab.c. */ extern Lisp_Object char_table_ref (Lisp_Object, int); @@ -761,14 +758,14 @@ extern Lisp_Object Qimage; LISP_MACRO_DEFUN (XCONS, struct Lisp_Cons *, (Lisp_Object a), (a)) -LISP_INLINE struct Lisp_Vector * +INLINE struct Lisp_Vector * XVECTOR (Lisp_Object a) { eassert (VECTORLIKEP (a)); return XUNTAG (a, Lisp_Vectorlike); } -LISP_INLINE struct Lisp_String * +INLINE struct Lisp_String * XSTRING (Lisp_Object a) { eassert (STRINGP (a)); @@ -777,7 +774,7 @@ XSTRING (Lisp_Object a) LISP_MACRO_DEFUN (XSYMBOL, struct Lisp_Symbol *, (Lisp_Object a), (a)) -LISP_INLINE struct Lisp_Float * +INLINE struct Lisp_Float * XFLOAT (Lisp_Object a) { eassert (FLOATP (a)); @@ -786,55 +783,55 @@ XFLOAT (Lisp_Object a) /* Pseudovector types. */ -LISP_INLINE struct Lisp_Process * +INLINE struct Lisp_Process * XPROCESS (Lisp_Object a) { eassert (PROCESSP (a)); return XUNTAG (a, Lisp_Vectorlike); } -LISP_INLINE struct window * +INLINE struct window * XWINDOW (Lisp_Object a) { eassert (WINDOWP (a)); return XUNTAG (a, Lisp_Vectorlike); } -LISP_INLINE struct terminal * +INLINE struct terminal * XTERMINAL (Lisp_Object a) { return XUNTAG (a, Lisp_Vectorlike); } -LISP_INLINE struct Lisp_Subr * +INLINE struct Lisp_Subr * XSUBR (Lisp_Object a) { eassert (SUBRP (a)); return XUNTAG (a, Lisp_Vectorlike); } -LISP_INLINE struct buffer * +INLINE struct buffer * XBUFFER (Lisp_Object a) { eassert (BUFFERP (a)); return XUNTAG (a, Lisp_Vectorlike); } -LISP_INLINE struct Lisp_Char_Table * +INLINE struct Lisp_Char_Table * XCHAR_TABLE (Lisp_Object a) { eassert (CHAR_TABLE_P (a)); return XUNTAG (a, Lisp_Vectorlike); } -LISP_INLINE struct Lisp_Sub_Char_Table * +INLINE struct Lisp_Sub_Char_Table * XSUB_CHAR_TABLE (Lisp_Object a) { eassert (SUB_CHAR_TABLE_P (a)); return XUNTAG (a, Lisp_Vectorlike); } -LISP_INLINE struct Lisp_Bool_Vector * +INLINE struct Lisp_Bool_Vector * XBOOL_VECTOR (Lisp_Object a) { eassert (BOOL_VECTOR_P (a)); @@ -843,7 +840,7 @@ XBOOL_VECTOR (Lisp_Object a) /* Construct a Lisp_Object from a value or address. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object make_lisp_ptr (void *ptr, enum Lisp_Type type) { EMACS_UINT utype = type; @@ -853,7 +850,7 @@ make_lisp_ptr (void *ptr, enum Lisp_Type type) return a; } -LISP_INLINE Lisp_Object +INLINE Lisp_Object make_lisp_proc (struct Lisp_Process *p) { return make_lisp_ptr (p, Lisp_Vectorlike); @@ -937,12 +934,12 @@ struct Lisp_Cons fields are not accessible. (What if we want to switch to a copying collector someday? Cached cons cell field addresses may be invalidated at arbitrary points.) */ -LISP_INLINE Lisp_Object * +INLINE Lisp_Object * xcar_addr (Lisp_Object c) { return &XCONS (c)->car; } -LISP_INLINE Lisp_Object * +INLINE Lisp_Object * xcdr_addr (Lisp_Object c) { return &XCONS (c)->u.cdr; @@ -956,26 +953,26 @@ LISP_MACRO_DEFUN (XCDR, Lisp_Object, (Lisp_Object c), (c)) Note that both arguments may refer to the same object, so 'n' should not be read after 'c' is first modified. */ -LISP_INLINE void +INLINE void XSETCAR (Lisp_Object c, Lisp_Object n) { *xcar_addr (c) = n; } -LISP_INLINE void +INLINE void XSETCDR (Lisp_Object c, Lisp_Object n) { *xcdr_addr (c) = n; } /* Take the car or cdr of something whose type is not known. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object CAR (Lisp_Object c) { return (CONSP (c) ? XCAR (c) : NILP (c) ? Qnil : wrong_type_argument (Qlistp, c)); } -LISP_INLINE Lisp_Object +INLINE Lisp_Object CDR (Lisp_Object c) { return (CONSP (c) ? XCDR (c) @@ -984,12 +981,12 @@ CDR (Lisp_Object c) } /* Take the car or cdr of something whose type is not known. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object CAR_SAFE (Lisp_Object c) { return CONSP (c) ? XCAR (c) : Qnil; } -LISP_INLINE Lisp_Object +INLINE Lisp_Object CDR_SAFE (Lisp_Object c) { return CONSP (c) ? XCDR (c) : Qnil; @@ -1006,7 +1003,7 @@ struct Lisp_String }; /* True if STR is a multibyte string. */ -LISP_INLINE bool +INLINE bool STRING_MULTIBYTE (Lisp_Object str) { return 0 <= XSTRING (str)->size_byte; @@ -1043,28 +1040,28 @@ STRING_MULTIBYTE (Lisp_Object str) /* Convenience functions for dealing with Lisp strings. */ -LISP_INLINE unsigned char * +INLINE unsigned char * SDATA (Lisp_Object string) { return XSTRING (string)->data; } -LISP_INLINE char * +INLINE char * SSDATA (Lisp_Object string) { /* Avoid "differ in sign" warnings. */ return (char *) SDATA (string); } -LISP_INLINE unsigned char +INLINE unsigned char SREF (Lisp_Object string, ptrdiff_t index) { return SDATA (string)[index]; } -LISP_INLINE void +INLINE void SSET (Lisp_Object string, ptrdiff_t index, unsigned char new) { SDATA (string)[index] = new; } -LISP_INLINE ptrdiff_t +INLINE ptrdiff_t SCHARS (Lisp_Object string) { return XSTRING (string)->size; @@ -1073,7 +1070,7 @@ SCHARS (Lisp_Object string) #ifdef GC_CHECK_STRING_BYTES extern ptrdiff_t string_bytes (struct Lisp_String *); #endif -LISP_INLINE ptrdiff_t +INLINE ptrdiff_t STRING_BYTES (struct Lisp_String *s) { #ifdef GC_CHECK_STRING_BYTES @@ -1083,17 +1080,17 @@ STRING_BYTES (struct Lisp_String *s) #endif } -LISP_INLINE ptrdiff_t +INLINE ptrdiff_t SBYTES (Lisp_Object string) { return STRING_BYTES (XSTRING (string)); } -LISP_INLINE void +INLINE void STRING_SET_CHARS (Lisp_Object string, ptrdiff_t newsize) { XSTRING (string)->size = newsize; } -LISP_INLINE void +INLINE void STRING_COPYIN (Lisp_Object string, ptrdiff_t index, char const *new, ptrdiff_t count) { @@ -1164,32 +1161,32 @@ enum /* Conveniences for dealing with Lisp arrays. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object AREF (Lisp_Object array, ptrdiff_t idx) { return XVECTOR (array)->contents[idx]; } -LISP_INLINE Lisp_Object * +INLINE Lisp_Object * aref_addr (Lisp_Object array, ptrdiff_t idx) { return & XVECTOR (array)->contents[idx]; } -LISP_INLINE ptrdiff_t +INLINE ptrdiff_t ASIZE (Lisp_Object array) { return XVECTOR (array)->header.size; } -LISP_INLINE void +INLINE void ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Object val) { eassert (0 <= idx && idx < ASIZE (array)); XVECTOR (array)->contents[idx] = val; } -LISP_INLINE void +INLINE void gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object val) { /* Like ASET, but also can be used in the garbage collector: @@ -1296,7 +1293,7 @@ struct Lisp_Sub_Char_Table Lisp_Object contents[FLEXIBLE_ARRAY_MEMBER]; }; -LISP_INLINE Lisp_Object +INLINE Lisp_Object CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t idx) { struct Lisp_Char_Table *tbl = NULL; @@ -1316,7 +1313,7 @@ CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t idx) /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII characters. Do not check validity of CT. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object CHAR_TABLE_REF (Lisp_Object ct, int idx) { return (ASCII_CHAR_P (idx) @@ -1326,7 +1323,7 @@ CHAR_TABLE_REF (Lisp_Object ct, int idx) /* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and 8-bit European characters. Do not check validity of CT. */ -LISP_INLINE void +INLINE void CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Object val) { if (ASCII_CHAR_P (idx) && SUB_CHAR_TABLE_P (XCHAR_TABLE (ct)->ascii)) @@ -1371,7 +1368,7 @@ enum CHAR_TABLE_STANDARD_SLOTS /* Return the number of "extra" slots in the char table CT. */ -LISP_INLINE int +INLINE int CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct) { return ((ct->header.size & PSEUDOVECTOR_SIZE_MASK) @@ -1450,19 +1447,19 @@ struct Lisp_Symbol LISP_MACRO_DEFUN (SYMBOL_VAL, Lisp_Object, (struct Lisp_Symbol *sym), (sym)) -LISP_INLINE struct Lisp_Symbol * +INLINE struct Lisp_Symbol * SYMBOL_ALIAS (struct Lisp_Symbol *sym) { eassert (sym->redirect == SYMBOL_VARALIAS); return sym->val.alias; } -LISP_INLINE struct Lisp_Buffer_Local_Value * +INLINE struct Lisp_Buffer_Local_Value * SYMBOL_BLV (struct Lisp_Symbol *sym) { eassert (sym->redirect == SYMBOL_LOCALIZED); return sym->val.blv; } -LISP_INLINE union Lisp_Fwd * +INLINE union Lisp_Fwd * SYMBOL_FWD (struct Lisp_Symbol *sym) { eassert (sym->redirect == SYMBOL_FORWARDED); @@ -1472,26 +1469,26 @@ SYMBOL_FWD (struct Lisp_Symbol *sym) LISP_MACRO_DEFUN_VOID (SET_SYMBOL_VAL, (struct Lisp_Symbol *sym, Lisp_Object v), (sym, v)) -LISP_INLINE void +INLINE void SET_SYMBOL_ALIAS (struct Lisp_Symbol *sym, struct Lisp_Symbol *v) { eassert (sym->redirect == SYMBOL_VARALIAS); sym->val.alias = v; } -LISP_INLINE void +INLINE void SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Lisp_Buffer_Local_Value *v) { eassert (sym->redirect == SYMBOL_LOCALIZED); sym->val.blv = v; } -LISP_INLINE void +INLINE void SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lisp_Fwd *v) { eassert (sym->redirect == SYMBOL_FORWARDED); sym->val.fwd = v; } -LISP_INLINE Lisp_Object +INLINE Lisp_Object SYMBOL_NAME (Lisp_Object sym) { return XSYMBOL (sym)->name; @@ -1499,7 +1496,7 @@ SYMBOL_NAME (Lisp_Object sym) /* Value is true if SYM is an interned symbol. */ -LISP_INLINE bool +INLINE bool SYMBOL_INTERNED_P (Lisp_Object sym) { return XSYMBOL (sym)->interned != SYMBOL_UNINTERNED; @@ -1507,7 +1504,7 @@ SYMBOL_INTERNED_P (Lisp_Object sym) /* Value is true if SYM is interned in initial_obarray. */ -LISP_INLINE bool +INLINE bool SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object sym) { return XSYMBOL (sym)->interned == SYMBOL_INTERNED_IN_INITIAL_OBARRAY; @@ -1603,7 +1600,7 @@ struct Lisp_Hash_Table }; -LISP_INLINE struct Lisp_Hash_Table * +INLINE struct Lisp_Hash_Table * XHASH_TABLE (Lisp_Object a) { return XUNTAG (a, Lisp_Vectorlike); @@ -1612,21 +1609,21 @@ XHASH_TABLE (Lisp_Object a) #define XSET_HASH_TABLE(VAR, PTR) \ (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE)) -LISP_INLINE bool +INLINE bool HASH_TABLE_P (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_HASH_TABLE); } /* Value is the key part of entry IDX in hash table H. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object HASH_KEY (struct Lisp_Hash_Table *h, ptrdiff_t idx) { return AREF (h->key_and_value, 2 * idx); } /* Value is the value part of entry IDX in hash table H. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t idx) { return AREF (h->key_and_value, 2 * idx + 1); @@ -1634,14 +1631,14 @@ HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t idx) /* Value is the index of the next entry following the one at IDX in hash table H. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object HASH_NEXT (struct Lisp_Hash_Table *h, ptrdiff_t idx) { return AREF (h->next, idx); } /* Value is the hash code computed for entry IDX in hash table H. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t idx) { return AREF (h->hash, idx); @@ -1649,14 +1646,14 @@ HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t idx) /* Value is the index of the element in hash table H that is the start of the collision list at index IDX in the index vector of H. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object HASH_INDEX (struct Lisp_Hash_Table *h, ptrdiff_t idx) { return AREF (h->index, idx); } /* Value is the size of hash table H. */ -LISP_INLINE ptrdiff_t +INLINE ptrdiff_t HASH_TABLE_SIZE (struct Lisp_Hash_Table *h) { return ASIZE (h->next); @@ -1679,7 +1676,7 @@ static double const DEFAULT_REHASH_SIZE = 1.5; /* Combine two integers X and Y for hashing. The result might not fit into a Lisp integer. */ -LISP_INLINE EMACS_UINT +INLINE EMACS_UINT sxhash_combine (EMACS_UINT x, EMACS_UINT y) { return (x << 4) + (x >> (BITS_PER_EMACS_INT - 4)) + y; @@ -1687,7 +1684,7 @@ sxhash_combine (EMACS_UINT x, EMACS_UINT y) /* Hash X, returning a value that fits into a fixnum. */ -LISP_INLINE EMACS_UINT +INLINE EMACS_UINT SXHASH_REDUCE (EMACS_UINT x) { return (x ^ x >> (BITS_PER_EMACS_INT - FIXNUM_BITS)) & INTMASK; @@ -1857,7 +1854,7 @@ struct Lisp_Save_Value }; /* Return the type of V's Nth saved value. */ -LISP_INLINE int +INLINE int save_type (struct Lisp_Save_Value *v, int n) { eassert (0 <= n && n < SAVE_VALUE_SLOTS); @@ -1866,19 +1863,19 @@ save_type (struct Lisp_Save_Value *v, int n) /* Get and set the Nth saved pointer. */ -LISP_INLINE void * +INLINE void * XSAVE_POINTER (Lisp_Object obj, int n) { eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_POINTER); return XSAVE_VALUE (obj)->data[n].pointer; } -LISP_INLINE void +INLINE void set_save_pointer (Lisp_Object obj, int n, void *val) { eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_POINTER); XSAVE_VALUE (obj)->data[n].pointer = val; } -LISP_INLINE voidfuncptr +INLINE voidfuncptr XSAVE_FUNCPOINTER (Lisp_Object obj, int n) { eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_FUNCPOINTER); @@ -1887,13 +1884,13 @@ XSAVE_FUNCPOINTER (Lisp_Object obj, int n) /* Likewise for the saved integer. */ -LISP_INLINE ptrdiff_t +INLINE ptrdiff_t XSAVE_INTEGER (Lisp_Object obj, int n) { eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_INTEGER); return XSAVE_VALUE (obj)->data[n].integer; } -LISP_INLINE void +INLINE void set_save_integer (Lisp_Object obj, int n, ptrdiff_t val) { eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_INTEGER); @@ -1902,7 +1899,7 @@ set_save_integer (Lisp_Object obj, int n, ptrdiff_t val) /* Extract Nth saved object. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object XSAVE_OBJECT (Lisp_Object obj, int n) { eassert (save_type (XSAVE_VALUE (obj), n) == SAVE_OBJECT); @@ -1930,40 +1927,40 @@ union Lisp_Misc struct Lisp_Save_Value u_save_value; }; -LISP_INLINE union Lisp_Misc * +INLINE union Lisp_Misc * XMISC (Lisp_Object a) { return XUNTAG (a, Lisp_Misc); } -LISP_INLINE struct Lisp_Misc_Any * +INLINE struct Lisp_Misc_Any * XMISCANY (Lisp_Object a) { eassert (MISCP (a)); return & XMISC (a)->u_any; } -LISP_INLINE enum Lisp_Misc_Type +INLINE enum Lisp_Misc_Type XMISCTYPE (Lisp_Object a) { return XMISCANY (a)->type; } -LISP_INLINE struct Lisp_Marker * +INLINE struct Lisp_Marker * XMARKER (Lisp_Object a) { eassert (MARKERP (a)); return & XMISC (a)->u_marker; } -LISP_INLINE struct Lisp_Overlay * +INLINE struct Lisp_Overlay * XOVERLAY (Lisp_Object a) { eassert (OVERLAYP (a)); return & XMISC (a)->u_overlay; } -LISP_INLINE struct Lisp_Save_Value * +INLINE struct Lisp_Save_Value * XSAVE_VALUE (Lisp_Object a) { eassert (SAVE_VALUEP (a)); @@ -2077,13 +2074,13 @@ union Lisp_Fwd struct Lisp_Kboard_Objfwd u_kboard_objfwd; }; -LISP_INLINE enum Lisp_Fwd_Type +INLINE enum Lisp_Fwd_Type XFWDTYPE (union Lisp_Fwd *a) { return a->u_intfwd.type; } -LISP_INLINE struct Lisp_Buffer_Objfwd * +INLINE struct Lisp_Buffer_Objfwd * XBUFFER_OBJFWD (union Lisp_Fwd *a) { eassert (BUFFER_OBJFWDP (a)); @@ -2100,7 +2097,7 @@ struct Lisp_Float } u; }; -LISP_INLINE double +INLINE double XFLOAT_DATA (Lisp_Object f) { return XFLOAT (f)->u.data; @@ -2164,18 +2161,18 @@ enum char_bits LISP_MACRO_DEFUN (NILP, bool, (Lisp_Object x), (x)) -LISP_INLINE bool +INLINE bool NUMBERP (Lisp_Object x) { return INTEGERP (x) || FLOATP (x); } -LISP_INLINE bool +INLINE bool NATNUMP (Lisp_Object x) { return INTEGERP (x) && 0 <= XINT (x); } -LISP_INLINE bool +INLINE bool RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intmax_t hi) { return INTEGERP (x) && lo <= XINT (x) && XINT (x) <= hi; @@ -2194,40 +2191,40 @@ LISP_MACRO_DEFUN (INTEGERP, bool, (Lisp_Object x), (x)) LISP_MACRO_DEFUN (VECTORLIKEP, bool, (Lisp_Object x), (x)) LISP_MACRO_DEFUN (MARKERP, bool, (Lisp_Object x), (x)) -LISP_INLINE bool +INLINE bool STRINGP (Lisp_Object x) { return XTYPE (x) == Lisp_String; } -LISP_INLINE bool +INLINE bool VECTORP (Lisp_Object x) { return VECTORLIKEP (x) && ! (ASIZE (x) & PSEUDOVECTOR_FLAG); } -LISP_INLINE bool +INLINE bool OVERLAYP (Lisp_Object x) { return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay; } -LISP_INLINE bool +INLINE bool SAVE_VALUEP (Lisp_Object x) { return MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Save_Value; } -LISP_INLINE bool +INLINE bool AUTOLOADP (Lisp_Object x) { return CONSP (x) && EQ (Qautoload, XCAR (x)); } -LISP_INLINE bool +INLINE bool BUFFER_OBJFWDP (union Lisp_Fwd *a) { return XFWDTYPE (a) == Lisp_Fwd_Buffer_Obj; } -LISP_INLINE bool +INLINE bool PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, int code) { return ((a->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK)) @@ -2235,7 +2232,7 @@ PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, int code) } /* True if A is a pseudovector whose code is CODE. */ -LISP_INLINE bool +INLINE bool PSEUDOVECTORP (Lisp_Object a, int code) { if (! VECTORLIKEP (a)) @@ -2251,87 +2248,87 @@ PSEUDOVECTORP (Lisp_Object a, int code) /* Test for specific pseudovector types. */ -LISP_INLINE bool +INLINE bool WINDOW_CONFIGURATIONP (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_WINDOW_CONFIGURATION); } -LISP_INLINE bool +INLINE bool PROCESSP (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_PROCESS); } -LISP_INLINE bool +INLINE bool WINDOWP (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_WINDOW); } -LISP_INLINE bool +INLINE bool TERMINALP (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_TERMINAL); } -LISP_INLINE bool +INLINE bool SUBRP (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_SUBR); } -LISP_INLINE bool +INLINE bool COMPILEDP (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_COMPILED); } -LISP_INLINE bool +INLINE bool BUFFERP (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_BUFFER); } -LISP_INLINE bool +INLINE bool CHAR_TABLE_P (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_CHAR_TABLE); } -LISP_INLINE bool +INLINE bool SUB_CHAR_TABLE_P (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_SUB_CHAR_TABLE); } -LISP_INLINE bool +INLINE bool BOOL_VECTOR_P (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_BOOL_VECTOR); } -LISP_INLINE bool +INLINE bool FRAMEP (Lisp_Object a) { return PSEUDOVECTORP (a, PVEC_FRAME); } /* Test for image (image . spec) */ -LISP_INLINE bool +INLINE bool IMAGEP (Lisp_Object x) { return CONSP (x) && EQ (XCAR (x), Qimage); } /* Array types. */ -LISP_INLINE bool +INLINE bool ARRAYP (Lisp_Object x) { return VECTORP (x) || STRINGP (x) || CHAR_TABLE_P (x) || BOOL_VECTOR_P (x); } -LISP_INLINE void +INLINE void CHECK_LIST (Lisp_Object x) { CHECK_TYPE (CONSP (x) || NILP (x), Qlistp, x); @@ -2341,52 +2338,52 @@ LISP_MACRO_DEFUN_VOID (CHECK_LIST_CONS, (Lisp_Object x, Lisp_Object y), (x, y)) LISP_MACRO_DEFUN_VOID (CHECK_SYMBOL, (Lisp_Object x), (x)) LISP_MACRO_DEFUN_VOID (CHECK_NUMBER, (Lisp_Object x), (x)) -LISP_INLINE void +INLINE void CHECK_STRING (Lisp_Object x) { CHECK_TYPE (STRINGP (x), Qstringp, x); } -LISP_INLINE void +INLINE void CHECK_STRING_CAR (Lisp_Object x) { CHECK_TYPE (STRINGP (XCAR (x)), Qstringp, XCAR (x)); } -LISP_INLINE void +INLINE void CHECK_CONS (Lisp_Object x) { CHECK_TYPE (CONSP (x), Qconsp, x); } -LISP_INLINE void +INLINE void CHECK_VECTOR (Lisp_Object x) { CHECK_TYPE (VECTORP (x), Qvectorp, x); } -LISP_INLINE void +INLINE void CHECK_VECTOR_OR_STRING (Lisp_Object x) { CHECK_TYPE (VECTORP (x) || STRINGP (x), Qarrayp, x); } -LISP_INLINE void +INLINE void CHECK_ARRAY (Lisp_Object x, Lisp_Object Qxxxp) { CHECK_TYPE (ARRAYP (x), Qxxxp, x); } -LISP_INLINE void +INLINE void CHECK_BUFFER (Lisp_Object x) { CHECK_TYPE (BUFFERP (x), Qbufferp, x); } -LISP_INLINE void +INLINE void CHECK_WINDOW (Lisp_Object x) { CHECK_TYPE (WINDOWP (x), Qwindowp, x); } -LISP_INLINE void +INLINE void CHECK_PROCESS (Lisp_Object x) { CHECK_TYPE (PROCESSP (x), Qprocessp, x); } -LISP_INLINE void +INLINE void CHECK_NATNUM (Lisp_Object x) { CHECK_TYPE (NATNUMP (x), Qwholenump, x); @@ -2415,13 +2412,13 @@ CHECK_NATNUM (Lisp_Object x) do { if (MARKERP ((x))) XSETFASTINT (x, marker_position (x)); \ else CHECK_TYPE (INTEGERP (x), Qinteger_or_marker_p, x); } while (0) -LISP_INLINE double +INLINE double XFLOATINT (Lisp_Object n) { return extract_float (n); } -LISP_INLINE void +INLINE void CHECK_NUMBER_OR_FLOAT (Lisp_Object x) { CHECK_TYPE (FLOATP (x) || INTEGERP (x), Qnumberp, x); @@ -2433,7 +2430,7 @@ CHECK_NUMBER_OR_FLOAT (Lisp_Object x) /* Since we can't assign directly to the CAR or CDR fields of a cons cell, use these when checking that those fields contain numbers. */ -LISP_INLINE void +INLINE void CHECK_NUMBER_CAR (Lisp_Object x) { Lisp_Object tmp = XCAR (x); @@ -2441,7 +2438,7 @@ CHECK_NUMBER_CAR (Lisp_Object x) XSETCAR (x, tmp); } -LISP_INLINE void +INLINE void CHECK_NUMBER_CDR (Lisp_Object x) { Lisp_Object tmp = XCDR (x); @@ -2519,7 +2516,7 @@ CHECK_NUMBER_CDR (Lisp_Object x) Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object) /* True if OBJ is a Lisp function. */ -LISP_INLINE bool +INLINE bool FUNCTIONP (Lisp_Object obj) { return functionp (obj); @@ -2686,7 +2683,7 @@ extern union specbinding *specpdl; extern union specbinding *specpdl_ptr; extern ptrdiff_t specpdl_size; -LISP_INLINE ptrdiff_t +INLINE ptrdiff_t SPECPDL_INDEX (void) { return specpdl_ptr - specpdl; @@ -3014,7 +3011,7 @@ struct frame; /* Copy COUNT Lisp_Objects from ARGS to contents of V starting from OFFSET. */ -LISP_INLINE void +INLINE void vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Object *args, ptrdiff_t count) { eassert (0 <= offset && 0 <= count && offset + count <= ASIZE (v)); @@ -3023,13 +3020,13 @@ vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Object *args, ptrdiff_t count) /* Functions to modify hash tables. */ -LISP_INLINE void +INLINE void set_hash_key_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val) { gc_aset (h->key_and_value, 2 * idx, val); } -LISP_INLINE void +INLINE void set_hash_value_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val) { gc_aset (h->key_and_value, 2 * idx + 1, val); @@ -3038,19 +3035,19 @@ set_hash_value_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val) /* Use these functions to set Lisp_Object or pointer slots of struct Lisp_Symbol. */ -LISP_INLINE void +INLINE void set_symbol_function (Lisp_Object sym, Lisp_Object function) { XSYMBOL (sym)->function = function; } -LISP_INLINE void +INLINE void set_symbol_plist (Lisp_Object sym, Lisp_Object plist) { XSYMBOL (sym)->plist = plist; } -LISP_INLINE void +INLINE void set_symbol_next (Lisp_Object sym, struct Lisp_Symbol *next) { XSYMBOL (sym)->next = next; @@ -3058,7 +3055,7 @@ set_symbol_next (Lisp_Object sym, struct Lisp_Symbol *next) /* Buffer-local (also frame-local) variable access functions. */ -LISP_INLINE int +INLINE int blv_found (struct Lisp_Buffer_Local_Value *blv) { eassert (blv->found == !EQ (blv->defcell, blv->valcell)); @@ -3067,7 +3064,7 @@ blv_found (struct Lisp_Buffer_Local_Value *blv) /* Set overlay's property list. */ -LISP_INLINE void +INLINE void set_overlay_plist (Lisp_Object overlay, Lisp_Object plist) { XOVERLAY (overlay)->plist = plist; @@ -3075,7 +3072,7 @@ set_overlay_plist (Lisp_Object overlay, Lisp_Object plist) /* Get text properties of S. */ -LISP_INLINE INTERVAL +INLINE INTERVAL string_intervals (Lisp_Object s) { return XSTRING (s)->intervals; @@ -3083,7 +3080,7 @@ string_intervals (Lisp_Object s) /* Set text properties of S to I. */ -LISP_INLINE void +INLINE void set_string_intervals (Lisp_Object s, INTERVAL i) { XSTRING (s)->intervals = i; @@ -3092,12 +3089,12 @@ set_string_intervals (Lisp_Object s, INTERVAL i) /* Set a Lisp slot in TABLE to VAL. Most code should use this instead of setting slots directly. */ -LISP_INLINE void +INLINE void set_char_table_defalt (Lisp_Object table, Lisp_Object val) { XCHAR_TABLE (table)->defalt = val; } -LISP_INLINE void +INLINE void set_char_table_purpose (Lisp_Object table, Lisp_Object val) { XCHAR_TABLE (table)->purpose = val; @@ -3105,21 +3102,21 @@ set_char_table_purpose (Lisp_Object table, Lisp_Object val) /* Set different slots in (sub)character tables. */ -LISP_INLINE void +INLINE void set_char_table_extras (Lisp_Object table, ptrdiff_t idx, Lisp_Object val) { eassert (0 <= idx && idx < CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (table))); XCHAR_TABLE (table)->extras[idx] = val; } -LISP_INLINE void +INLINE void set_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val) { eassert (0 <= idx && idx < (1 << CHARTAB_SIZE_BITS_0)); XCHAR_TABLE (table)->contents[idx] = val; } -LISP_INLINE void +INLINE void set_sub_char_table_contents (Lisp_Object table, ptrdiff_t idx, Lisp_Object val) { XSUB_CHAR_TABLE (table)->contents[idx] = val; @@ -3436,19 +3433,19 @@ extern Lisp_Object listn (enum constype, ptrdiff_t, Lisp_Object, ...); /* Build a frequently used 2/3/4-integer lists. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object list2i (EMACS_INT x, EMACS_INT y) { return list2 (make_number (x), make_number (y)); } -LISP_INLINE Lisp_Object +INLINE Lisp_Object list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w) { return list3 (make_number (x), make_number (y), make_number (w)); } -LISP_INLINE Lisp_Object +INLINE Lisp_Object list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMACS_INT h) { return list4 (make_number (x), make_number (y), @@ -3463,7 +3460,7 @@ extern Lisp_Object make_unibyte_string (const char *, ptrdiff_t); /* Make unibyte string from C string when the length isn't known. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object build_unibyte_string (const char *str) { return make_unibyte_string (str, strlen (str)); @@ -3481,7 +3478,7 @@ extern Lisp_Object make_pure_c_string (const char *, ptrdiff_t); /* Make a string allocated in pure space, use STR as string data. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object build_pure_c_string (const char *str) { return make_pure_c_string (str, strlen (str)); @@ -3490,7 +3487,7 @@ build_pure_c_string (const char *str) /* Make a string from the data at STR, treating it as multibyte if the data warrants. */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object build_string (const char *str) { return make_string (str, strlen (str)); @@ -3511,7 +3508,7 @@ extern struct Lisp_Vector *allocate_vector (EMACS_INT); ASET (v, 1, Ffunction_can_gc ()); ASET (v, 2, obj1); */ -LISP_INLINE Lisp_Object +INLINE Lisp_Object make_uninit_vector (ptrdiff_t size) { Lisp_Object v; @@ -3558,7 +3555,7 @@ extern int valid_lisp_object_p (Lisp_Object); #ifdef GC_CHECK_CONS_LIST extern void check_cons_list (void); #else -LISP_INLINE void (check_cons_list) (void) { lisp_h_check_cons_list (); } +INLINE void (check_cons_list) (void) { lisp_h_check_cons_list (); } #endif #ifdef REL_ALLOC @@ -3626,7 +3623,7 @@ extern Lisp_Object check_obarray (Lisp_Object); extern Lisp_Object intern_1 (const char *, ptrdiff_t); extern Lisp_Object intern_c_string_1 (const char *, ptrdiff_t); extern Lisp_Object oblookup (Lisp_Object, const char *, ptrdiff_t, ptrdiff_t); -LISP_INLINE void +INLINE void LOADHIST_ATTACH (Lisp_Object x) { if (initialized) @@ -3642,13 +3639,13 @@ extern void init_obarray (void); extern void init_lread (void); extern void syms_of_lread (void); -LISP_INLINE Lisp_Object +INLINE Lisp_Object intern (const char *str) { return intern_1 (str, strlen (str)); } -LISP_INLINE Lisp_Object +INLINE Lisp_Object intern_c_string (const char *str) { return intern_c_string_1 (str, strlen (str)); @@ -3927,9 +3924,9 @@ void fixup_locale (void); void synchronize_system_messages_locale (void); void synchronize_system_time_locale (void); #else -LISP_INLINE void fixup_locale (void) {} -LISP_INLINE void synchronize_system_messages_locale (void) {} -LISP_INLINE void synchronize_system_time_locale (void) {} +INLINE void fixup_locale (void) {} +INLINE void synchronize_system_messages_locale (void) {} +INLINE void synchronize_system_time_locale (void) {} #endif extern void shut_down_emacs (int, Lisp_Object); @@ -4308,7 +4305,7 @@ extern void *record_xmalloc (size_t); /* Check whether it's time for GC, and run it if so. */ -LISP_INLINE void +INLINE void maybe_gc (void) { if ((consing_since_gc > gc_cons_threshold @@ -4318,7 +4315,7 @@ maybe_gc (void) Fgarbage_collect (); } -LISP_INLINE bool +INLINE bool functionp (Lisp_Object object) { if (SYMBOLP (object) && !NILP (Ffboundp (object))) diff --git a/src/process.c b/src/process.c index 20f84990d6f..0f53577331d 100644 --- a/src/process.c +++ b/src/process.c @@ -21,8 +21,6 @@ along with GNU Emacs. If not, see . */ #include -#define PROCESS_INLINE EXTERN_INLINE - #include #include #include /* Some typedefs are used in sys/file.h. */ diff --git a/src/process.h b/src/process.h index 6aff95686a2..a9b15f03da4 100644 --- a/src/process.h +++ b/src/process.h @@ -27,9 +27,6 @@ along with GNU Emacs. If not, see . */ #endif INLINE_HEADER_BEGIN -#ifndef PROCESS_INLINE -# define PROCESS_INLINE INLINE -#endif /* Bound on number of file descriptors opened on behalf of a process, that need to be closed. */ @@ -179,14 +176,14 @@ struct Lisp_Process /* Most code should use these functions to set Lisp fields in struct process. */ -PROCESS_INLINE void +INLINE void pset_childp (struct Lisp_Process *p, Lisp_Object val) { p->childp = val; } #ifdef HAVE_GNUTLS -PROCESS_INLINE void +INLINE void pset_gnutls_cred_type (struct Lisp_Process *p, Lisp_Object val) { p->gnutls_cred_type = val; diff --git a/src/syntax.c b/src/syntax.c index 31eb86faed8..3785bf45515 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -20,8 +20,6 @@ along with GNU Emacs. If not, see . */ #include -#define SYNTAX_INLINE EXTERN_INLINE - #include #include "lisp.h" diff --git a/src/syntax.h b/src/syntax.h index 1b96284af42..1350d87162b 100644 --- a/src/syntax.h +++ b/src/syntax.h @@ -19,9 +19,6 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ INLINE_HEADER_BEGIN -#ifndef SYNTAX_INLINE -# define SYNTAX_INLINE INLINE -#endif extern void update_syntax_table (ptrdiff_t, EMACS_INT, bool, Lisp_Object); @@ -89,7 +86,7 @@ extern struct gl_state_s gl_state; in syntax table TABLE, or from globally kept data (gl_state). Does inheritance. */ -SYNTAX_INLINE Lisp_Object +INLINE Lisp_Object SYNTAX_ENTRY (int c) { #ifdef SYNTAX_ENTRY_VIA_PROPERTY @@ -104,14 +101,14 @@ SYNTAX_ENTRY (int c) /* Extract the information from the entry for character C in the current syntax table. */ -SYNTAX_INLINE int +INLINE int SYNTAX_WITH_FLAGS (int c) { Lisp_Object ent = SYNTAX_ENTRY (c); return CONSP (ent) ? XINT (XCAR (ent)) : Swhitespace; } -SYNTAX_INLINE enum syntaxcode +INLINE enum syntaxcode SYNTAX (int c) { return SYNTAX_WITH_FLAGS (c) & 0xff; @@ -137,7 +134,7 @@ extern char const syntax_code_spec[16]; The value is meant for use in code that does nothing when parse_sexp_lookup_properties is 0, so return 0 in that case, for speed. */ -SYNTAX_INLINE ptrdiff_t +INLINE ptrdiff_t SYNTAX_TABLE_BYTE_TO_CHAR (ptrdiff_t bytepos) { return (! parse_sexp_lookup_properties @@ -157,7 +154,7 @@ SYNTAX_TABLE_BYTE_TO_CHAR (ptrdiff_t bytepos) /* Make syntax table state (gl_state) good for CHARPOS, assuming it is currently good for a position before CHARPOS. */ -SYNTAX_INLINE void +INLINE void UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos) { if (parse_sexp_lookup_properties && charpos >= gl_state.e_property) @@ -167,7 +164,7 @@ UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos) /* Make syntax table state (gl_state) good for CHARPOS, assuming it is currently good for a position after CHARPOS. */ -SYNTAX_INLINE void +INLINE void UPDATE_SYNTAX_TABLE_BACKWARD (ptrdiff_t charpos) { if (parse_sexp_lookup_properties && charpos < gl_state.b_property) @@ -176,7 +173,7 @@ UPDATE_SYNTAX_TABLE_BACKWARD (ptrdiff_t charpos) /* Make syntax table good for CHARPOS. */ -SYNTAX_INLINE void +INLINE void UPDATE_SYNTAX_TABLE (ptrdiff_t charpos) { UPDATE_SYNTAX_TABLE_BACKWARD (charpos); @@ -185,7 +182,7 @@ UPDATE_SYNTAX_TABLE (ptrdiff_t charpos) /* Set up the buffer-global syntax table. */ -SYNTAX_INLINE void +INLINE void SETUP_BUFFER_SYNTAX_TABLE (void) { gl_state.use_global = 0; diff --git a/src/sysdep.c b/src/sysdep.c index 6439697501e..84859813249 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -19,8 +19,6 @@ along with GNU Emacs. If not, see . */ #include -#define SYSTIME_INLINE EXTERN_INLINE - #include #include "sysstdio.h" #ifdef HAVE_PWD_H diff --git a/src/systime.h b/src/systime.h index b1c3d940b0e..a9bdf53b09f 100644 --- a/src/systime.h +++ b/src/systime.h @@ -22,9 +22,6 @@ along with GNU Emacs. If not, see . */ #include INLINE_HEADER_BEGIN -#ifndef SYSTIME_INLINE -# define SYSTIME_INLINE INLINE -#endif #ifdef emacs # ifdef HAVE_X_WINDOWS @@ -54,7 +51,7 @@ typedef unsigned long Time; should be an absolute time since the epoch and B a nonnegative offset. */ /* Return an invalid timespec. */ -SYSTIME_INLINE struct timespec +INLINE struct timespec invalid_timespec (void) { return make_timespec (0, -1); @@ -63,14 +60,14 @@ invalid_timespec (void) /* Return 1 if TIME is a valid timespec. This currently doesn't worry about whether tv_nsec is less than TIMESPEC_RESOLUTION; leap seconds might cause a problem if it did. */ -SYSTIME_INLINE int +INLINE int timespec_valid_p (struct timespec t) { return t.tv_nsec >= 0; } /* Return current system time. */ -SYSTIME_INLINE struct timespec +INLINE struct timespec current_timespec (void) { struct timespec r; diff --git a/src/termhooks.h b/src/termhooks.h index a050c3292c2..c2bc42724e2 100644 --- a/src/termhooks.h +++ b/src/termhooks.h @@ -26,9 +26,6 @@ along with GNU Emacs. If not, see . */ #include "systime.h" /* for Time */ INLINE_HEADER_BEGIN -#ifndef TERMHOOKS_INLINE -# define TERMHOOKS_INLINE INLINE -#endif enum scroll_bar_part { scroll_bar_nowhere = -1, @@ -608,12 +605,12 @@ struct terminal /* Most code should use these functions to set Lisp fields in struct terminal. */ -TERMHOOKS_INLINE void +INLINE void tset_charset_list (struct terminal *t, Lisp_Object val) { t->charset_list = val; } -TERMHOOKS_INLINE void +INLINE void tset_selection_alist (struct terminal *t, Lisp_Object val) { t->Vselection_alist = val; diff --git a/src/terminal.c b/src/terminal.c index 4b5532e3a44..61c5d050945 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -18,8 +18,6 @@ along with GNU Emacs. If not, see . */ #include -#define TERMHOOKS_INLINE EXTERN_INLINE - #include #include "lisp.h" diff --git a/src/window.c b/src/window.c index 677cb991025..7e2f52e12b1 100644 --- a/src/window.c +++ b/src/window.c @@ -20,8 +20,6 @@ along with GNU Emacs. If not, see . */ #include -#define WINDOW_INLINE EXTERN_INLINE - #include #include "lisp.h" diff --git a/src/window.h b/src/window.h index a419bf7e7f0..6d2478ecaf9 100644 --- a/src/window.h +++ b/src/window.h @@ -23,9 +23,6 @@ along with GNU Emacs. If not, see . */ #include "dispextern.h" INLINE_HEADER_BEGIN -#ifndef WINDOW_INLINE -# define WINDOW_INLINE INLINE -#endif /* Windows are allocated as if they were vectors, but then the Lisp data type is changed to Lisp_Window. They are garbage @@ -349,37 +346,37 @@ struct window /* Most code should use these functions to set Lisp fields in struct window. */ -WINDOW_INLINE void +INLINE void wset_frame (struct window *w, Lisp_Object val) { w->frame = val; } -WINDOW_INLINE void +INLINE void wset_next (struct window *w, Lisp_Object val) { w->next = val; } -WINDOW_INLINE void +INLINE void wset_prev (struct window *w, Lisp_Object val) { w->prev = val; } -WINDOW_INLINE void +INLINE void wset_redisplay_end_trigger (struct window *w, Lisp_Object val) { w->redisplay_end_trigger = val; } -WINDOW_INLINE void +INLINE void wset_vertical_scroll_bar (struct window *w, Lisp_Object val) { w->vertical_scroll_bar = val; } -WINDOW_INLINE void +INLINE void wset_prev_buffers (struct window *w, Lisp_Object val) { w->prev_buffers = val; } -WINDOW_INLINE void +INLINE void wset_next_buffers (struct window *w, Lisp_Object val) { w->next_buffers = val; @@ -966,7 +963,7 @@ extern void keys_of_window (void); window update, so the position is the future output cursor position for currently updated window W. */ -WINDOW_INLINE void +INLINE void output_cursor_to (struct window *w, int vpos, int hpos, int y, int x) { eassert (w); From 525540c0631481f7613bb936db7cc99793f522fd Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Sep 2013 09:33:46 -0700 Subject: [PATCH 273/321] * INSTALL: Update m17n details. --- INSTALL | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/INSTALL b/INSTALL index 02813ac871b..f5c9d8f44ec 100644 --- a/INSTALL +++ b/INSTALL @@ -117,19 +117,7 @@ packages. Note that if there is a separate `dev' or `devel' package, for use at compilation time rather than run time, you will need that as well as the corresponding run time package; typically the dev package will contain header files and a library archive. Otherwise, -you can download and build libraries from sources. - -The sources of these libraries are available by anonymous CVS from -cvs.m17n.org. - - % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n login - % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n co m17n-db - % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n co m17n-lib - % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n co libotf - -For m17n-lib, if you have problems with making the whole package -because you lack some other packages on which m17n-lib depends, try to -configure it with the option "--without-gui". +you can download the libraries from . Note that Emacs cannot support complex scripts on a TTY, unless the terminal includes such a support. From 1e835c22e8ec9e387b4275196103d4d6d0617899 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Sep 2013 13:21:28 -0400 Subject: [PATCH 274/321] * lisp/cedet/semantic.el (semantic-new-buffer-fcn-was-run, semantic-active-p): Move from here... * lisp/cedet/semantic/fw.el: ...to here. --- lisp/cedet/ChangeLog | 6 ++++++ lisp/cedet/semantic.el | 8 -------- lisp/cedet/semantic/fw.el | 9 +++++++++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 61d79b16cb0..ed3301510f0 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog @@ -1,3 +1,9 @@ +2013-09-20 Glenn Morris + + * semantic.el (semantic-new-buffer-fcn-was-run, semantic-active-p): + Move from here... + * semantic/fw.el: ...to here. + 2013-09-18 Glenn Morris * semantic/find.el (semantic-brute-find-first-tag-by-name): diff --git a/lisp/cedet/semantic.el b/lisp/cedet/semantic.el index 909902a71fe..2d62d848625 100644 --- a/lisp/cedet/semantic.el +++ b/lisp/cedet/semantic.el @@ -311,14 +311,6 @@ a parse of the buffer.") (semantic-varalias-obsolete 'semantic-init-db-hooks 'semantic-init-db-hook "23.2") -(defvar semantic-new-buffer-fcn-was-run nil - "Non-nil after `semantic-new-buffer-fcn' has been executed.") -(make-variable-buffer-local 'semantic-new-buffer-fcn-was-run) - -(defsubst semantic-active-p () - "Return non-nil if the current buffer was set up for parsing." - semantic-new-buffer-fcn-was-run) - (defsubst semantic-error-if-unparsed () "Raise an error if current buffer was not parsed by Semantic." (unless semantic-new-buffer-fcn-was-run diff --git a/lisp/cedet/semantic/fw.el b/lisp/cedet/semantic/fw.el index 7850e0462b2..825cdc9f0a4 100644 --- a/lisp/cedet/semantic/fw.el +++ b/lisp/cedet/semantic/fw.el @@ -321,6 +321,15 @@ Avoid using a large BODY since it is duplicated." ;;; Misc utilities ;; + +(defvar semantic-new-buffer-fcn-was-run nil + "Non-nil after `semantic-new-buffer-fcn' has been executed.") +(make-variable-buffer-local 'semantic-new-buffer-fcn-was-run) + +(defsubst semantic-active-p () + "Return non-nil if the current buffer was set up for parsing." + semantic-new-buffer-fcn-was-run) + (defsubst semantic-map-buffers (function) "Run FUNCTION for each Semantic enabled buffer found. FUNCTION does not have arguments. When FUNCTION is entered From 31dca772aded1c089b135d6335e4e444fd63078a Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 20 Sep 2013 15:59:42 -0400 Subject: [PATCH 275/321] * lisp/subr.el (internal--call-interactively): New const. (called-interactively-p): Use it. * test/automated/advice-tests.el (advice-test-called-interactively-p-around) (advice-test-called-interactively-p-filter-args) (advice-test-called-interactively-p-around): New tests. Fixes: debbugs:3984 --- lisp/ChangeLog | 5 +++++ lisp/subr.el | 8 +++++--- test/ChangeLog | 6 ++++++ test/automated/advice-tests.el | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f32363a16a0..75aea560203 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-20 Stefan Monnier + + * subr.el (internal--call-interactively): New const. + (called-interactively-p): Use it (bug#3984). + 2013-09-20 Xue Fuqiao * vc/pcvs.el (cvs-mode-ignore): diff --git a/lisp/subr.el b/lisp/subr.el index b903ef1ea96..43be9f529be 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -4246,6 +4246,8 @@ I is the index of the frame after FRAME2. It should return nil if those frames don't seem special and otherwise, it should return the number of frames to skip (minus 1).") +(defconst internal--call-interactively (symbol-function 'call-interactively)) + (defun called-interactively-p (&optional kind) "Return t if the containing function was called by `call-interactively'. If KIND is `interactive', then only return t if the call was made @@ -4318,9 +4320,9 @@ command is called from a keyboard macro?" (pcase (cons frame nextframe) ;; No subr calls `interactive-p', so we can rule that out. (`((,_ ,(pred (lambda (f) (subrp (indirect-function f)))) . ,_) . ,_) nil) - ;; Somehow, I sometimes got `command-execute' rather than - ;; `call-interactively' on my stacktrace !? - ;;(`(,_ . (t command-execute . ,_)) t) + ;; In case # without going through the + ;; `call-interactively' symbol (bug#3984). + (`(,_ . (t ,(pred (eq internal--call-interactively)) . ,_)) t) (`(,_ . (t call-interactively . ,_)) t))))) (defun interactive-p () diff --git a/test/ChangeLog b/test/ChangeLog index 000f8e257f1..14d819c7f77 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2013-09-20 Ryan (tiny change) + + * automated/advice-tests.el (advice-test-called-interactively-p-around) + (advice-test-called-interactively-p-filter-args) + (advice-test-called-interactively-p-around): New tests. + 2013-09-16 Glenn Morris * automated/eshell.el (eshell-match-result): diff --git a/test/automated/advice-tests.el b/test/automated/advice-tests.el index 424f447ae4b..bdb0eb09b40 100644 --- a/test/automated/advice-tests.el +++ b/test/automated/advice-tests.el @@ -130,6 +130,38 @@ (cons (cons 2 (called-interactively-p)) (apply f args)))) (should (equal (call-interactively 'sm-test7) '((2 . t) (1 . t) 11)))) +(ert-deftest advice-test-called-interactively-p-around () + "Check interaction between around advice and called-interactively-p. + +This tests the currently broken case of the innermost advice to a +function being an around advice." + :expected-result :failed + (defun sm-test7.2 () (interactive) (cons 1 (called-interactively-p))) + (advice-add 'sm-test7.2 :around + (lambda (f &rest args) + (list (cons 1 (called-interactively-p)) (apply f args)))) + (should (equal (sm-test7.2) '((1 . nil) (1 . nil)))) + (should (equal (call-interactively 'sm-test7.2) '((1 . t) (1 . t))))) + +(ert-deftest advice-test-called-interactively-p-filter-args () + "Check interaction between filter-args advice and called-interactively-p." + :expected-result :failed + (defun sm-test7.3 () (interactive) (cons 1 (called-interactively-p))) + (advice-add 'sm-test7.3 :filter-args #'list) + (should (equal (sm-test7.3) '(1 . nil))) + (should (equal (call-interactively 'sm-test7.3) '(1 . t)))) + +(ert-deftest advice-test-call-interactively () + "Check interaction between advice on call-interactively and called-interactively-p." + (defun sm-test7.4 () (interactive) (cons 1 (called-interactively-p))) + (let ((old (symbol-function 'call-interactively))) + (unwind-protect + (progn + (advice-add 'call-interactively :before #'ignore) + (should (equal (sm-test7.4) '(1 . nil))) + (should (equal (call-interactively 'sm-test7.4) '(1 . t)))) + (fset 'call-interactively old)))) + (ert-deftest advice-test-interactive () "Check handling of interactive spec." (defun sm-test8 (a) (interactive "p") a) From e3b29769a8b27bb0b727daa7445130ac256006d0 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 20 Sep 2013 13:23:20 -0700 Subject: [PATCH 276/321] Port recent change to hosts where pointers aren't 'long'. * xterm.c (x_send_scroll_bar_event, x_scroll_bar_to_input_event): Don't assume that pointers are the same width as 'long'. Add a compile-time check that a pointer fits into two X slots. --- src/ChangeLog | 5 +++++ src/xterm.c | 51 ++++++++++++++++----------------------------------- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 5cce3ad3056..7b59b33c8bd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2013-09-20 Paul Eggert + Port recent change to hosts where pointers aren't 'long'. + * xterm.c (x_send_scroll_bar_event, x_scroll_bar_to_input_event): + Don't assume that pointers are the same width as 'long'. + Add a compile-time check that a pointer fits into two X slots. + A simpler, centralized INLINE. * conf_post.h (INLINE): Define only if not already defined. This allows us to use a single INLINE, defined by one file diff --git a/src/xterm.c b/src/xterm.c index 2633bf18d56..1ccc1ae649b 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -3967,7 +3967,7 @@ XTmouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, /* From-window. */ root, - + /* To-window. */ FRAME_X_WINDOW (dpyinfo->last_mouse_frame), @@ -4250,6 +4250,10 @@ x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole) XClientMessageEvent *ev = &event.xclient; struct window *w = XWINDOW (window); struct frame *f = XFRAME (w->frame); + intptr_t iw = (intptr_t) w; + enum { BITS_PER_INTPTR = CHAR_BIT * sizeof iw }; + verify (BITS_PER_INTPTR <= 64); + int sign_shift = BITS_PER_INTPTR - 32; block_input (); @@ -4260,27 +4264,13 @@ x_send_scroll_bar_event (Lisp_Object window, int part, int portion, int whole) ev->window = FRAME_X_WINDOW (f); ev->format = 32; - /* 32-bit X client on a 64-bit X server can pass window pointer - as is. 64-bit client on a 32-bit X server is in trouble - because pointer does not fit and will be truncated while - passing through the server. So we should use two slots - and hope that X12 will resolve such an issues someday. */ - - if (BITS_PER_LONG > 32) - { - union { - int i[2]; - void *v; - } val; - val.v = w; - ev->data.l[0] = val.i[0]; - ev->data.l[1] = val.i[1]; - } - else - { - ev->data.l[0] = 0; - ev->data.l[1] = (long) w; - } + /* A 32-bit X client on a 64-bit X server can pass a window pointer + as-is. A 64-bit client on a 32-bit X server is in trouble + because a pointer does not fit and would be truncated while + passing through the server. So use two slots and hope that X12 + will resolve such issues someday. */ + ev->data.l[0] = iw >> 31 >> 1; + ev->data.l[1] = sign_shift <= 0 ? iw : iw << sign_shift >> sign_shift; ev->data.l[2] = part; ev->data.l[3] = portion; ev->data.l[4] = whole; @@ -4311,19 +4301,10 @@ x_scroll_bar_to_input_event (const XEvent *event, struct window *w; /* See the comment in the function above. */ - - if (BITS_PER_LONG > 32) - { - union { - int i[2]; - void *v; - } val; - val.i[0] = ev->data.l[0]; - val.i[1] = ev->data.l[1]; - w = val.v; - } - else - w = (void *) ev->data.l[1]; + intptr_t iw0 = ev->data.l[0]; + intptr_t iw1 = ev->data.l[1]; + intptr_t iw = (iw0 << 31 << 1) + (iw1 & 0xffffffffu); + w = (struct window *) iw; XSETWINDOW (window, w); From 26d078a69e2251efc65d1a25c3f59ceca50de87d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 20 Sep 2013 17:52:07 -0700 Subject: [PATCH 277/321] * erc.el (erc-invite-only-mode, erc-toggle-channel-mode): Remove unused local variable `erc-force-send'. --- lisp/erc/ChangeLog | 5 +++++ lisp/erc/erc.el | 6 ++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index d07bc341c92..ec154fb7efa 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,8 @@ +2013-09-21 Glenn Morris + + * erc.el (erc-invite-only-mode, erc-toggle-channel-mode): + Remove unused local variable `erc-force-send'. + 2013-09-19 Glenn Morris * erc-button.el (erc-button-click-button, erc-button-press-button): diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 4f719562c38..15ff0e5737e 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -5541,8 +5541,7 @@ If ARG is non-nil, turn this mode off (-i). This command is sent even if excess flood is detected." (interactive "P") (erc-set-active-buffer (current-buffer)) - (let ((tgt (erc-default-target)) - (erc-force-send t)) ;FIXME: Not used anywhere! + (let ((tgt (erc-default-target))) (cond ((or (not tgt) (not (erc-channel-p tgt))) (erc-display-message nil 'error (current-buffer) 'no-target)) (arg (erc-load-irc-script-lines (list (concat "/mode " tgt " -i")) @@ -5579,8 +5578,7 @@ If CHANNEL is non-nil, toggle MODE for that channel, otherwise use `erc-default-target'." (interactive "P") (erc-set-active-buffer (current-buffer)) - (let ((tgt (or channel (erc-default-target))) - (erc-force-send t)) ;FIXME: Not used anywhere! + (let ((tgt (or channel (erc-default-target)))) (cond ((or (null tgt) (null (erc-channel-p tgt))) (erc-display-message nil 'error 'active 'no-target)) ((member mode erc-channel-modes) From d052d3bdf357c710b2885d6acb77194726705937 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Sat, 21 Sep 2013 16:16:13 +0800 Subject: [PATCH 278/321] Add keybinding for vc-log-incoming in vc-dir. * doc/emacs/maintaining.texi (VC Directory Commands): Add keybinding for vc-log-incoming in vc-dir. * lisp/vc/vc-dir.el (vc-dir-mode-map): Add keybinding for vc-log-incoming. --- doc/emacs/ChangeLog | 5 +++++ doc/emacs/maintaining.texi | 2 +- etc/NEWS | 3 +++ lisp/ChangeLog | 4 ++++ lisp/vc/vc-dir.el | 1 + lisp/vc/vc.el | 2 +- 6 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index b263ca7671a..1fddd4ab180 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2013-09-21 Xue Fuqiao + + * maintaining.texi (VC Directory Commands): Add keybinding for + vc-log-incoming in vc-dir. + 2013-09-12 Xue Fuqiao * text.texi (Enriched Justification): Explain values of default-justification. diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 4a61db5509b..9cb6c70e0fb 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -1242,7 +1242,7 @@ Revisions}), and @w{@kbd{C-x v u}} (@pxref{VC Undo}). The VC Directory buffer also defines some single-key shortcuts for VC commands with the @kbd{C-x v} prefix: @kbd{=}, @kbd{+}, @kbd{l}, -@kbd{i}, @kbd{D}, @kbd{L}, @kbd{G} and @kbd{v}. +@kbd{i}, @kbd{D}, @kbd{L}, @kbd{G}, @kbd{I} and @kbd{v}. For example, you can commit a set of edited files by opening a VC Directory buffer, where the files are listed with the @samp{edited} diff --git a/etc/NEWS b/etc/NEWS index 736bf8f14e6..1cb8d53b57f 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -275,6 +275,9 @@ whole tree revisions. *** In VC directory mode, `L' lists the change log for the current VC controlled tree in a window. +*** In VC directory mode, `I' shows a log of changes that will be +received with a pull operation. + *** `C-x v G' (globally) and `G' (in VC directory mode) ignores a file under current version control system. When called with a prefix argument, you can remove a file from the ignored file list. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 75aea560203..7e8f9655460 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-21 Xue Fuqiao + + * vc/vc-dir.el (vc-dir-mode-map): Add keybinding for vc-log-incoming. + 2013-09-20 Stefan Monnier * subr.el (internal--call-interactively): New const. diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index 5ddcfd57748..1e6ec15174a 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -245,6 +245,7 @@ See `run-hooks'." (define-key map "+" 'vc-update) ;; C-x v + (define-key map "l" 'vc-print-log) ;; C-x v l (define-key map "L" 'vc-print-root-log) ;; C-x v L + (define-key map "I" 'vc-log-incoming) ;; C-x v I ;; More confusing than helpful, probably ;;(define-key map "R" 'vc-revert) ;; u is taken by vc-dir-unmark. ;;(define-key map "A" 'vc-annotate) ;; g is taken by revert-buffer diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index fa5c87d44e3..69098efc50b 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2336,7 +2336,7 @@ When called interactively with a prefix argument, prompt for LIMIT." ;;;###autoload (defun vc-log-incoming (&optional remote-location) "Show a log of changes that will be received with a pull operation from REMOTE-LOCATION. -When called interactively with a prefix argument, prompt for REMOTE-LOCATION.." +When called interactively with a prefix argument, prompt for REMOTE-LOCATION." (interactive (when current-prefix-arg (list (read-string "Remote location (empty for default): ")))) From cb8165496a3d4127259ace86116fdf4d53ee2c68 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Sat, 21 Sep 2013 16:22:57 +0800 Subject: [PATCH 279/321] Comments. --- doc/emacs/maintaining.texi | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 9cb6c70e0fb..7404607cb63 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -599,6 +599,7 @@ the buffer and commit the change, together with your log entry. @cindex Log Edit mode @cindex mode, Log Edit @vindex vc-log-mode-hook +@c FIXME: Mention log-edit-mode-hook here? --xfq The major mode for the @file{*vc-log*} buffer is Log Edit mode, a variant of Text mode (@pxref{Text Mode}). On entering Log Edit mode, Emacs runs the hooks @code{text-mode-hook} and @code{vc-log-mode-hook} From f6bb09828c0457ece76a383e106e42b7efa1cdcc Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Sat, 21 Sep 2013 16:31:45 +0800 Subject: [PATCH 280/321] * doc/emacs/maintaining.texi (Log Buffer): Use @emph instead of @strong. --- doc/emacs/ChangeLog | 1 + doc/emacs/maintaining.texi | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 1fddd4ab180..0ad3a310885 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -2,6 +2,7 @@ * maintaining.texi (VC Directory Commands): Add keybinding for vc-log-incoming in vc-dir. + (Log Buffer): Use @emph instead of @strong. 2013-09-12 Xue Fuqiao diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 7404607cb63..7fd3fb1c9d4 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -653,7 +653,7 @@ opposite way of working---generating ChangeLog entries from the Log Edit buffer. @end ifnottex - To abort a commit, just @strong{don't} type @kbd{C-c C-c} in that + To abort a commit, just @emph{don't} type @kbd{C-c C-c} in that buffer. You can switch buffers and do other editing. As long as you don't try to make another commit, the entry you were editing remains in the @file{*vc-log*} buffer, and you can go back to that buffer at From 75d83e22076c3bb46e81b26c4c4b09bbb39a6ce6 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 21 Sep 2013 11:49:31 +0300 Subject: [PATCH 281/321] Recognize OBJFILE-gdb.gdb GDB script files. lisp/files.el (auto-mode-alist): Support OBJFILE-gdb.gdb script files recognized by GDB 7.5 and later. --- lisp/ChangeLog | 5 +++++ lisp/files.el | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7e8f9655460..74bcabfb575 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-21 Eli Zaretskii + + * files.el (auto-mode-alist): Support OBJFILE-gdb.gdb script files + recognized by GDB 7.5 and later. + 2013-09-21 Xue Fuqiao * vc/vc-dir.el (vc-dir-mode-map): Add keybinding for vc-log-incoming. diff --git a/lisp/files.el b/lisp/files.el index ca55c646699..1a268200289 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2269,6 +2269,10 @@ since only a single case-insensitive search through the alist is made." ;; .PROCESSORNAME-gdbinit so that the host and target gdbinit files ;; don't interfere with each other. ("/\\.[a-z0-9-]*gdbinit" . gdb-script-mode) + ;; GDB 7.5 introduced OBJFILE-gdb.gdb script files; e.g. a file + ;; named 'emacs-gdb.gdb', if it exists, will be automatically + ;; loaded when GDB reads an objfile called 'emacs'. + ("-gdb\\.gdb" . gdb-script-mode) ("[cC]hange\\.?[lL]og?\\'" . change-log-mode) ("[cC]hange[lL]og[-.][0-9]+\\'" . change-log-mode) ("\\$CHANGE_LOG\\$\\.TXT" . change-log-mode) From 878294497c10c1548fcfde5be3ea2fe35757839e Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Sat, 21 Sep 2013 18:58:39 +0800 Subject: [PATCH 282/321] Add information about carriage-return in lispref. * doc/lispref/nonascii.texi (Coding System Basics): Add information about carriage-return. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/nonascii.texi | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index a1503ea4dde..921e54eb5c1 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2013-09-21 Xue Fuqiao + + * nonascii.texi (Coding System Basics): Add information about carriage-return. + 2013-09-14 Eli Zaretskii * display.texi (Display Margins): State the units of measuring diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi index e8e810ce61f..6ae6fa1bf7c 100644 --- a/doc/lispref/nonascii.texi +++ b/doc/lispref/nonascii.texi @@ -962,7 +962,8 @@ Unix convention, used on GNU and Unix systems, is to use the linefeed character (also called newline). The DOS convention, used on MS-Windows and MS-DOS systems, is to use a carriage-return and a linefeed at the end of a line. The Mac convention is to use just -carriage-return. +carriage-return. (This was the convention used on the Macintosh +system prior to OS X.) @cindex base coding system @cindex variant coding system From b3f1d1198a0dddc02423f0f766e9e213373fab60 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 21 Sep 2013 14:48:19 +0300 Subject: [PATCH 283/321] Fix bug #15426 with directory-files invoked from a unibyte buffer. src/dired.c (directory_files_internal): Use multibyte_chars_in_text, not chars_in_text, whose result depends on the multibyteness of the current buffer. --- src/ChangeLog | 6 ++++++ src/dired.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7b59b33c8bd..37e04f03c85 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-09-21 Eli Zaretskii + + * dired.c (directory_files_internal): Use multibyte_chars_in_text, + not chars_in_text, whose result depends on the multibyteness of + the current buffer. (Bug#15426) + 2013-09-20 Paul Eggert Port recent change to hosts where pointers aren't 'long'. diff --git a/src/dired.c b/src/dired.c index 2b79b54f2a4..1bdb171c4d0 100644 --- a/src/dired.c +++ b/src/dired.c @@ -278,7 +278,7 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, memcpy (SDATA (fullname) + directory_nbytes + needsep, SDATA (name), len); - nchars = chars_in_text (SDATA (fullname), nbytes); + nchars = multibyte_chars_in_text (SDATA (fullname), nbytes); /* Some bug somewhere. */ if (nchars > nbytes) From ece15004709aa79faa2e19194c51699c0a86423e Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Sat, 21 Sep 2013 17:21:29 +0000 Subject: [PATCH 284/321] C++: fontify identifier in declaration following "public:" correctly. * progmodes/cc-langs.el (c-decl-start-colon-kwd-re): New lang var to match "public", etc. (c-decl-prefix-re): Add ":" into the C++ value. * progmodes/cc-engine.el (c-find-decl-prefix-search): Refactor a bit. Add a check for a ":" preceded by "public", etc. --- lisp/ChangeLog | 9 +++++ lisp/progmodes/cc-engine.el | 72 +++++++++++++++++++++++-------------- lisp/progmodes/cc-langs.el | 16 +++++++-- 3 files changed, 68 insertions(+), 29 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 74bcabfb575..cf5e3e1f061 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2013-09-21 Alan Mackenzie + + C++: fontify identifier in declaration following "public:" correctly. + * progmodes/cc-langs.el (c-decl-start-colon-kwd-re): New lang var + to match "public", etc. + (c-decl-prefix-re): Add ":" into the C++ value. + * progmodes/cc-engine.el (c-find-decl-prefix-search): Refactor a + bit. Add a check for a ":" preceded by "public", etc. + 2013-09-21 Eli Zaretskii * files.el (auto-mode-alist): Support OBJFILE-gdb.gdb script files diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 582f7ef0a54..ce83efd114b 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -4729,6 +4729,11 @@ comment at the start of cc-engine.el for more info." ;; inside `c-find-decl-spots'. The point is left at `cfd-match-pos' ;; if there is a match, otherwise at `cfd-limit'. ;; + ;; The macro moves point forward to the next putative start of a declaration + ;; or cfd-limit. This decl start is the next token after a "declaration + ;; prefix". The declaration prefix is the earlier of `cfd-prop-match' and + ;; `cfd-re-match'. `cfd-match-pos' is set to the decl prefix. + ;; ;; This macro might do hidden buffer changes. '(progn @@ -4750,34 +4755,47 @@ comment at the start of cc-engine.el for more info." (if (> cfd-re-match-end (point)) (goto-char cfd-re-match-end)) - (while (if (setq cfd-re-match-end - (re-search-forward c-decl-prefix-or-start-re - cfd-limit 'move)) + ;; Each time round, the next `while' moves forward over a pseudo match + ;; of `c-decl-prefix-or-start-re' which is either inside a literal, or + ;; is a ":" not preceded by "public", etc.. `cfd-re-match' and + ;; `cfd-re-match-end' get set. + (while + (progn + (setq cfd-re-match-end (re-search-forward c-decl-prefix-or-start-re + cfd-limit 'move)) + (cond + ((null cfd-re-match-end) + ;; No match. Finish up and exit the loop. + (setq cfd-re-match cfd-limit) + nil) + ((c-got-face-at + (if (setq cfd-re-match (match-end 1)) + ;; Matched the end of a token preceding a decl spot. + (progn + (goto-char cfd-re-match) + (1- cfd-re-match)) + ;; Matched a token that start a decl spot. + (goto-char (match-beginning 0)) + (point)) + c-literal-faces) + ;; Pseudo match inside a comment or string literal. Skip out + ;; of comments and string literals. + (while (progn + (goto-char (next-single-property-change + (point) 'face nil cfd-limit)) + (and (< (point) cfd-limit) + (c-got-face-at (point) c-literal-faces)))) + t) ; Continue the loop over pseudo matches. + ((and (match-string 1) + (string= (match-string 1) ":") + (save-excursion + (or (/= (c-backward-token-2 2) 0) ; no search limit. :-( + (not (looking-at c-decl-start-colon-kwd-re))))) + ;; Found a ":" which isn't part of "public:", etc. + t) + (t nil)))) ;; Found a real match. Exit the pseudo-match loop. - ;; Match. Check if it's inside a comment or string literal. - (c-got-face-at - (if (setq cfd-re-match (match-end 1)) - ;; Matched the end of a token preceding a decl spot. - (progn - (goto-char cfd-re-match) - (1- cfd-re-match)) - ;; Matched a token that start a decl spot. - (goto-char (match-beginning 0)) - (point)) - c-literal-faces) - - ;; No match. Finish up and exit the loop. - (setq cfd-re-match cfd-limit) - nil) - - ;; Skip out of comments and string literals. - (while (progn - (goto-char (next-single-property-change - (point) 'face nil cfd-limit)) - (and (< (point) cfd-limit) - (c-got-face-at (point) c-literal-faces))))) - - ;; If we matched at the decl start, we have to back up over the + ;; If our match was at the decl start, we have to back up over the ;; preceding syntactic ws to set `cfd-match-pos' and to catch ;; any decl spots in the syntactic ws. (unless cfd-re-match diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 80e6189822b..c1e8a1524dc 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -2587,6 +2587,15 @@ Note that Java specific rules are currently applied to tell this from ;;; Additional constants for parser-level constructs. +(c-lang-defconst c-decl-start-colon-kwd-re + "Regexp matching a keyword that is followed by a colon, where + the whole construct can precede a declaration. + E.g. \"public:\" in C++." + t "\\<\\>" + c++ (c-make-keywords-re t (c-lang-const c-protection-kwds))) +(c-lang-defvar c-decl-start-colon-kwd-re + (c-lang-const c-decl-start-colon-kwd-re)) + (c-lang-defconst c-decl-prefix-re "Regexp matching something that might precede a declaration, cast or label, such as the last token of a preceding statement or declaration. @@ -2626,8 +2635,11 @@ more info." java "\\([\{\}\(;,<]+\\)" ;; Match "<" in C++ to get the first argument in a template arglist. ;; In that case there's an additional check in `c-find-decl-spots' - ;; that it got open paren syntax. - c++ "\\([\{\}\(\);,<]+\\)" + ;; that it got open paren syntax. Match ":" to aid in picking up + ;; "public:", etc. This involves additional checks in + ;; `c-find-decl-prefix-search' to prevent a match of identifiers + ;; or labels. + c++ "\\([\{\}\(\);:,<]+\\)" ;; Additionally match the protection directives in Objective-C. ;; Note that this doesn't cope with the longer directives, which we ;; would have to match from start to end since they don't end with From 3a4be55b4d956799201169bb4ba49c0e948eec32 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Sun, 22 Sep 2013 10:13:44 +0800 Subject: [PATCH 285/321] @refill is no longer needed. * doc/emacs/fixit.texi (Transpose): (Fixing Case): Remove @refill. --- doc/emacs/ChangeLog | 5 +++++ doc/emacs/fixit.texi | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 0ad3a310885..6b4c12511dd 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2013-09-22 Xue Fuqiao + + * fixit.texi (Transpose): + (Fixing Case): Remove @refill. + 2013-09-21 Xue Fuqiao * maintaining.texi (VC Directory Commands): Add keybinding for diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi index b6eb1ed11a2..a6aff77b583 100644 --- a/doc/emacs/fixit.texi +++ b/doc/emacs/fixit.texi @@ -190,7 +190,7 @@ point forward across three other characters. It would change @samp{f@point{}oobar} into @samp{oobf@point{}ar}. This is equivalent to repeating @kbd{C-t} three times. @kbd{C-u - 4 M-t} moves the word before point backward across four words. @kbd{C-u - C-M-t} would cancel -the effect of plain @kbd{C-M-t}.@refill +the effect of plain @kbd{C-M-t}. A numeric argument of zero is assigned a special meaning (because otherwise a command with a repeat count of zero would do nothing): to @@ -216,7 +216,7 @@ Convert last word to lower case with capital initial. the word case-conversion commands @kbd{M-l}, @kbd{M-u} and @kbd{M-c} have a special feature when used with a negative argument: they do not move the cursor. As soon as you see you have mistyped the last word, you can simply -case-convert it and go on typing. @xref{Case}.@refill +case-convert it and go on typing. @xref{Case}. @node Spelling @section Checking and Correcting Spelling From c6cfd9101e70010bcd4ba6831b0d42ebc84728fe Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 21 Sep 2013 23:22:05 -0700 Subject: [PATCH 286/321] Fix syntax.h bug introduced by recent INLINE change. syntax.h defined an extern inline function SYNTAX_ENTRY that was conditionally compiled one way in some modules, and a different way in others. This doesn't work with extern inline functions, which must have the same definition in all modules, because the defining code might be shared across modules, depending on the implementation. Symptoms reported by Martin Rudalics in: http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00414.html * regex.c, syntax.c (SYNTAX_ENTRY_VIA_PROPERTY): Remove. (SYNTAX, SYNTAX_ENTRY, SYNTAX_WITH_FLAGS): New macros, overriding the corresponding functions in syntax.h. * syntax.h (syntax_property_entry, syntax_property_with_flags) (syntax_property): New inline functions. (SYNTAX_ENTRY, SYNTAX_WITH_FLAGS, SYNTAX): Rewrite in terms of these new functions. --- src/ChangeLog | 18 ++++++++++++++++++ src/regex.c | 6 +++--- src/syntax.c | 8 +++++--- src/syntax.h | 36 +++++++++++++++++++++++++----------- 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 37e04f03c85..084ae983b6f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,21 @@ +2013-09-22 Paul Eggert + + Fix syntax.h bug introduced by recent INLINE change. + syntax.h defined an extern inline function SYNTAX_ENTRY that was + conditionally compiled one way in some modules, and a different + way in others. This doesn't work with extern inline functions, + which must have the same definition in all modules, because the + defining code might be shared across modules, depending on the + implementation. Symptoms reported by Martin Rudalics in: + http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00414.html + * regex.c, syntax.c (SYNTAX_ENTRY_VIA_PROPERTY): Remove. + (SYNTAX, SYNTAX_ENTRY, SYNTAX_WITH_FLAGS): New macros, + overriding the corresponding functions in syntax.h. + * syntax.h (syntax_property_entry, syntax_property_with_flags) + (syntax_property): New inline functions. + (SYNTAX_ENTRY, SYNTAX_WITH_FLAGS, SYNTAX): + Rewrite in terms of these new functions. + 2013-09-21 Eli Zaretskii * dired.c (directory_files_internal): Use multibyte_chars_in_text, diff --git a/src/regex.c b/src/regex.c index 1befececd22..4ab98bbf098 100644 --- a/src/regex.c +++ b/src/regex.c @@ -131,12 +131,12 @@ # include "character.h" # include "buffer.h" -/* Make syntax table lookup grant data in gl_state. */ -# define SYNTAX_ENTRY_VIA_PROPERTY - # include "syntax.h" # include "category.h" +/* Make syntax table lookup grant data in gl_state. */ +# define SYNTAX(c) syntax_property (c, 1) + # ifdef malloc # undef malloc # endif diff --git a/src/syntax.c b/src/syntax.c index 3785bf45515..e18db029309 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -29,13 +29,15 @@ along with GNU Emacs. If not, see . */ #include "keymap.h" #include "regex.h" -/* Make syntax table lookup grant data in gl_state. */ -#define SYNTAX_ENTRY_VIA_PROPERTY - #include "syntax.h" #include "intervals.h" #include "category.h" +/* Make syntax table lookup grant data in gl_state. */ +#define SYNTAX(c) syntax_property (c, 1) +#define SYNTAX_ENTRY(c) syntax_property_entry (c, 1) +#define SYNTAX_WITH_FLAGS(c) syntax_property_with_flags (c, 1) + /* Eight single-bit flags have the following meanings: 1. This character is the first of a two-character comment-start sequence. 2. This character is the second of a two-character comment-start sequence. diff --git a/src/syntax.h b/src/syntax.h index 1350d87162b..73fbb153338 100644 --- a/src/syntax.h +++ b/src/syntax.h @@ -83,35 +83,49 @@ struct gl_state_s extern struct gl_state_s gl_state; /* Fetch the information from the entry for character C - in syntax table TABLE, or from globally kept data (gl_state). + in the current buffer's syntax table, + or (if VIA_PROPERTY) from globally kept data (gl_state). Does inheritance. */ +INLINE Lisp_Object +syntax_property_entry (int c, bool via_property) +{ + if (via_property) + return (gl_state.use_global + ? gl_state.global_code + : CHAR_TABLE_REF (gl_state.current_syntax_table, c)); + return CHAR_TABLE_REF (BVAR (current_buffer, syntax_table), c); +} INLINE Lisp_Object SYNTAX_ENTRY (int c) { -#ifdef SYNTAX_ENTRY_VIA_PROPERTY - return (gl_state.use_global - ? gl_state.global_code - : CHAR_TABLE_REF (gl_state.current_syntax_table, c)); -#else - return CHAR_TABLE_REF (BVAR (current_buffer, syntax_table), c); -#endif + return syntax_property_entry (c, 0); } /* Extract the information from the entry for character C in the current syntax table. */ +INLINE int +syntax_property_with_flags (int c, bool via_property) +{ + Lisp_Object ent = syntax_property_entry (c, via_property); + return CONSP (ent) ? XINT (XCAR (ent)) : Swhitespace; +} INLINE int SYNTAX_WITH_FLAGS (int c) { - Lisp_Object ent = SYNTAX_ENTRY (c); - return CONSP (ent) ? XINT (XCAR (ent)) : Swhitespace; + return syntax_property_with_flags (c, 0); } +INLINE enum syntaxcode +syntax_property (int c, bool via_property) +{ + return syntax_property_with_flags (c, via_property) & 0xff; +} INLINE enum syntaxcode SYNTAX (int c) { - return SYNTAX_WITH_FLAGS (c) & 0xff; + return syntax_property (c, 0); } From 76880d884d87d0bc674249e292ccda70f31cca0e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 22 Sep 2013 10:13:14 +0300 Subject: [PATCH 287/321] Fix bug #15365 with aborts in try_window_id. src/xdisp.c (try_window_id): Don't abort if cursor row could not be found (which can legitimately happen when the glyph row at the window start is disabled in the current_matrix. --- src/ChangeLog | 6 ++++++ src/xdisp.c | 4 ---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 084ae983b6f..1442650d432 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-09-22 Eli Zaretskii + + * xdisp.c (try_window_id): Don't abort if cursor row could not be + found (which can legitimately happen when the glyph row at the + window start is disabled in the current_matrix. (Bug#15365) + 2013-09-22 Paul Eggert Fix syntax.h bug introduced by recent INLINE change. diff --git a/src/xdisp.c b/src/xdisp.c index c4f7b205119..bfd86758a1e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -17291,8 +17291,6 @@ try_window_id (struct window *w) row = row_containing_pos (w, PT, r0, NULL, 0); if (row) set_cursor_from_row (w, row, current_matrix, 0, 0, 0, 0); - else - emacs_abort (); return 1; } } @@ -17333,8 +17331,6 @@ try_window_id (struct window *w) row = row_containing_pos (w, PT, r0, NULL, 0); if (row) set_cursor_from_row (w, row, current_matrix, 0, 0, 0, 0); - else - emacs_abort (); return 2; } } From 3e0b94e7ff1fc69b077322d672ef5d0b668541c3 Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Sun, 22 Sep 2013 01:31:55 -0800 Subject: [PATCH 288/321] Add set operations for bool-vector. http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00404.html * data.c (Qbool_vector_p): New symbol. (bool_vector_spare_mask,popcount_size_t_generic) (popcount_size_t_msc,popcount_size_t_gcc) (popcount_size_t) (bool_vector_binop_driver) (count_trailing_zero_bits,size_t_to_host_endian) (Fbool_vector_exclusive_or) (Fbool_vector_union) (Fbool_vector_intersection,Fbool_vector_set_difference) (Fbool_vector_subsetp,Fbool_vector_not) (Fbool_vector_count_matches) (Fbool_vector_count_matches_at): New functions. (syms_of_data): Intern new symbol, functions. * alloc.c (bool_vector_payload_bytes): New function. (Fmake_bool_vector): Instead of calling Fmake_vector, which performs redundant initialization and argument checking, just call allocate_vector ourselves. Make sure we clear any terminating padding to zero. (vector_nbytes,sweep_vectors): Use bool_vector_payload_bytes instead of open-coding the size calculation. (vroundup_ct): New macro. (vroundup): Assume argument >= 0; invoke vroundup_ct. * casetab.c (shuffle,set_identity): Change lint_assume to assume. * composite.c (composition_gstring_put_cache): Change lint_assume to assume. * conf_post.h (assume): New macro. (lint_assume): Remove. * dispnew.c (update_frame_1): Change lint_assume to assume. * ftfont.c (ftfont_shape_by_flt): Change lint_assume to assume. * image.c (gif_load): Change lint_assume to assume. * lisp.h (eassert_and_assume): New macro. (Qbool_vector_p): Declare. (CHECK_BOOL_VECTOR,ROUNDUP,BITS_PER_SIZE_T): New macros. (swap16,swap32,swap64): New inline functions. * macfont.c (macfont_shape): Change lint_assume to assume. * ralloc.c: Rename ROUNDUP to PAGE_ROUNDUP throughout. * xsettings.c (parse_settings): Use new swap16 and swap32 from lisp.h instead of file-specific macros. --- etc/ChangeLog | 6 +- etc/NEWS | 10 + src/ChangeLog | 42 ++++ src/alloc.c | 103 +++++--- src/casetab.c | 4 +- src/composite.c | 2 +- src/conf_post.h | 16 +- src/data.c | 462 +++++++++++++++++++++++++++++++++++ src/dispnew.c | 2 +- src/ftfont.c | 2 +- src/image.c | 2 +- src/intervals.c | 2 +- src/lisp.h | 50 ++++ src/macfont.m | 2 +- src/ralloc.c | 22 +- src/xsettings.c | 11 +- test/ChangeLog | 18 ++ test/automated/data-tests.el | 186 +++++++++++++- 18 files changed, 874 insertions(+), 68 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index 7133b16f36d..06ca0f3f8bc 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,4 +1,8 @@ -2013-09-15 Jan Djärv +2013-09-22 Daniel Colascione + + * NEWS: Mention new bool-vector functionality. + +aaaa2013-09-15 Jan Djärv * NEWS: Mention the macfont backend. diff --git a/etc/NEWS b/etc/NEWS index 1cb8d53b57f..da17f5ddba5 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -638,6 +638,16 @@ for something (not just adding elements to it), it ought not to affect you. * Lisp Changes in Emacs 24.4 +** New bool-vector set operation functions: +*** `bool-vector-exclusive-or' +*** `bool-vector-union' +*** `bool-vector-intersection' +*** `bool-vector-set-difference' +*** `bool-vector-not' +*** `bool-vector-subset' +*** `bool-vector-count-matches' +*** `bool-vector-count-matches-at' + ** Comparison functions =, <, >, <=, >= now take many arguments. ** The second argument of `eval' can now be a lexical-environment. diff --git a/src/ChangeLog b/src/ChangeLog index 1442650d432..7c3a29c5d86 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,45 @@ +2013-09-22 Daniel Colascione + + * data.c (Qbool_vector_p): New symbol. + (bool_vector_spare_mask,popcount_size_t_generic) + (popcount_size_t_msc,popcount_size_t_gcc) + (popcount_size_t) + (bool_vector_binop_driver) + (count_trailing_zero_bits,size_t_to_host_endian) + (Fbool_vector_exclusive_or) + (Fbool_vector_union) + (Fbool_vector_intersection,Fbool_vector_set_difference) + (Fbool_vector_subsetp,Fbool_vector_not) + (Fbool_vector_count_matches) + (Fbool_vector_count_matches_at): New functions. + (syms_of_data): Intern new symbol, functions. + * alloc.c (bool_vector_payload_bytes): New function. + (Fmake_bool_vector): Instead of calling Fmake_vector, + which performs redundant initialization and argument checking, + just call allocate_vector ourselves. Make sure we clear any + terminating padding to zero. + (vector_nbytes,sweep_vectors): Use bool_vector_payload_bytes + instead of open-coding the size calculation. + (vroundup_ct): New macro. + (vroundup): Assume argument >= 0; invoke vroundup_ct. + * casetab.c (shuffle,set_identity): Change lint_assume to assume. + * composite.c (composition_gstring_put_cache): Change + lint_assume to assume. + * conf_post.h (assume): New macro. + (lint_assume): Remove. + * dispnew.c (update_frame_1): Change lint_assume to assume. + * ftfont.c (ftfont_shape_by_flt): Change lint_assume + to assume. + * image.c (gif_load): Change lint_assume to assume. + * lisp.h (eassert_and_assume): New macro. + (Qbool_vector_p): Declare. + (CHECK_BOOL_VECTOR,ROUNDUP,BITS_PER_SIZE_T): New macros. + (swap16,swap32,swap64): New inline functions. + * macfont.c (macfont_shape): Change lint_assume to assume. + * ralloc.c: Rename ROUNDUP to PAGE_ROUNDUP throughout. + * xsettings.c (parse_settings): Use new swap16 and + swap32 from lisp.h instead of file-specific macros. + 2013-09-22 Eli Zaretskii * xdisp.c (try_window_id): Don't abort if cursor row could not be diff --git a/src/alloc.c b/src/alloc.c index de73ce9bae0..847b3c88bbe 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -2001,6 +2001,35 @@ INIT must be an integer that represents a character. */) return val; } +verify (sizeof (size_t) * CHAR_BIT == BITS_PER_SIZE_T); +verify ((BITS_PER_SIZE_T & (BITS_PER_SIZE_T - 1)) == 0); + +static +ptrdiff_t +bool_vector_payload_bytes (ptrdiff_t nr_bits, + ptrdiff_t* exact_needed_bytes_out) +{ + ptrdiff_t exact_needed_bytes; + ptrdiff_t needed_bytes; + + eassert_and_assume (nr_bits >= 0); + + exact_needed_bytes = ROUNDUP ((size_t) nr_bits, CHAR_BIT) / CHAR_BIT; + needed_bytes = ROUNDUP ((size_t) nr_bits, BITS_PER_SIZE_T) / CHAR_BIT; + + if (needed_bytes == 0) + { + /* Always allocate at least one machine word of payload so that + bool-vector operations in data.c don't need a special case + for empty vectors. */ + needed_bytes = sizeof (size_t); + } + + if (exact_needed_bytes_out != NULL) + *exact_needed_bytes_out = exact_needed_bytes; + + return needed_bytes; +} DEFUN ("make-bool-vector", Fmake_bool_vector, Smake_bool_vector, 2, 2, 0, doc: /* Return a new bool-vector of length LENGTH, using INIT for each element. @@ -2009,37 +2038,43 @@ LENGTH must be a number. INIT matters only in whether it is t or nil. */) { register Lisp_Object val; struct Lisp_Bool_Vector *p; - ptrdiff_t length_in_chars; - EMACS_INT length_in_elts; - int bits_per_value; - int extra_bool_elts = ((bool_header_size - header_size + word_size - 1) - / word_size); + ptrdiff_t exact_payload_bytes; + ptrdiff_t total_payload_bytes; + ptrdiff_t needed_elements; CHECK_NATNUM (length); + if (PTRDIFF_MAX < XFASTINT (length)) + memory_full (SIZE_MAX); - bits_per_value = sizeof (EMACS_INT) * BOOL_VECTOR_BITS_PER_CHAR; + total_payload_bytes = bool_vector_payload_bytes + (XFASTINT (length), &exact_payload_bytes); - length_in_elts = (XFASTINT (length) + bits_per_value - 1) / bits_per_value; + eassert_and_assume (exact_payload_bytes <= total_payload_bytes); + eassert_and_assume (0 <= exact_payload_bytes); - val = Fmake_vector (make_number (length_in_elts + extra_bool_elts), Qnil); + needed_elements = ROUNDUP ((size_t) ((bool_header_size - header_size) + + total_payload_bytes), + word_size) / word_size; - /* No Lisp_Object to trace in there. */ + p = (struct Lisp_Bool_Vector* ) allocate_vector (needed_elements); + XSETVECTOR (val, p); XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0, 0); - p = XBOOL_VECTOR (val); p->size = XFASTINT (length); - - length_in_chars = ((XFASTINT (length) + BOOL_VECTOR_BITS_PER_CHAR - 1) - / BOOL_VECTOR_BITS_PER_CHAR); - if (length_in_chars) + if (exact_payload_bytes) { - memset (p->data, ! NILP (init) ? -1 : 0, length_in_chars); + memset (p->data, ! NILP (init) ? -1 : 0, exact_payload_bytes); /* Clear any extraneous bits in the last byte. */ - p->data[length_in_chars - 1] + p->data[exact_payload_bytes - 1] &= (1 << ((XFASTINT (length) - 1) % BOOL_VECTOR_BITS_PER_CHAR + 1)) - 1; } + /* Clear padding at the end. */ + memset (p->data + exact_payload_bytes, + 0, + total_payload_bytes - exact_payload_bytes); + return val; } @@ -2565,24 +2600,22 @@ enum roundup_size = COMMON_MULTIPLE (word_size, USE_LSB_TAG ? GCALIGNMENT : 1) }; -/* ROUNDUP_SIZE must be a power of 2. */ -verify ((roundup_size & (roundup_size - 1)) == 0); - /* Verify assumptions described above. */ verify ((VECTOR_BLOCK_SIZE % roundup_size) == 0); verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS)); -/* Round up X to nearest mult-of-ROUNDUP_SIZE. */ - -#define vroundup(x) (((x) + (roundup_size - 1)) & ~(roundup_size - 1)) +/* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at compile time. */ +#define vroundup_ct(x) ROUNDUP((size_t)(x), roundup_size) +/* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at runtime. */ +#define vroundup(x) (assume((x) >= 0), vroundup_ct(x)) /* Rounding helps to maintain alignment constraints if USE_LSB_TAG. */ -#define VECTOR_BLOCK_BYTES (VECTOR_BLOCK_SIZE - vroundup (sizeof (void *))) +#define VECTOR_BLOCK_BYTES (VECTOR_BLOCK_SIZE - vroundup_ct (sizeof (void *))) /* Size of the minimal vector allocated from block. */ -#define VBLOCK_BYTES_MIN vroundup (header_size + sizeof (Lisp_Object)) +#define VBLOCK_BYTES_MIN vroundup_ct (header_size + sizeof (Lisp_Object)) /* Size of the largest vector allocated from block. */ @@ -2642,7 +2675,7 @@ struct large_vector struct large_vector *vector; #if USE_LSB_TAG /* We need to maintain ROUNDUP_SIZE alignment for the vector member. */ - unsigned char c[vroundup (sizeof (struct large_vector *))]; + unsigned char c[vroundup_ct (sizeof (struct large_vector *))]; #endif } next; struct Lisp_Vector v; @@ -2783,10 +2816,14 @@ vector_nbytes (struct Lisp_Vector *v) if (size & PSEUDOVECTOR_FLAG) { if (PSEUDOVECTOR_TYPEP (&v->header, PVEC_BOOL_VECTOR)) - size = (bool_header_size - + (((struct Lisp_Bool_Vector *) v)->size - + BOOL_VECTOR_BITS_PER_CHAR - 1) - / BOOL_VECTOR_BITS_PER_CHAR); + { + struct Lisp_Bool_Vector *bv = (struct Lisp_Bool_Vector *) v; + ptrdiff_t payload_bytes = + bool_vector_payload_bytes (bv->size, NULL); + + eassert_and_assume (payload_bytes >= 0); + size = bool_header_size + ROUNDUP (payload_bytes, word_size); + } else size = (header_size + ((size & PSEUDOVECTOR_SIZE_MASK) @@ -2886,17 +2923,11 @@ sweep_vectors (void) total_vectors++; if (vector->header.size & PSEUDOVECTOR_FLAG) { - struct Lisp_Bool_Vector *b = (struct Lisp_Bool_Vector *) vector; - /* All non-bool pseudovectors are small enough to be allocated from vector blocks. This code should be redesigned if some pseudovector type grows beyond VBLOCK_BYTES_MAX. */ eassert (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BOOL_VECTOR)); - - total_vector_slots - += (bool_header_size - + ((b->size + BOOL_VECTOR_BITS_PER_CHAR - 1) - / BOOL_VECTOR_BITS_PER_CHAR)) / word_size; + total_vector_slots += vector_nbytes (vector) / word_size; } else total_vector_slots diff --git a/src/casetab.c b/src/casetab.c index b6b1c99c39f..69cd784f4cc 100644 --- a/src/casetab.c +++ b/src/casetab.c @@ -205,7 +205,7 @@ set_identity (Lisp_Object table, Lisp_Object c, Lisp_Object elt) from = to = XINT (c); to++; - lint_assume (to <= MAX_CHAR + 1); + assume (to <= MAX_CHAR + 1); for (; from < to; from++) CHAR_TABLE_SET (table, from, make_number (from)); } @@ -232,7 +232,7 @@ shuffle (Lisp_Object table, Lisp_Object c, Lisp_Object elt) from = to = XINT (c); to++; - lint_assume (to <= MAX_CHAR + 1); + assume (to <= MAX_CHAR + 1); for (; from < to; from++) { Lisp_Object tem = Faref (table, elt); diff --git a/src/composite.c b/src/composite.c index ee4195572a5..47cac715086 100644 --- a/src/composite.c +++ b/src/composite.c @@ -674,7 +674,7 @@ composition_gstring_put_cache (Lisp_Object gstring, ptrdiff_t len) len = j; } - lint_assume (len <= TYPE_MAXIMUM (ptrdiff_t) - 2); + assume (len <= TYPE_MAXIMUM (ptrdiff_t) - 2); copy = Fmake_vector (make_number (len + 2), Qnil); LGSTRING_SET_HEADER (copy, Fcopy_sequence (header)); for (i = 0; i < len; i++) diff --git a/src/conf_post.h b/src/conf_post.h index 30a4a5a9422..5f6cf0eca37 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -248,16 +248,24 @@ extern void _DebPrint (const char *fmt, ...); # define FLEXIBLE_ARRAY_MEMBER 1 #endif +/* assume(cond) tells the compiler (and lint) that a certain condition + * will always hold, and that it should optimize (or check) accordingly. */ +#if defined lint +# define assume(cond) ((cond) ? (void) 0 : abort ()) +#elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || __GNUC__ > 4 +# define assume(cond) ((x) || (__builtin_unreachable(), 0)) +#elif defined __MSC_VER +# define assume(cond) __assume ((cond)) +#else +# define assume(cond) (0 && (cond)) +#endif + /* Use this to suppress gcc's `...may be used before initialized' warnings. */ #ifdef lint /* Use CODE only if lint checking is in effect. */ # define IF_LINT(Code) Code -/* Assume that the expression COND is true. This differs in intent - from 'assert', as it is a message from the programmer to the compiler. */ -# define lint_assume(cond) ((cond) ? (void) 0 : abort ()) #else # define IF_LINT(Code) /* empty */ -# define lint_assume(cond) ((void) (0 && (cond))) #endif /* conf_post.h ends here */ diff --git a/src/data.c b/src/data.c index 51b0266eca1..5a05e0652ad 100644 --- a/src/data.c +++ b/src/data.c @@ -54,6 +54,7 @@ Lisp_Object Qintegerp, Qwholenump, Qsymbolp, Qlistp, Qconsp; static Lisp_Object Qnatnump; Lisp_Object Qstringp, Qarrayp, Qsequencep, Qbufferp; Lisp_Object Qchar_or_string_p, Qmarkerp, Qinteger_or_marker_p, Qvectorp; +Lisp_Object Qbool_vector_p; Lisp_Object Qbuffer_or_string_p; static Lisp_Object Qkeywordp, Qboundp; Lisp_Object Qfboundp; @@ -2956,6 +2957,457 @@ lowercase l) for small endian machines. */) return make_number (order); } +/* Because we round up the bool vector allocate size to word_size + units, we can safely read past the "end" of the vector in the + operations below. These extra bits are always zero. Also, we + always allocate bool vectors with at least one size_t of storage so + that we don't have to special-case empty bit vectors. */ + +static inline +size_t +bool_vector_spare_mask (ptrdiff_t nr_bits) +{ + eassert_and_assume (nr_bits > 0); + return (((size_t) 1) << (nr_bits % BITS_PER_SIZE_T)) - 1; +} + +#if __MSC_VER >= 1500 && (defined _M_IX86 || defined _M_X64) +# define USE_MSC_POPCOUNT +#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# define USE_GCC_POPCOUNT +#else +# define NEED_GENERIC_POPCOUNT +#endif + +#ifdef USE_MSC_POPCOUNT +#define NEED_GENERIC_POPCOUNT +#endif + +#ifdef NEED_GENERIC_POPCOUNT +static inline +unsigned int +popcount_size_t_generic (size_t val) +{ + unsigned short j; + unsigned int count = 0; + + for (j = 0; j < BITS_PER_SIZE_T; ++j) + count += !!((((size_t) 1) << j) & val); + + return count; +} +#endif + +#ifdef USE_MSC_POPCOUNT +static inline +unsigned int +popcount_size_t_msc (size_t val) +{ + unsigned int count; + +#pragma intrinsic __cpuid + /* While gcc falls back to its own generic code if the machine on + which it's running doesn't support popcount, we need to perform the + detection and fallback ourselves when compiling with Microsoft's + compiler. */ + + static enum { + popcount_unknown_support, + popcount_use_generic, + popcount_use_intrinsic + } popcount_state; + + if (popcount_state == popcount_unknown_support) + { + int cpu_info[4]; + __cpuid (cpu_info, 1); + if (cpu_info[2] & (1<<23)) /* See MSDN. */ + popcount_state = popcount_use_intrinsic; + else + popcount_state = popcount_use_generic; + } + + if (popcount_state == popcount_use_intrinsic) + { +# if BITS_PER_SIZE_T == 64 +# pragma intrinsic __popcnt64 + count = __popcnt64 (val); +# else +# pragma intrinsic __popcnt + count = __popcnt (val); +# endif + } + else + count = popcount_size_t_generic (val); + + return count; +} +#endif /* USE_MSC_POPCOUNT */ + +#ifdef USE_GCC_POPCOUNT +static inline +unsigned int +popcount_size_t_gcc (size_t val) +{ +# if BITS_PER_SIZE_T == 64 + return __builtin_popcountll (val); +# else + return __builtin_popcount (val); +# endif +} +#endif /* USE_GCC_POPCOUNT */ + +static inline +unsigned int +popcount_size_t(size_t val) +{ +#if defined USE_MSC_POPCOUNT + return popcount_size_t_msc (val); +#elif defined USE_GCC_POPCOUNT + return popcount_size_t_gcc (val); +#else + return popcount_size_t_generic (val); + #endif +} + +enum bool_vector_op { bool_vector_exclusive_or, + bool_vector_union, + bool_vector_intersection, + bool_vector_set_difference, + bool_vector_subsetp }; + +static inline +Lisp_Object +bool_vector_binop_driver (Lisp_Object op1, + Lisp_Object op2, + Lisp_Object dest, + enum bool_vector_op op) +{ + EMACS_INT nr_bits; + size_t *adata, *bdata, *cdata; + ptrdiff_t i; + size_t changed = 0; + size_t mword; + ptrdiff_t nr_words; + + CHECK_BOOL_VECTOR (op1); + CHECK_BOOL_VECTOR (op2); + + nr_bits = min (XBOOL_VECTOR (op1)->size, + XBOOL_VECTOR (op2)->size); + + if (NILP (dest)) + { + dest = Fmake_bool_vector (make_number (nr_bits), Qnil); + changed = 1; + } + else + { + CHECK_BOOL_VECTOR (dest); + nr_bits = min (nr_bits, XBOOL_VECTOR (dest)->size); + } + + eassert_and_assume (nr_bits >= 0); + nr_words = ROUNDUP(nr_bits, BITS_PER_SIZE_T) / BITS_PER_SIZE_T; + + adata = (size_t*) XBOOL_VECTOR (dest)->data; + bdata = (size_t*) XBOOL_VECTOR (op1)->data; + cdata = (size_t*) XBOOL_VECTOR (op2)->data; + i = 0; + do + { + if (op == bool_vector_exclusive_or) + mword = bdata[i] ^ cdata[i]; + else if (op == bool_vector_union || op == bool_vector_subsetp) + mword = bdata[i] | cdata[i]; + else if (op == bool_vector_intersection) + mword = bdata[i] & cdata[i]; + else if (op == bool_vector_set_difference) + mword = bdata[i] &~ cdata[i]; + else + abort (); + + changed |= adata[i] ^ mword; + + if (op != bool_vector_subsetp) + adata[i] = mword; + + i += 1; + } + while (i < nr_words); + return changed ? dest : Qnil; +} + +/* Compute the number of trailing zero bits in val. If val is zero, + return the number of bits in val. */ +static inline +unsigned int +count_trailing_zero_bits (size_t val) +{ + if (val == 0) + return CHAR_BIT * sizeof (val); + +#if defined USE_GCC_POPCOUNT && BITS_PER_SIZE_T == 64 + return __builtin_ctzll (val); +#elif defined USE_GCC_POPCOUNT && BITS_PER_SIZE_T == 32 + return __builtin_ctz (val); +#elif __MSC_VER && BITS_PER_SIZE_T == 64 +# pragma intrinsic _BitScanForward64 + { + /* No support test needed: support since 386. */ + unsigned long result; + _BitScanForward64 (&result, val); + return (unsigned int) result; + } +#elif __MSC_VER && BITS_PER_SIZE_T == 32 +# pragma intrinsic _BitScanForward + { + /* No support test needed: support since 386. */ + unsigned long result; + _BitScanForward (&result, val); + return (unsigned int) result; + } +#else + { + unsigned int count; + count = 0; + for(val = ~val; val & 1; val >>= 1) + ++count; + + return count; + } +#endif +} + +static inline +size_t +size_t_to_host_endian (size_t val) +{ +#ifdef WORDS_BIGENDIAN +# if BITS_PER_SIZE_T == 64 + return swap64 (val); +# else + return swap32 (val); +# endif +#else + return val; +#endif +} + +DEFUN ("bool-vector-exclusive-or", Fbool_vector_exclusive_or, + Sbool_vector_exclusive_or, 2, 3, 0, + doc: /* Compute C = A ^ B, bitwise exclusive or. +A, B, and C must be bool vectors. If C is nil, allocate a new bool +vector in which to store the result. Return the destination vector if +it changed or nil otherwise. */ + ) + (Lisp_Object a, Lisp_Object b, Lisp_Object c) +{ + return bool_vector_binop_driver (a, b, c, bool_vector_exclusive_or); +} + +DEFUN ("bool-vector-union", Fbool_vector_union, + Sbool_vector_union, 2, 3, 0, + doc: /* Compute C = A | B, bitwise or. +A, B, and C must be bool vectors. If C is nil, allocate a new bool +vector in which to store the result. Return the destination vector if +it changed or nil otherwise. */) + (Lisp_Object a, Lisp_Object b, Lisp_Object c) +{ + return bool_vector_binop_driver (a, b, c, bool_vector_union); +} + +DEFUN ("bool-vector-intersection", Fbool_vector_intersection, + Sbool_vector_intersection, 2, 3, 0, + doc: /* Compute C = A & B, bitwise and. +A, B, and C must be bool vectors. If C is nil, allocate a new bool +vector in which to store the result. Return the destination vector if +it changed or nil otherwise. */) + (Lisp_Object a, Lisp_Object b, Lisp_Object c) +{ + return bool_vector_binop_driver (a, b, c, bool_vector_intersection); +} + +DEFUN ("bool-vector-set-difference", Fbool_vector_set_difference, + Sbool_vector_set_difference, 2, 3, 0, + doc: /* Compute C = A &~ B, set difference. +A, B, and C must be bool vectors. If C is nil, allocate a new bool +vector in which to store the result. Return the destination vector if +it changed or nil otherwise. */) + (Lisp_Object a, Lisp_Object b, Lisp_Object c) +{ + return bool_vector_binop_driver (a, b, c, bool_vector_set_difference); +} + +DEFUN ("bool-vector-subsetp", Fbool_vector_subsetp, + Sbool_vector_subsetp, 2, 2, 0, + doc: ) + (Lisp_Object a, Lisp_Object b) +{ + /* Like bool_vector_union, but doesn't modify b. */ + return bool_vector_binop_driver (b, a, b, bool_vector_subsetp); +} + +DEFUN ("bool-vector-not", Fbool_vector_not, + Sbool_vector_not, 1, 2, 0, + doc: /* Compute B = ~A. +B must be a bool vector. A must be a bool vector or nil. +If A is nil, allocate a new bool vector in which to store the result. +Return the destination vector. */) + (Lisp_Object a, Lisp_Object b) +{ + EMACS_INT nr_bits; + size_t *bdata, *adata; + ptrdiff_t i; + size_t mword; + + CHECK_BOOL_VECTOR (a); + nr_bits = XBOOL_VECTOR (a)->size; + + if (NILP (b)) + b = Fmake_bool_vector (make_number (nr_bits), Qnil); + else + { + CHECK_BOOL_VECTOR (b); + nr_bits = min (nr_bits, XBOOL_VECTOR (b)->size); + } + + bdata = (size_t*) XBOOL_VECTOR (b)->data; + adata = (size_t*) XBOOL_VECTOR (a)->data; + i = 0; + + eassert_and_assume (nr_bits >= 0); + + while (i < nr_bits / BITS_PER_SIZE_T) + { + bdata[i] = ~adata[i]; + i += 1; + } + + if (nr_bits % BITS_PER_SIZE_T) + { + mword = size_t_to_host_endian (adata[i]); + mword = ~mword; + mword &= bool_vector_spare_mask (nr_bits); + bdata[i] = size_t_to_host_endian (mword); + } + + return b; +} + +DEFUN ("bool-vector-count-matches", Fbool_vector_count_matches, + Sbool_vector_count_matches, 2, 2, 0, + doc: /* Count how many elements in A equal B. +A must be a bool vector. B is a generalized bool. */) + (Lisp_Object a, Lisp_Object b) +{ + ptrdiff_t count; + EMACS_INT nr_bits; + size_t *adata; + size_t match; + ptrdiff_t i; + + CHECK_BOOL_VECTOR (a); + + nr_bits = XBOOL_VECTOR (a)->size; + count = 0; + match = NILP (b) ? (size_t) -1 : 0; + adata = (size_t*) XBOOL_VECTOR (a)->data; + + eassert_and_assume (nr_bits >= 0); + + for(i = 0; i < nr_bits / BITS_PER_SIZE_T; ++i) + count += popcount_size_t (adata[i] ^ match); + + /* Mask out trailing parts of final mword. */ + if (nr_bits % BITS_PER_SIZE_T) + { + size_t mword = adata[i] ^ match; + mword = size_t_to_host_endian (mword); + count += popcount_size_t (mword & bool_vector_spare_mask (nr_bits)); + } + + return make_number (count); +} + +DEFUN ("bool-vector-count-matches-at", + Fbool_vector_count_matches_at, + Sbool_vector_count_matches_at, 3, 3, 0, + doc: /* Count how many consecutive elements in A equal B at i. +A must be a bool vector. B is a generalized boolean. i is an +index into the vector.*/) + (Lisp_Object a, Lisp_Object b, Lisp_Object i) +{ + ptrdiff_t count; + EMACS_INT nr_bits; + ptrdiff_t offset; + size_t *adata; + size_t twiddle; + size_t mword; /* Machine word. */ + ptrdiff_t pos; + ptrdiff_t nr_words; + + CHECK_BOOL_VECTOR (a); + CHECK_NATNUM (i); + + nr_bits = XBOOL_VECTOR (a)->size; + if (XFASTINT (i) > nr_bits) /* Allow one past the end for convenience */ + args_out_of_range (a, i); + + adata = (size_t*) XBOOL_VECTOR (a)->data; + + assume (nr_bits >= 0); + nr_words = ROUNDUP (nr_bits, BITS_PER_SIZE_T) / BITS_PER_SIZE_T; + + pos = XFASTINT (i) / BITS_PER_SIZE_T; + offset = XFASTINT (i) % BITS_PER_SIZE_T; + count = 0; + + /* By XORing with twiddle, we transform the problem of "count + consecutive equal values" into "count the zero bits". The latter + operation usually has hardware support. */ + twiddle = NILP (b) ? 0 : (size_t) -1; + + /* Scan the remainder of the mword at the current offset. */ + if (pos < nr_words && offset != 0) + { + mword = size_t_to_host_endian (adata[pos]); + mword ^= twiddle; + mword >>= offset; + count = count_trailing_zero_bits (mword); + count = min (count, BITS_PER_SIZE_T - offset); + pos += 1; + if (count + offset < BITS_PER_SIZE_T) + return make_number (count); + } + + /* Scan whole words until we either reach the end of the vector or + find an mword that doesn't completely match. twiddle is + endian-independent. */ + while (pos < nr_words && adata[pos] == twiddle) + { + count += BITS_PER_SIZE_T; + ++pos; + } + + if (pos < nr_words) + { + /* If we stopped because of a mismatch, see how many bits match + in the current mword. */ + mword = size_t_to_host_endian (adata[pos]); + mword ^= twiddle; + count += count_trailing_zero_bits (mword); + } + else if (nr_bits % BITS_PER_SIZE_T != 0) + { + /* If we hit the end, we might have overshot our count. Reduce + the total by the number of spare bits at the end of the + vector. */ + count -= BITS_PER_SIZE_T - nr_bits % BITS_PER_SIZE_T; + } + + return make_number (count); +} void @@ -3005,6 +3457,7 @@ syms_of_data (void) DEFSYM (Qsequencep, "sequencep"); DEFSYM (Qbufferp, "bufferp"); DEFSYM (Qvectorp, "vectorp"); + DEFSYM (Qbool_vector_p, "bool-vector-p"); DEFSYM (Qchar_or_string_p, "char-or-string-p"); DEFSYM (Qmarkerp, "markerp"); DEFSYM (Qbuffer_or_string_p, "buffer-or-string-p"); @@ -3222,6 +3675,15 @@ syms_of_data (void) defsubr (&Ssubr_arity); defsubr (&Ssubr_name); + defsubr (&Sbool_vector_exclusive_or); + defsubr (&Sbool_vector_union); + defsubr (&Sbool_vector_intersection); + defsubr (&Sbool_vector_set_difference); + defsubr (&Sbool_vector_not); + defsubr (&Sbool_vector_subsetp); + defsubr (&Sbool_vector_count_matches); + defsubr (&Sbool_vector_count_matches_at); + set_symbol_function (Qwholenump, XSYMBOL (Qnatnump)->function); DEFVAR_LISP ("most-positive-fixnum", Vmost_positive_fixnum, diff --git a/src/dispnew.c b/src/dispnew.c index 5bdc84f1b1d..ed7349a4507 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -4451,7 +4451,7 @@ update_frame_1 (struct frame *f, bool force_p, bool inhibit_id_p) } } - lint_assume (0 <= FRAME_LINES (f)); + assume (0 <= FRAME_LINES (f)); pause_p = 0 < i && i < FRAME_LINES (f) - 1; /* Now just clean up termcap drivers and set cursor, etc. */ diff --git a/src/ftfont.c b/src/ftfont.c index 3636f86f5c4..4e58d83fd64 100644 --- a/src/ftfont.c +++ b/src/ftfont.c @@ -2425,7 +2425,7 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font, } len = i; - lint_assume (len <= STRING_BYTES_BOUND); + assume (len <= STRING_BYTES_BOUND); if (with_variation_selector) { diff --git a/src/image.c b/src/image.c index e3159533664..e429830cc96 100644 --- a/src/image.c +++ b/src/image.c @@ -7523,7 +7523,7 @@ gif_load (struct frame *f, struct image *img) { while (subimg_height <= row) { - lint_assume (pass < 3); + assume (pass < 3); row = interlace_start[++pass]; } diff --git a/src/intervals.c b/src/intervals.c index 66b486e1422..69a33867283 100644 --- a/src/intervals.c +++ b/src/intervals.c @@ -1405,7 +1405,7 @@ offset_intervals (struct buffer *buffer, ptrdiff_t start, ptrdiff_t length) start, length); else { - lint_assume (- TYPE_MAXIMUM (ptrdiff_t) <= length); + assume (- TYPE_MAXIMUM (ptrdiff_t) <= length); adjust_intervals_for_deletion (buffer, start, -length); } } diff --git a/src/lisp.h b/src/lisp.h index bd09cab5a75..0fffea57578 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -131,6 +131,13 @@ extern bool suppress_checking EXTERNALLY_VISIBLE; ? (void) 0 \ : die (# cond, __FILE__, __LINE__)) #endif /* ENABLE_CHECKING */ + +/* When checking is enabled, identical to eassert. When checking is + * disabled, instruct the compiler (when the compiler has such + * capability) to assume that cond is true and optimize + * accordingly. */ +#define eassert_and_assume(cond) (eassert (cond), assume (cond)) + /* Use the configure flag --enable-check-lisp-object-type to make Lisp_Object use a struct type instead of the default int. The flag @@ -730,6 +737,7 @@ extern int char_table_translate (Lisp_Object, int); extern Lisp_Object Qarrayp, Qbufferp, Qbuffer_or_string_p, Qchar_table_p; extern Lisp_Object Qconsp, Qfloatp, Qintegerp, Qlambda, Qlistp, Qmarkerp, Qnil; extern Lisp_Object Qnumberp, Qstringp, Qsymbolp, Qvectorp; +extern Lisp_Object Qbool_vector_p; extern Lisp_Object Qvector_or_char_table_p, Qwholenump; extern Lisp_Object Qwindow; extern Lisp_Object Ffboundp (Lisp_Object); @@ -2359,6 +2367,11 @@ CHECK_VECTOR (Lisp_Object x) CHECK_TYPE (VECTORP (x), Qvectorp, x); } INLINE void +CHECK_BOOL_VECTOR (Lisp_Object x) +{ + CHECK_TYPE (BOOL_VECTOR_P (x), Qbool_vector_p, x); +} +INLINE void CHECK_VECTOR_OR_STRING (Lisp_Object x) { CHECK_TYPE (VECTORP (x) || STRINGP (x), Qarrayp, x); @@ -4347,6 +4360,43 @@ functionp (Lisp_Object object) return 0; } +INLINE +uint16_t +swap16 (uint16_t val) +{ + return (val << 8) | (val & 0xFF); +} + +INLINE +uint32_t +swap32 (uint32_t val) +{ + uint32_t low = swap16 (val & 0xFFFF); + uint32_t high = swap16 (val >> 16); + return (low << 16) | high; +} + +#ifdef UINT64_MAX +INLINE +uint64_t +swap64 (uint64_t val) +{ + uint64_t low = swap32 (val & 0xFFFFFFFF); + uint64_t high = swap32 (val >> 32); + return (low << 32) | high; +} +#endif + +#if ((SIZE_MAX >> 31) >> 1) & 1 +# define BITS_PER_SIZE_T 64 +#else +# define BITS_PER_SIZE_T 32 +#endif + +/* Round x to the next multiple of y. Does not overflow. Evaluates + arguments repeatedly. */ +#define ROUNDUP(x,y) ((y)*((x)/(y) + ((x)%(y)!=0))) + INLINE_HEADER_END #endif /* EMACS_LISP_H */ diff --git a/src/macfont.m b/src/macfont.m index 2a6d219d059..ab5029743ef 100644 --- a/src/macfont.m +++ b/src/macfont.m @@ -2817,7 +2817,7 @@ So we use CTFontDescriptorCreateMatchingFontDescriptor (no } len = i; - lint_assume (len <= TYPE_MAXIMUM (EMACS_INT) - 2); + assume (len <= TYPE_MAXIMUM (EMACS_INT) - 2); if (INT_MAX / 2 < len) memory_full (SIZE_MAX); diff --git a/src/ralloc.c b/src/ralloc.c index 5f25ef2c320..5b7d6a512d7 100644 --- a/src/ralloc.c +++ b/src/ralloc.c @@ -85,7 +85,7 @@ static int extra_bytes; /* Macros for rounding. Note that rounding to any value is possible by changing the definition of PAGE. */ #define PAGE (getpagesize ()) -#define ROUNDUP(size) (((size_t) (size) + page_size - 1) \ +#define PAGE_ROUNDUP(size) (((size_t) (size) + page_size - 1) \ & ~((size_t) (page_size - 1))) #define MEM_ALIGN sizeof (double) @@ -281,7 +281,7 @@ obtain (void *address, size_t size) Get some extra, so we can come here less often. */ get = size + extra_bytes - already_available; - get = (char *) ROUNDUP ((char *) last_heap->end + get) + get = (char *) PAGE_ROUNDUP ((char *) last_heap->end + get) - (char *) last_heap->end; if (real_morecore (get) != last_heap->end) @@ -344,7 +344,7 @@ relinquish (void) else { excess = ((char *) last_heap->end - - (char *) ROUNDUP ((char *) last_heap->end - excess)); + - (char *) PAGE_ROUNDUP ((char *) last_heap->end - excess)); /* If the system doesn't want that much memory back, leave the end of the last heap unchanged to reflect that. This can occur if break_value is still within the original @@ -768,9 +768,9 @@ r_alloc_sbrk (ptrdiff_t size) not always find a space which is contiguous to the previous. */ void *new_bloc_start; heap_ptr h = first_heap; - size_t get = ROUNDUP (size); + size_t get = PAGE_ROUNDUP (size); - address = (void *) ROUNDUP (virtual_break_value); + address = (void *) PAGE_ROUNDUP (virtual_break_value); /* Search the list upward for a heap which is large enough. */ while ((char *) h->end < (char *) MEM_ROUNDUP ((char *) address + get)) @@ -778,7 +778,7 @@ r_alloc_sbrk (ptrdiff_t size) h = h->next; if (h == NIL_HEAP) break; - address = (void *) ROUNDUP (h->start); + address = (void *) PAGE_ROUNDUP (h->start); } /* If not found, obtain more space. */ @@ -790,9 +790,9 @@ r_alloc_sbrk (ptrdiff_t size) return 0; if (first_heap == last_heap) - address = (void *) ROUNDUP (virtual_break_value); + address = (void *) PAGE_ROUNDUP (virtual_break_value); else - address = (void *) ROUNDUP (last_heap->start); + address = (void *) PAGE_ROUNDUP (last_heap->start); h = last_heap; } @@ -1054,7 +1054,7 @@ r_alloc_check (void) for (h = first_heap; h; h = h->next) { assert (h->prev == ph); - assert ((void *) ROUNDUP (h->end) == h->end); + assert ((void *) PAGE_ROUNDUP (h->end) == h->end); #if 0 /* ??? The code in ralloc.c does not really try to ensure the heap start has any sort of alignment. Perhaps it should. */ @@ -1190,7 +1190,7 @@ r_alloc_init (void) if (break_value == NULL) emacs_abort (); - extra_bytes = ROUNDUP (50000); + extra_bytes = PAGE_ROUNDUP (50000); #endif #ifdef DOUG_LEA_MALLOC @@ -1212,7 +1212,7 @@ r_alloc_init (void) #endif #ifndef SYSTEM_MALLOC - first_heap->end = (void *) ROUNDUP (first_heap->start); + first_heap->end = (void *) PAGE_ROUNDUP (first_heap->start); /* The extra call to real_morecore guarantees that the end of the address space is a multiple of page_size, even if page_size is diff --git a/src/xsettings.c b/src/xsettings.c index bdf9f2876be..8fe82fec74b 100644 --- a/src/xsettings.c +++ b/src/xsettings.c @@ -336,9 +336,6 @@ get_prop_window (struct x_display_info *dpyinfo) XUngrabServer (dpy); } -#define SWAP32(nr) (((nr) << 24) | (((nr) << 8) & 0xff0000) \ - | (((nr) >> 8) & 0xff00) | ((nr) >> 24)) -#define SWAP16(nr) (((nr) << 8) | ((nr) >> 8)) #define PAD(nr) (((nr) + 3) & ~3) /* Parse xsettings and extract those that deal with Xft. @@ -408,7 +405,7 @@ parse_settings (unsigned char *prop, if (bytes < 12) return BadLength; memcpy (&n_settings, prop+8, 4); - if (my_bo != that_bo) n_settings = SWAP32 (n_settings); + if (my_bo != that_bo) n_settings = swap32 (n_settings); bytes_parsed = 12; memset (settings, 0, sizeof (*settings)); @@ -430,7 +427,7 @@ parse_settings (unsigned char *prop, memcpy (&nlen, prop+bytes_parsed, 2); bytes_parsed += 2; - if (my_bo != that_bo) nlen = SWAP16 (nlen); + if (my_bo != that_bo) nlen = swap16 (nlen); if (bytes_parsed+nlen > bytes) return BadLength; to_cpy = nlen > 127 ? 127 : nlen; memcpy (name, prop+bytes_parsed, to_cpy); @@ -457,7 +454,7 @@ parse_settings (unsigned char *prop, if (want_this) { memcpy (&ival, prop+bytes_parsed, 4); - if (my_bo != that_bo) ival = SWAP32 (ival); + if (my_bo != that_bo) ival = swap32 (ival); } bytes_parsed += 4; break; @@ -466,7 +463,7 @@ parse_settings (unsigned char *prop, if (bytes_parsed+4 > bytes) return BadLength; memcpy (&vlen, prop+bytes_parsed, 4); bytes_parsed += 4; - if (my_bo != that_bo) vlen = SWAP32 (vlen); + if (my_bo != that_bo) vlen = swap32 (vlen); if (want_this) { to_cpy = vlen > 127 ? 127 : vlen; diff --git a/test/ChangeLog b/test/ChangeLog index 14d819c7f77..c8785ab4fec 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,21 @@ +2013-09-22 Daniel Colascione + + * automated/data-test.el: + (bool-vector-count-matches-all-0-nil) + (bool-vector-count-matches-all-0-t) + (bool-vector-count-matches-1-il,bool-vector-count-matches-1-t) + (bool-vector-count-matches-at,bool-vector-intersection-op) + (bool-vector-union-op,bool-vector-xor-op) + (bool-vector-set-difference-op) + (bool-vector-change-detection,bool-vector-not): New tests. + (mock-bool-vector-count-matches-at) + (test-bool-vector-bv-from-hex-string) + (test-bool-vector-to-hex-string) + (test-bool-vector-count-matches-at-tc) + (test-bool-vector-apply-mock-op) + (test-bool-vector-binop): New helper functions. + (bool-vector-test-vectors): New testcase data. + 2013-09-20 Ryan (tiny change) * automated/advice-tests.el (advice-test-called-interactively-p-around) diff --git a/test/automated/data-tests.el b/test/automated/data-tests.el index 2298fa3fe71..d79e1643848 100644 --- a/test/automated/data-tests.el +++ b/test/automated/data-tests.el @@ -21,6 +21,9 @@ ;;; Code: +(require 'cl-lib) +(eval-when-compile (require 'cl)) + (ert-deftest data-tests-= () (should-error (=)) (should (= 1)) @@ -71,5 +74,186 @@ ;; Short circuits before getting to bad arg (should-not (>= 8 9 'foo))) -;;; data-tests.el ends here +;; Bool vector tests. Compactly represent bool vectors as hex +;; strings. +(ert-deftest bool-vector-count-matches-all-0-nil () + (cl-loop for sz in '(0 45 1 64 9 344) + do (let* ((bv (make-bool-vector sz nil))) + (should + (eql + (bool-vector-count-matches bv nil) + sz))))) + +(ert-deftest bool-vector-count-matches-all-0-t () + (cl-loop for sz in '(0 45 1 64 9 344) + do (let* ((bv (make-bool-vector sz nil))) + (should + (eql + (bool-vector-count-matches bv t) + 0))))) + +(ert-deftest bool-vector-count-matches-1-nil () + (let* ((bv (make-bool-vector 45 nil))) + (aset bv 40 t) + (aset bv 0 t) + (should + (eql + (bool-vector-count-matches bv t) + 2))) + ) + +(ert-deftest bool-vector-count-matches-1-t () + (let* ((bv (make-bool-vector 45 nil))) + (aset bv 40 t) + (aset bv 0 t) + (should + (eql + (bool-vector-count-matches bv nil) + 43)))) + +(defun mock-bool-vector-count-matches-at (a b i) + (loop for i from i below (length a) + while (eq (aref a i) b) + sum 1)) + +(defun test-bool-vector-bv-from-hex-string (desc) + (let (bv nchars nibbles) + (dolist (c (string-to-list desc)) + (push (string-to-number + (char-to-string c) + 16) + nibbles)) + (setf bv (make-bool-vector (* 4 (length nibbles)) nil)) + (let ((i 0)) + (dolist (n (nreverse nibbles)) + (dotimes (_ 4) + (aset bv i (> (logand 1 n) 0)) + (incf i) + (setf n (lsh n -1))))) + bv)) + +(defun test-bool-vector-to-hex-string (bv) + (let (nibbles (v (cl-coerce bv 'list))) + (while v + (push (logior + (lsh (if (nth 0 v) 1 0) 0) + (lsh (if (nth 1 v) 1 0) 1) + (lsh (if (nth 2 v) 1 0) 2) + (lsh (if (nth 3 v) 1 0) 3)) + nibbles) + (setf v (nthcdr 4 v))) + (mapconcat (lambda (n) (format "%X" n)) + (nreverse nibbles) + ""))) + +(defun test-bool-vector-count-matches-at-tc (desc) + "Run a test case for bool-vector-count-matches-at. +DESC is a string describing the test. It is a sequence of +hexadecimal digits describing the bool vector. We exhaustively +test all counts at all possible positions in the vector by +comparing the subr with a much slower lisp implementation." + (let ((bv (test-bool-vector-bv-from-hex-string desc))) + (loop + for lf in '(nil t) + do (loop + for pos from 0 upto (length bv) + for cnt = (mock-bool-vector-count-matches-at bv lf pos) + for rcnt = (bool-vector-count-matches-at bv lf pos) + unless (eql cnt rcnt) + do (error "FAILED testcase %S %3S %3S %3S" + pos lf cnt rcnt))))) + +(defconst bool-vector-test-vectors +'("" + "0" + "F" + "0F" + "F0" + "00000000000000000000000000000FFFFF0000000" + "44a50234053fba3340000023444a50234053fba33400000234" + "12341234123456123412346001234123412345612341234600" + "44a50234053fba33400000234" + "1234123412345612341234600" + "44a50234053fba33400000234" + "1234123412345612341234600" + "44a502340" + "123412341" + "0000000000000000000000000" + "FFFFFFFFFFFFFFFF1")) + +(ert-deftest bool-vector-count-matches-at () + (mapc #'test-bool-vector-count-matches-at-tc + bool-vector-test-vectors)) + +(defun test-bool-vector-apply-mock-op (mock a b c) + "Compute (slowly) the correct result of a bool-vector set operation." + (let (changed nv) + (assert (eql (length b) (length c))) + (if a (setf nv a) + (setf a (make-bool-vector (length b) nil)) + (setf changed t)) + + (loop for i below (length b) + for mockr = (funcall mock + (if (aref b i) 1 0) + (if (aref c i) 1 0)) + for r = (not (= 0 mockr)) + do (progn + (unless (eq (aref a i) r) + (setf changed t)) + (setf (aref a i) r))) + (if changed a))) + +(defun test-bool-vector-binop (mock real) + "Test a binary set operation." + (loop for s1 in bool-vector-test-vectors + for bv1 = (test-bool-vector-bv-from-hex-string s1) + for vecs2 = (cl-remove-if-not + (lambda (x) (eql (length x) (length s1))) + bool-vector-test-vectors) + do (loop for s2 in vecs2 + for bv2 = (test-bool-vector-bv-from-hex-string s2) + for mock-result = (test-bool-vector-apply-mock-op + mock nil bv1 bv2) + for real-result = (funcall real bv1 bv2) + do (progn + (should (equal mock-result real-result)))))) + +(ert-deftest bool-vector-intersection-op () + (test-bool-vector-binop + #'logand + #'bool-vector-intersection)) + +(ert-deftest bool-vector-union-op () + (test-bool-vector-binop + #'logior + #'bool-vector-union)) + +(ert-deftest bool-vector-xor-op () + (test-bool-vector-binop + #'logxor + #'bool-vector-exclusive-or)) + +(ert-deftest bool-vector-set-difference-op () + (test-bool-vector-binop + (lambda (a b) (logand a (lognot b))) + #'bool-vector-set-difference)) + +(ert-deftest bool-vector-change-detection () + (let* ((vc1 (test-bool-vector-bv-from-hex-string "abcdef")) + (vc2 (test-bool-vector-bv-from-hex-string "012345")) + (vc3 (make-bool-vector (length vc1) nil)) + (c1 (bool-vector-union vc1 vc2 vc3)) + (c2 (bool-vector-union vc1 vc2 vc3))) + (should (equal c1 (test-bool-vector-apply-mock-op + #'logior + nil + vc1 vc2))) + (should (not c2)))) + +(ert-deftest bool-vector-not () + (let* ((v1 (test-bool-vector-bv-from-hex-string "FFFF3")) + (v2 (test-bool-vector-bv-from-hex-string "0000C")) + (v3 (bool-vector-not v1))) + (should (equal v2 v3)))) From cd9356f211b24948a934ce08b60f61301d866835 Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Sun, 22 Sep 2013 01:48:21 -0800 Subject: [PATCH 289/321] Suppress unused variable warning when compiling without a window system. --- src/ChangeLog | 5 +++++ src/xfns.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 7c3a29c5d86..d679a0ae9c9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-22 Daniel Colascione + + * xfns.c (x_get_monitor_attributes): Suppress unused variable + warning when compiling without a window system. + 2013-09-22 Daniel Colascione * data.c (Qbool_vector_p): New symbol. diff --git a/src/xfns.c b/src/xfns.c index 38aa5b3bbfe..2b895642942 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -3949,6 +3949,8 @@ x_get_monitor_attributes (struct x_display_info *dpyinfo) Lisp_Object attributes_list = Qnil; Display *dpy = dpyinfo->display; + (void) dpy; /* Suppress unused variable warning. */ + #ifdef HAVE_XRANDR int xrr_event_base, xrr_error_base; bool xrr_ok = false; From 8fef36c6ffd85e46485d91146eddc605fa366ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Sun, 22 Sep 2013 13:07:17 +0200 Subject: [PATCH 290/321] * conf_post.h (assume): Fix compiler error: x shall be cond. --- src/ChangeLog | 4 ++++ src/conf_post.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index d679a0ae9c9..e6901fd8680 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2013-09-22 Jan Djärv + + * conf_post.h (assume): Fix compiler error: x shall be cond. + 2013-09-22 Daniel Colascione * xfns.c (x_get_monitor_attributes): Suppress unused variable diff --git a/src/conf_post.h b/src/conf_post.h index 5f6cf0eca37..14af38ce70b 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -253,7 +253,7 @@ extern void _DebPrint (const char *fmt, ...); #if defined lint # define assume(cond) ((cond) ? (void) 0 : abort ()) #elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || __GNUC__ > 4 -# define assume(cond) ((x) || (__builtin_unreachable(), 0)) +# define assume(cond) ((cond) || (__builtin_unreachable(), 0)) #elif defined __MSC_VER # define assume(cond) __assume ((cond)) #else From 7186ba60458a649c36074c97b400c1b727af3100 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Sun, 22 Sep 2013 20:23:20 +0800 Subject: [PATCH 291/321] * files.el (interpreter-mode-alist): Add octave. --- lisp/ChangeLog | 4 ++++ lisp/files.el | 1 + 2 files changed, 5 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cf5e3e1f061..0cc066b010e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-09-22 Leo Liu + + * files.el (interpreter-mode-alist): Add octave. + 2013-09-21 Alan Mackenzie C++: fontify identifier in declaration following "public:" correctly. diff --git a/lisp/files.el b/lisp/files.el index 1a268200289..ab62be295f0 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2455,6 +2455,7 @@ and `magic-mode-alist', which determines modes based on file contents.") ("wishx?" . tcl-mode) ("tcl\\(sh\\)?" . tcl-mode) ("expect" . tcl-mode) + ("octave" . octave-mode) ("scm" . scheme-mode) ("[acjkwz]sh" . sh-mode) ("r?bash2?" . sh-mode) From 69b3debcd2359d53a074a781ac74101142c03191 Mon Sep 17 00:00:00 2001 From: Xue Fuqiao Date: Sun, 22 Sep 2013 20:49:53 +0800 Subject: [PATCH 292/321] * doc/lispref/nonascii.texi (Default Coding Systems): Typo fix. --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/nonascii.texi | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 921e54eb5c1..2fa3fc13e31 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2013-09-22 Xue Fuqiao + + * nonascii.texi (Default Coding Systems): Typo fix. + 2013-09-21 Xue Fuqiao * nonascii.texi (Coding System Basics): Add information about carriage-return. diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi index 6ae6fa1bf7c..94a7bdf1b23 100644 --- a/doc/lispref/nonascii.texi +++ b/doc/lispref/nonascii.texi @@ -1572,7 +1572,7 @@ the alist; otherwise it returns @code{nil}. If @var{operation} is @code{insert-file-contents}, the argument corresponding to the target may be a cons cell of the form -@code{(@var{filename} . @var{buffer})}). In that case, @var{filename} +@code{(@var{filename} . @var{buffer})}. In that case, @var{filename} is a file name to look up in @code{file-coding-system-alist}, and @var{buffer} is a buffer that contains the file's contents (not yet decoded). If @code{file-coding-system-alist} specifies a function to From fb83ea63a5db0fe6c20667532d1019a58d2fc1fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Sun, 22 Sep 2013 16:26:10 +0200 Subject: [PATCH 293/321] Fix compiler warnings from XCode 5.0 on OSX. * nsterm.m (setMarkedText:selectedRange:): (deleteWorkingText): * nsmenu.m (addDisplayItemWithImage:idx:tag:helpText:enabled:): * nsfont.m (ns_get_covering_families, ns_findfonts): Cast NSLog argument to unsigned long to avoid warning. (nsfont_draw): Use 0.25 instead of Fix2X (kATSItalicQDSkew). * process.c (wait_reading_process_output): Change int pnamelen to socklen_t. --- src/ChangeLog | 10 ++++++++++ src/nsfont.m | 10 ++++++---- src/nsmenu.m | 2 +- src/nsterm.m | 8 +++++--- src/process.c | 2 +- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e6901fd8680..a466047718f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,15 @@ 2013-09-22 Jan Djärv + * process.c (wait_reading_process_output): Change int pnamelen to + socklen_t. + + * nsterm.m (setMarkedText:selectedRange:): + (deleteWorkingText): + * nsmenu.m (addDisplayItemWithImage:idx:tag:helpText:enabled:): + * nsfont.m (ns_get_covering_families, ns_findfonts): Cast NSLog + argument to unsigned long to avoid warning. + (nsfont_draw): Use 0.25 instead of Fix2X (kATSItalicQDSkew). + * conf_post.h (assume): Fix compiler error: x shall be cond. 2013-09-22 Daniel Colascione diff --git a/src/nsfont.m b/src/nsfont.m index d9c8660f1cd..bd9a2acc983 100644 --- a/src/nsfont.m +++ b/src/nsfont.m @@ -526,7 +526,7 @@ but also for ascii (which causes unnecessary font substitution). */ } if (NSFONT_TRACE) - NSLog(@" returning %d families", [families count]); + NSLog(@" returning %lu families", (unsigned long)[families count]); return families; } @@ -564,8 +564,8 @@ but also for ascii (which causes unnecessary font substitution). */ matchingDescs = [fdesc matchingFontDescriptorsWithMandatoryKeys: fkeys]; if (NSFONT_TRACE) - NSLog(@"Got desc %@ and found %d matching fonts from it: ", fdesc, - [matchingDescs count]); + NSLog(@"Got desc %@ and found %lu matching fonts from it: ", fdesc, + (unsigned long)[matchingDescs count]); for (dEnum = [matchingDescs objectEnumerator]; (desc = [dEnum nextObject]);) { @@ -1249,7 +1249,9 @@ is false when (FROM > 0 || TO < S->nchars). */ CGContextSaveGState (gcontext); - fliptf.c = font->synthItal ? Fix2X (kATSItalicQDSkew) : 0.0; + // Used to be Fix2X (kATSItalicQDSkew), but Fix2X is deprecated + // and kATSItalicQDSkew is 0.25. + fliptf.c = font->synthItal ? 0.25 : 0.0; CGContextSetFont (gcontext, font->cgfont); CGContextSetFontSize (gcontext, font->size); diff --git a/src/nsmenu.m b/src/nsmenu.m index f9cd511efe9..8dde027e986 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -1239,7 +1239,7 @@ - (void) addDisplayItemWithImage: (EmacsImage *)img { /* 1) come up w/identifier */ NSString *identifier - = [NSString stringWithFormat: @"%u", [img hash]]; + = [NSString stringWithFormat: @"%lu", (unsigned long)[img hash]]; [activeIdentifiers addObject: identifier]; /* 2) create / reuse item */ diff --git a/src/nsterm.m b/src/nsterm.m index 5c9800f5416..65c67eb9b56 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -5208,8 +5208,10 @@ - (void)setMarkedText: (id)aString selectedRange: (NSRange)selRange NSString *str = [aString respondsToSelector: @selector (string)] ? [aString string] : aString; if (NS_KEYLOG) - NSLog (@"setMarkedText '%@' len =%d range %d from %d", str, [str length], - selRange.length, selRange.location); + NSLog (@"setMarkedText '%@' len =%lu range %lu from %lu", + str, (unsigned long)[str length], + (unsigned long)selRange.length, + (unsigned long)selRange.location); if (workingText != nil) [self deleteWorkingText]; @@ -5235,7 +5237,7 @@ - (void)deleteWorkingText if (workingText == nil) return; if (NS_KEYLOG) - NSLog(@"deleteWorkingText len =%d\n", [workingText length]); + NSLog(@"deleteWorkingText len =%lu\n", (unsigned long)[workingText length]); [workingText release]; workingText = nil; processingCompose = NO; diff --git a/src/process.c b/src/process.c index 0f53577331d..94f59942a61 100644 --- a/src/process.c +++ b/src/process.c @@ -4847,7 +4847,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, #else { struct sockaddr pname; - int pnamelen = sizeof (pname); + socklen_t pnamelen = sizeof (pname); /* If connection failed, getpeername will fail. */ xerrno = 0; From a84683fdd5dcb629a59807e78c413e21f21a186d Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Sun, 22 Sep 2013 18:34:52 -0800 Subject: [PATCH 294/321] Tell valgrind about conservative GC regions and suppress spurious warings. * alloc.c (USE_VALGRIND): New macro; on by default when ENABLE_CHECKING. (mark_maybe_object,mark_maybe_pointer) [USE_VALGRIND]: Mark conservatively-scanned regions valid for valgrind purposes. (valgrind_p) [USE_VALGRIND]: New variable. (init_alloc) [USE_VALGRIND]: Initialize valgrind_p. --- ChangeLog | 4 ++++ configure.ac | 2 ++ src/ChangeLog | 10 ++++++++++ src/alloc.c | 26 ++++++++++++++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/ChangeLog b/ChangeLog index ad6163cd7f0..67f3f926b9c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-09-23 Daniel Colascione + + * configure.ac: Check for valgrind headers. + 2013-09-20 Xue Fuqiao * INSTALL: New homepage of libtiff. diff --git a/configure.ac b/configure.ac index 8ff33e779a8..c63627d18d4 100644 --- a/configure.ac +++ b/configure.ac @@ -3696,6 +3696,8 @@ AC_SUBST(KRB5LIB) AC_SUBST(DESLIB) AC_SUBST(KRB4LIB) +AC_CHECK_HEADERS(valgrind/valgrind.h) + AC_CHECK_FUNCS_ONCE(tzset) AC_MSG_CHECKING(whether localtime caches TZ) AC_CACHE_VAL(emacs_cv_localtime_cache, diff --git a/src/ChangeLog b/src/ChangeLog index a466047718f..9905f61e8da 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2013-09-23 Daniel Colascione + + * alloc.c (USE_VALGRIND): New macro; on by default + when ENABLE_CHECKING. + (mark_maybe_object,mark_maybe_pointer) + [USE_VALGRIND]: Mark conservatively-scanned regions valid for + valgrind purposes. + (valgrind_p) [USE_VALGRIND]: New variable. + (init_alloc) [USE_VALGRIND]: Initialize valgrind_p. + 2013-09-22 Jan Djärv * process.c (wait_reading_process_output): Change int pnamelen to diff --git a/src/alloc.c b/src/alloc.c index 847b3c88bbe..564faa18aa8 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -45,6 +45,18 @@ along with GNU Emacs. If not, see . */ #include +#if (defined ENABLE_CHECKING && \ + defined HAVE_VALGRIND_VALGRIND_H && \ + !defined USE_VALGRIND) +# define USE_VALGRIND 1 +#endif + +#if USE_VALGRIND +#include +#include +static int valgrind_p; +#endif + /* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects. Doable only if GC_MARK_STACK. */ #if ! GC_MARK_STACK @@ -4327,6 +4339,11 @@ mark_maybe_object (Lisp_Object obj) void *po; struct mem_node *m; +#if USE_VALGRIND + if (valgrind_p) + VALGRIND_MAKE_MEM_DEFINED (&obj, sizeof (obj)); +#endif + if (INTEGERP (obj)) return; @@ -4395,6 +4412,11 @@ mark_maybe_pointer (void *p) { struct mem_node *m; +#if USE_VALGRIND + if (valgrind_p) + VALGRIND_MAKE_MEM_DEFINED (&p, sizeof (p)); +#endif + /* Quickly rule out some values which can't point to Lisp data. USE_LSB_TAG needs Lisp data to be aligned on multiples of GCALIGNMENT. Otherwise, assume that Lisp data is aligned on even addresses. */ @@ -6643,6 +6665,10 @@ init_alloc (void) #endif Vgc_elapsed = make_float (0.0); gcs_done = 0; + +#if USE_VALGRIND + valgrind_p = RUNNING_ON_VALGRIND; +#endif } void From 57b16162ceacfd46efd784f0693b210b85d82762 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Mon, 23 Sep 2013 04:58:02 +0200 Subject: [PATCH 295/321] Remove references to universal-argument-num-events. * lisp/autoarg.el (autoarg-kp-digit-argument): * lisp/electric.el (Electric-command-loop): * lisp/kmacro.el (kmacro-step-edit-insert): Do not set universal-argument-num-events. --- lisp/ChangeLog | 7 +++++++ lisp/autoarg.el | 1 - lisp/electric.el | 2 -- lisp/kmacro.el | 3 --- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0cc066b010e..f5cdbcbb9b2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2013-09-23 Juanma Barranquero + + * autoarg.el (autoarg-kp-digit-argument): + * electric.el (Electric-command-loop): + * kmacro.el (kmacro-step-edit-insert): + Do not set universal-argument-num-events. + 2013-09-22 Leo Liu * files.el (interpreter-mode-alist): Add octave. diff --git a/lisp/autoarg.el b/lisp/autoarg.el index 6878995454a..7501f09c773 100644 --- a/lisp/autoarg.el +++ b/lisp/autoarg.el @@ -75,7 +75,6 @@ (setq prefix-arg (if (zerop digit) '- (- digit)))) (t (setq prefix-arg digit)))) - (setq universal-argument-num-events (length (this-command-keys))) (setq overriding-terminal-local-map universal-argument-map)) (defvar autoarg-kp-mode-map diff --git a/lisp/electric.el b/lisp/electric.el index 351468fd75d..36ec4a00b88 100644 --- a/lisp/electric.el +++ b/lisp/electric.el @@ -78,8 +78,6 @@ (setq last-command-event (aref cmd (1- (length cmd))) this-command (key-binding cmd t) cmd this-command) - ;; This makes universal-argument-other-key work. - (setq universal-argument-num-events 0) (if (or (prog1 quit-flag (setq quit-flag nil)) (eq last-input-event ?\C-g)) (progn (setq unread-command-events nil diff --git a/lisp/kmacro.el b/lisp/kmacro.el index d6de2feb3fc..d20b54eba35 100644 --- a/lisp/kmacro.el +++ b/lisp/kmacro.el @@ -1194,12 +1194,10 @@ following additional answers: `insert', `insert-1', `replace', `replace-1', (setq cmd 'ignore) nil) ((memq cmd kmacro-step-edit-prefix-commands) - (setq universal-argument-num-events 0) (reset-this-command-lengths) nil) ((eq cmd 'universal-argument-other-key) (setq kmacro-step-edit-action t) - (setq universal-argument-num-events 0) (reset-this-command-lengths) (if (numberp kmacro-step-edit-inserting) (setq kmacro-step-edit-inserting nil)) @@ -1214,7 +1212,6 @@ following additional answers: `insert', `insert-1', `replace', `replace-1', (setq kmacro-step-edit-prefix-index nil) (reset-this-command-lengths) (setq overriding-terminal-local-map nil) - (setq universal-argument-num-events nil) (setq next-index kmacro-step-edit-key-index) t) (t nil)) From c8af4e673ea59b30e5a886397cc5a3426b2f64b0 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Mon, 23 Sep 2013 04:59:30 +0200 Subject: [PATCH 296/321] lisp/vc/vc-sccs.el (vc-sccs-search-project-dir): Mark unused argument. --- lisp/ChangeLog | 2 ++ lisp/vc/vc-sccs.el | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f5cdbcbb9b2..b2e09b18112 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2013-09-23 Juanma Barranquero + * vc/vc-sccs.el (vc-sccs-search-project-dir): Mark unused argument. + * autoarg.el (autoarg-kp-digit-argument): * electric.el (Electric-command-loop): * kmacro.el (kmacro-step-edit-insert): diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el index e00d55218c8..d78564e15ed 100644 --- a/lisp/vc/vc-sccs.el +++ b/lisp/vc/vc-sccs.el @@ -506,7 +506,7 @@ Remaining arguments are ignored." ;; a (autoload 'vc-sccs-search-project-dir "vc-sccs") which would not ;; help us avoid loading vc-sccs. ;;;###autoload -(progn (defun vc-sccs-search-project-dir (dirname basename) +(progn (defun vc-sccs-search-project-dir (_dirname basename) "Return the name of a master file in the SCCS project directory. Does not check whether the file exists but returns nil if it does not find any project directory." From d4a9284f20ab7463ed808b9cde2b98b4e27981a9 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Mon, 23 Sep 2013 05:30:55 +0200 Subject: [PATCH 297/321] src/w32console.c, src/w32term.c: Remove unused variables. src/w32console.c (initialize_w32_display): Remove unused variable hlinfo. src/w32term.c (w32_scroll_bar_handle_click): Remove unused variable f. --- src/ChangeLog | 5 +++++ src/w32console.c | 1 - src/w32term.c | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 9905f61e8da..668ebeb8537 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-23 Juanma Barranquero + + * w32console.c (initialize_w32_display): Remove unused variable hlinfo. + * w32term.c (w32_scroll_bar_handle_click): Remove unused variable f. + 2013-09-23 Daniel Colascione * alloc.c (USE_VALGRIND): New macro; on by default diff --git a/src/w32console.c b/src/w32console.c index 8da1ccf1892..230923934af 100644 --- a/src/w32console.c +++ b/src/w32console.c @@ -598,7 +598,6 @@ void initialize_w32_display (struct terminal *term, int *width, int *height) { CONSOLE_SCREEN_BUFFER_INFO info; - Mouse_HLInfo *hlinfo; term->rif = 0; /* No window based redisplay on the console. */ term->cursor_to_hook = w32con_move_cursor; diff --git a/src/w32term.c b/src/w32term.c index 3377a8911e2..be8ebfe6ab6 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -3981,7 +3981,6 @@ w32_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg, { int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); - struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); int y; int dragging = !NILP (bar->dragging); SCROLLINFO si; From 332153538c3268edb9154fbe29a6fdc5e012e595 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Mon, 23 Sep 2013 12:21:41 +0800 Subject: [PATCH 298/321] * autoinsert.el (auto-insert-alist): Make the value of lexical-binding match its file setting. --- lisp/ChangeLog | 5 +++++ lisp/autoinsert.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b2e09b18112..c25462dbe3a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-23 Leo Liu + + * autoinsert.el (auto-insert-alist): Make the value of + lexical-binding match its file setting. + 2013-09-23 Juanma Barranquero * vc/vc-sccs.el (vc-sccs-search-project-dir): Mark unused argument. diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el index daa654889b6..3801a790374 100644 --- a/lisp/autoinsert.el +++ b/lisp/autoinsert.el @@ -166,7 +166,7 @@ If this contains a %s, that will be replaced by the matching rule." "Short description: " ";;; " (file-name-nondirectory (buffer-file-name)) " --- " str (make-string (max 2 (- 80 (current-column) 27)) ?\s) - "-*- lexical-binding: t; -*-" + "-*- lexical-binding: t; -*-" '(setq lexical-binding t) " ;; Copyright (C) " (format-time-string "%Y") " " From 8762e52438d46d81e518179e4f9bd8a939463ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Mon, 23 Sep 2013 09:12:01 +0200 Subject: [PATCH 299/321] Suppress some unhelpful warnings when using clang. * configure.ac: With clang, check for and use -Wno-switch, -Wno-tautological-constant-out-of-range-compare and -Wno-pointer-sign. * conf_post.h(assume): Use __builtin_unreachable for clang. * src/filelock.c (lock_file_1): Rearrange to remove compiler warning about excess arguments to snprintf. --- ChangeLog | 5 +++++ configure.ac | 28 ++++++++++++++++++---------- src/ChangeLog | 7 +++++++ src/conf_post.h | 8 ++++++++ src/filelock.c | 16 ++++++++++++---- 5 files changed, 50 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 67f3f926b9c..d2a27b7b6ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-09-23 Jan Djärv + + * configure.ac: With clang, check for and use -Wno-switch, + -Wno-tautological-constant-out-of-range-compare and -Wno-pointer-sign. + 2013-09-23 Daniel Colascione * configure.ac: Check for valgrind headers. diff --git a/configure.ac b/configure.ac index c63627d18d4..16259f01ed2 100644 --- a/configure.ac +++ b/configure.ac @@ -787,10 +787,28 @@ AC_DEFUN([gl_GCC_VERSION_IFELSE], ] ) +# clang is unduly picky about some things. +AC_CACHE_CHECK([whether the compiler is clang], [emacs_cv_clang], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + #ifndef __clang__ + #error "not clang" + #endif + ]])], + [emacs_cv_clang=yes], + [emacs_cv_clang=no])]) + # When compiling with GCC, prefer -isystem to -I when including system # include files, to avoid generating useless diagnostics for the files. if test "$gl_gcc_warnings" != yes; then isystem='-I' + if test "$emacs_cv_clang" = yes + then + # Turn off some warnings if supported. + gl_WARN_ADD([-Wno-switch]) + gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare]) + gl_WARN_ADD([-Wno-pointer-sign]) + fi else isystem='-isystem ' @@ -840,16 +858,6 @@ else nw="$nw -Wtype-limits" nw="$nw -Wunused-parameter" - # clang is unduly picky about some things. - AC_CACHE_CHECK([whether the compiler is clang], [emacs_cv_clang], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ - #ifndef __clang__ - #error "not clang" - #endif - ]])], - [emacs_cv_clang=yes], - [emacs_cv_clang=no])]) if test $emacs_cv_clang = yes; then nw="$nw -Wcast-align" fi diff --git a/src/ChangeLog b/src/ChangeLog index 668ebeb8537..29cd8676584 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2013-09-23 Jan Djärv + + * filelock.c (lock_file_1): Rearrange to remove compiler warning + about excess arguments to snprintf. + + * conf_post.h(assume): Use __builtin_unreachable for clang. + 2013-09-23 Juanma Barranquero * w32console.c (initialize_w32_display): Remove unused variable hlinfo. diff --git a/src/conf_post.h b/src/conf_post.h index 14af38ce70b..7d4e1f43ed7 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -248,12 +248,20 @@ extern void _DebPrint (const char *fmt, ...); # define FLEXIBLE_ARRAY_MEMBER 1 #endif +#ifdef __clang__ +# ifndef __has_builtin +# define __has_builtin(x) 0 +# endif +#endif + /* assume(cond) tells the compiler (and lint) that a certain condition * will always hold, and that it should optimize (or check) accordingly. */ #if defined lint # define assume(cond) ((cond) ? (void) 0 : abort ()) #elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || __GNUC__ > 4 # define assume(cond) ((cond) || (__builtin_unreachable(), 0)) +#elif defined (__clang__) && __has_builtin (__builtin_unreachable) +# define assume(cond) ((cond) || (__builtin_unreachable(), 0)) #elif defined __MSC_VER # define assume(cond) __assume ((cond)) #else diff --git a/src/filelock.c b/src/filelock.c index df72eff5950..2f53047f526 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -459,10 +459,18 @@ lock_file_1 (char *lfname, bool force) char lock_info_str[MAX_LFINFO + 1]; printmax_t pid = getpid (); - if (sizeof lock_info_str - <= snprintf (lock_info_str, sizeof lock_info_str, - boot ? "%s@%s.%"pMd":%"pMd : "%s@%s.%"pMd, - user_name, host_name, pid, boot)) + if (boot) + { + if (sizeof lock_info_str + <= snprintf (lock_info_str, sizeof lock_info_str, + "%s@%s.%"pMd":%"pMd, + user_name, host_name, pid, boot)) + return ENAMETOOLONG; + } + else if (sizeof lock_info_str + <= snprintf (lock_info_str, sizeof lock_info_str, + "%s@%s.%"pMd, + user_name, host_name, pid)) return ENAMETOOLONG; return create_lock_file (lfname, lock_info_str, force); From cd548fa41b9d298bea8e09b57655e20887d2e922 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 23 Sep 2013 11:25:48 +0300 Subject: [PATCH 300/321] Fix the definition of 'assume' for GCC older than 4.5. src/conf_post.h (__has_builtin): Define to zero, if undefined, on all platforms, not just for clang. --- src/ChangeLog | 5 +++++ src/conf_post.h | 6 ++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 29cd8676584..093368568c2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-23 Eli Zaretskii + + * conf_post.h (__has_builtin): Define to zero, if undefined, on + all platforms, not just for clang. + 2013-09-23 Jan Djärv * filelock.c (lock_file_1): Rearrange to remove compiler warning diff --git a/src/conf_post.h b/src/conf_post.h index 7d4e1f43ed7..3c348d0705b 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -248,10 +248,8 @@ extern void _DebPrint (const char *fmt, ...); # define FLEXIBLE_ARRAY_MEMBER 1 #endif -#ifdef __clang__ -# ifndef __has_builtin -# define __has_builtin(x) 0 -# endif +#ifndef __has_builtin +# define __has_builtin(x) 0 #endif /* assume(cond) tells the compiler (and lint) that a certain condition From f03eddbff64da3a9304b2c654b6f46b58f318787 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 23 Sep 2013 12:18:38 +0300 Subject: [PATCH 301/321] Fix bug #15437 with mouse highlight on overlay strings. src/xdisp.c (mouse_face_from_string_pos): Fix off-by-one error in computing the end column of mouse-highlight that comes from display or overlay strings. --- src/ChangeLog | 4 ++++ src/xdisp.c | 14 +++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 093368568c2..8483bdc6216 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2013-09-23 Eli Zaretskii + * xdisp.c (mouse_face_from_string_pos): Fix off-by-one error in + computing the end column of mouse-highlight that comes from + display or overlay strings. (Bug#15437) + * conf_post.h (__has_builtin): Define to zero, if undefined, on all platforms, not just for clang. diff --git a/src/xdisp.c b/src/xdisp.c index bfd86758a1e..0575c7b3282 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -27381,7 +27381,7 @@ fast_find_string_pos (struct window *w, ptrdiff_t pos, Lisp_Object object, #endif /* not used */ /* Find the positions of the first and the last glyphs in window W's - current matrix that occlude positions [STARTPOS..ENDPOS] in OBJECT + current matrix that occlude positions [STARTPOS..ENDPOS) in OBJECT (assumed to be a string), and return in HLINFO's mouse_face_* members the pixel and column/row coordinates of those glyphs. */ @@ -27397,7 +27397,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo, int found = 0; /* Find the glyph row with at least one position in the range - [STARTPOS..ENDPOS], and the first glyph in that row whose + [STARTPOS..ENDPOS), and the first glyph in that row whose position belongs to that range. */ for (r = MATRIX_FIRST_TEXT_ROW (w->current_matrix); r->enabled_p && r->y < yb; @@ -27409,7 +27409,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo, e = g + r->used[TEXT_AREA]; for (gx = r->x; g < e; gx += g->pixel_width, ++g) if (EQ (g->object, object) - && startpos <= g->charpos && g->charpos <= endpos) + && startpos <= g->charpos && g->charpos < endpos) { hlinfo->mouse_face_beg_row = MATRIX_ROW_VPOS (r, w->current_matrix); @@ -27427,7 +27427,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo, g = e + r->used[TEXT_AREA]; for ( ; g > e; --g) if (EQ ((g-1)->object, object) - && startpos <= (g-1)->charpos && (g-1)->charpos <= endpos) + && startpos <= (g-1)->charpos && (g-1)->charpos < endpos) { hlinfo->mouse_face_beg_row = MATRIX_ROW_VPOS (r, w->current_matrix); @@ -27455,7 +27455,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo, found = 0; for ( ; g < e; ++g) if (EQ (g->object, object) - && startpos <= g->charpos && g->charpos <= endpos) + && startpos <= g->charpos && g->charpos < endpos) { found = 1; break; @@ -27478,7 +27478,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo, e = g + r->used[TEXT_AREA]; for ( ; e > g; --e) if (EQ ((e-1)->object, object) - && startpos <= (e-1)->charpos && (e-1)->charpos <= endpos) + && startpos <= (e-1)->charpos && (e-1)->charpos < endpos) break; hlinfo->mouse_face_end_col = e - g; @@ -27493,7 +27493,7 @@ mouse_face_from_string_pos (struct window *w, Mouse_HLInfo *hlinfo, for (gx = r->x ; e < g; ++e) { if (EQ (e->object, object) - && startpos <= e->charpos && e->charpos <= endpos) + && startpos <= e->charpos && e->charpos < endpos) break; gx += e->pixel_width; } From b519df23900222df5637cbd23eba45e4bd540856 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 23 Sep 2013 12:28:57 +0300 Subject: [PATCH 302/321] Fix last commit. src/xdisp.c (note_mouse_highlight): Adapt calculation of last argument to mouse_face_from_string_pos to the previous change. Fixes: debbugs:15437 --- src/ChangeLog | 2 ++ src/xdisp.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8483bdc6216..5592e5b164e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -3,6 +3,8 @@ * xdisp.c (mouse_face_from_string_pos): Fix off-by-one error in computing the end column of mouse-highlight that comes from display or overlay strings. (Bug#15437) + (note_mouse_highlight): Adapt calculation of last argument to + mouse_face_from_string_pos to the above change. * conf_post.h (__has_builtin): Define to zero, if undefined, on all platforms, not just for clang. diff --git a/src/xdisp.c b/src/xdisp.c index 0575c7b3282..a3173c8fc06 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -28267,7 +28267,7 @@ note_mouse_highlight (struct frame *f, int x, int y) if (NILP (s)) s = make_number (0); if (NILP (e)) - e = make_number (SCHARS (object) - 1); + e = make_number (SCHARS (object)); mouse_face_from_string_pos (w, hlinfo, object, XINT (s), XINT (e)); hlinfo->mouse_face_past_end = 0; From 5492865b797b7ce33730ea7b013d43beeaf33dc3 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 23 Sep 2013 13:50:47 +0400 Subject: [PATCH 303/321] * dispnew.c (frame_garbaged, selected_frame, last_nonminibuf_frame): Move to... * frame.c (frame_garbaged, selected_frame, last_nonminibuf_frame): ...this file and convert the latter to static. Adjust comment. (make_initial_frame): * window.c (init_window_once): Adjust user. * frame.h (last_nonminibuf_frame): Remove declaration. * lisp.h (selected_frame): Likewise. * msdos.c (the_only_display_info): Adjust comment. --- src/ChangeLog | 12 ++++++++++++ src/dispnew.c | 18 ------------------ src/frame.c | 15 +++++++++++++++ src/frame.h | 7 +------ src/lisp.h | 1 - src/msdos.c | 2 +- src/window.c | 1 - 7 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 5592e5b164e..c5e267437e4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2013-09-23 Dmitry Antipov + + * dispnew.c (frame_garbaged, selected_frame, last_nonminibuf_frame): + Move to... + * frame.c (frame_garbaged, selected_frame, last_nonminibuf_frame): + ...this file and convert the latter to static. Adjust comment. + (make_initial_frame): + * window.c (init_window_once): Adjust user. + * frame.h (last_nonminibuf_frame): Remove declaration. + * lisp.h (selected_frame): Likewise. + * msdos.c (the_only_display_info): Adjust comment. + 2013-09-23 Eli Zaretskii * xdisp.c (mouse_face_from_string_pos): Fix off-by-one error in diff --git a/src/dispnew.c b/src/dispnew.c index ed7349a4507..4ec989280ea 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -102,30 +102,12 @@ static void set_window_cursor_after_update (struct window *); static void adjust_frame_glyphs_for_window_redisplay (struct frame *); static void adjust_frame_glyphs_for_frame_redisplay (struct frame *); -/* True upon entry to redisplay means do not assume anything about - current contents of actual terminal frame; clear and redraw it. */ - -bool frame_garbaged; - /* True means last display completed. False means it was preempted. */ bool display_completed; Lisp_Object Qdisplay_table, Qredisplay_dont_pause; - -/* The currently selected frame. In a single-frame version, this - variable always equals the_only_frame. */ - -Lisp_Object selected_frame; - -/* A frame which is not just a mini-buffer, or 0 if there are no such - frames. This is usually the most recent such frame that was - selected. In a single-frame version, this variable always holds - the address of the_only_frame. */ - -struct frame *last_nonminibuf_frame; - /* True means SIGWINCH happened when not safe. */ static bool delayed_size_change; diff --git a/src/frame.c b/src/frame.c index d2943211377..2e90713b6c3 100644 --- a/src/frame.c +++ b/src/frame.c @@ -113,6 +113,19 @@ static Lisp_Object Qdelete_frame_functions; static Lisp_Object Qgeometry, Qworkarea, Qmm_size, Qframes, Qsource; +/* The currently selected frame. */ + +Lisp_Object selected_frame; + +/* A frame which is not just a mini-buffer, or NULL if there are no such + frames. This is usually the most recent such frame that was selected. */ + +static struct frame *last_nonminibuf_frame; + +/* Nonzero means there is at least one garbaged frame. */ + +bool frame_garbaged; + #ifdef HAVE_WINDOW_SYSTEM static void x_report_frame_params (struct frame *, Lisp_Object *); #endif @@ -546,6 +559,8 @@ make_initial_frame (void) if (!noninteractive) init_frame_faces (f); + last_nonminibuf_frame = f; + return f; } diff --git a/src/frame.h b/src/frame.h index ffab992023a..09e4112d3a2 100644 --- a/src/frame.h +++ b/src/frame.h @@ -925,6 +925,7 @@ default_pixels_per_inch_y (void) #define SET_FRAME_ICONIFIED(f, i) \ (f)->iconified = (eassert (0 <= (i) && (i) <= 1), (i)) +extern Lisp_Object selected_frame; extern Lisp_Object Qframep, Qframe_live_p; extern Lisp_Object Qtty, Qtty_type; extern Lisp_Object Qtty_color_mode; @@ -934,8 +935,6 @@ extern Lisp_Object Qnoelisp; /* Nonzero means there is at least one garbaged frame. */ extern bool frame_garbaged; -extern struct frame *last_nonminibuf_frame; - extern void set_menu_bar_lines (struct frame *, Lisp_Object, Lisp_Object); extern struct frame *decode_window_system_frame (Lisp_Object); extern struct frame *decode_live_frame (Lisp_Object); @@ -955,10 +954,6 @@ extern void frame_make_pointer_visible (void); extern Lisp_Object delete_frame (Lisp_Object, Lisp_Object); extern Lisp_Object Vframe_list; - -/* The currently selected frame. */ - -extern Lisp_Object selected_frame; /* Value is a pointer to the selected frame. If the selected frame isn't live, abort. */ diff --git a/src/lisp.h b/src/lisp.h index 0fffea57578..864a169da50 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3359,7 +3359,6 @@ extern void syms_of_insdel (void); && (defined __FreeBSD__ || defined GNU_LINUX || defined __MINGW32__)) _Noreturn void __executable_start (void); #endif -extern Lisp_Object selected_frame; extern Lisp_Object Vwindow_system; extern Lisp_Object sit_for (Lisp_Object, bool, int); extern void init_display (void); diff --git a/src/msdos.c b/src/msdos.c index 3a74846f8ea..09aedf837d8 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -408,7 +408,7 @@ static int term_setup_done; static unsigned short outside_cursor; -/* Similar to the_only_frame. */ +/* The only display since MS-DOS does not support multiple ones. */ struct tty_display_info the_only_display_info; /* Support for DOS/V (allows Japanese characters to be displayed on diff --git a/src/window.c b/src/window.c index 7e2f52e12b1..7081df7de89 100644 --- a/src/window.c +++ b/src/window.c @@ -6505,7 +6505,6 @@ init_window_once (void) Vterminal_frame = selected_frame; minibuf_window = f->minibuffer_window; selected_window = f->selected_window; - last_nonminibuf_frame = f; window_initialized = 1; } From bab4f76d9a0559d7e6691fcc56e762d4ffa93fc0 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 23 Sep 2013 06:17:40 -0400 Subject: [PATCH 304/321] Auto-commit of generated files. --- autogen/config.in | 3 + autogen/configure | 214 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 173 insertions(+), 44 deletions(-) diff --git a/autogen/config.in b/autogen/config.in index c45b9920d06..c68a257f31c 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -1102,6 +1102,9 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the header file. */ #undef HAVE_UTMP_H +/* Define to 1 if you have the header file. */ +#undef HAVE_VALGRIND_VALGRIND_H + /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK diff --git a/autogen/configure b/autogen/configure index 9010a4cac5b..08577d9efef 100755 --- a/autogen/configure +++ b/autogen/configure @@ -1407,8 +1407,8 @@ GZIP_PROG INSTALL_INFO LN_S_FILEONLY GNULIB_WARN_CFLAGS -WARN_CFLAGS WERROR_CFLAGS +WARN_CFLAGS RANLIB ARFLAGS AR @@ -7545,23 +7545,45 @@ fi # Otherwise, run RUN-IF-NOT-FOUND. +# clang is unduly picky about some things. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is clang" >&5 +$as_echo_n "checking whether the compiler is clang... " >&6; } +if test "${emacs_cv_clang+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #ifndef __clang__ + #error "not clang" + #endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + emacs_cv_clang=yes +else + emacs_cv_clang=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $emacs_cv_clang" >&5 +$as_echo "$emacs_cv_clang" >&6; } + # When compiling with GCC, prefer -isystem to -I when including system # include files, to avoid generating useless diagnostics for the files. if test "$gl_gcc_warnings" != yes; then isystem='-I' -else - isystem='-isystem ' - - # This, $nw, is the list of warnings we disable. - nw= - - case $with_x_toolkit in - lucid | athena | motif) - # Old toolkits mishandle 'const'. - nw="$nw -Wwrite-strings" - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror -Wunknown-warning-option" >&5 + if test "$emacs_cv_clang" = yes + then + # Turn off some warnings if supported. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror -Wunknown-warning-option" >&5 $as_echo_n "checking whether C compiler handles -Werror -Wunknown-warning-option... " >&6; } if test "${gl_cv_warn_c__Werror__Wunknown_warning_option+set}" = set; then : $as_echo_n "(cached) " >&6 @@ -7598,6 +7620,127 @@ else fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-switch" >&5 +$as_echo_n "checking whether C compiler handles -Wno-switch... " >&6; } +if test "${gl_cv_warn_c__Wno_switch+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wswitch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_switch=yes +else + gl_cv_warn_c__Wno_switch=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_switch" >&5 +$as_echo "$gl_cv_warn_c__Wno_switch" >&6; } +if test "x$gl_cv_warn_c__Wno_switch" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-switch" +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-tautological-constant-out-of-range-compare" >&5 +$as_echo_n "checking whether C compiler handles -Wno-tautological-constant-out-of-range-compare... " >&6; } +if test "${gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wtautological-constant-out-of-range-compare" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare=yes +else + gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare" >&5 +$as_echo "$gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare" >&6; } +if test "x$gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-tautological-constant-out-of-range-compare" +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-pointer-sign" >&5 +$as_echo_n "checking whether C compiler handles -Wno-pointer-sign... " >&6; } +if test "${gl_cv_warn_c__Wno_pointer_sign+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_compiler_FLAGS="$CFLAGS" + as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wpointer-sign" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_warn_c__Wno_pointer_sign=yes +else + gl_cv_warn_c__Wno_pointer_sign=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_compiler_FLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_pointer_sign" >&5 +$as_echo "$gl_cv_warn_c__Wno_pointer_sign" >&6; } +if test "x$gl_cv_warn_c__Wno_pointer_sign" = x""yes; then : + as_fn_append WARN_CFLAGS " -Wno-pointer-sign" +fi + + + fi +else + isystem='-isystem ' + + # This, $nw, is the list of warnings we disable. + nw= + + case $with_x_toolkit in + lucid | athena | motif) + # Old toolkits mishandle 'const'. + nw="$nw -Wwrite-strings" + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror" >&5 $as_echo_n "checking whether C compiler handles -Werror... " >&6; } if test "${gl_cv_warn_c__Werror+set}" = set; then : @@ -7669,36 +7812,6 @@ fi nw="$nw -Wtype-limits" nw="$nw -Wunused-parameter" - # clang is unduly picky about some things. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is clang" >&5 -$as_echo_n "checking whether the compiler is clang... " >&6; } -if test "${emacs_cv_clang+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #ifndef __clang__ - #error "not clang" - #endif - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - emacs_cv_clang=yes -else - emacs_cv_clang=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $emacs_cv_clang" >&5 -$as_echo "$emacs_cv_clang" >&6; } if test $emacs_cv_clang = yes; then nw="$nw -Wcast-align" fi @@ -16072,6 +16185,19 @@ fi +for ac_header in valgrind/valgrind.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default" +if test "x$ac_cv_header_valgrind_valgrind_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VALGRIND_VALGRIND_H 1 +_ACEOF + +fi + +done + + From e08813d023325dc02574ab9437441551f67d1487 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 23 Sep 2013 17:25:19 +0400 Subject: [PATCH 305/321] * xdisp.c (noninteractive_need_newline, message_log_need_newline) (overlay_arrow_seen, message_enable_multibyte, line_number_displayed) (display_last_displayed_message_p, message_buf_print) (message_cleared_p, help_echo_showing_p, hourglass_shown_p): Use bool for boolean. * dispextern.h (help_echo_showing_p, hourglass_shown_p): * lisp.h (noninteractive_need_newline): Adjust declaration. --- src/ChangeLog | 10 ++++++++++ src/dispextern.h | 4 ++-- src/lisp.h | 2 +- src/xdisp.c | 20 ++++++++++---------- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c5e267437e4..38f4b21d30b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2013-09-23 Dmitry Antipov + + * xdisp.c (noninteractive_need_newline, message_log_need_newline) + (overlay_arrow_seen, message_enable_multibyte, line_number_displayed) + (display_last_displayed_message_p, message_buf_print) + (message_cleared_p, help_echo_showing_p, hourglass_shown_p): + Use bool for boolean. + * dispextern.h (help_echo_showing_p, hourglass_shown_p): + * lisp.h (noninteractive_need_newline): Adjust declaration. + 2013-09-23 Dmitry Antipov * dispnew.c (frame_garbaged, selected_frame, last_nonminibuf_frame): diff --git a/src/dispextern.h b/src/dispextern.h index 45c1bedb64c..30db19b2d03 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3187,7 +3187,7 @@ int in_display_vector_p (struct it *); int frame_mode_line_height (struct frame *); extern Lisp_Object Qtool_bar; extern bool redisplaying_p; -extern int help_echo_showing_p; +extern bool help_echo_showing_p; extern Lisp_Object help_echo_string, help_echo_window; extern Lisp_Object help_echo_object, previous_help_echo_string; extern ptrdiff_t help_echo_pos; @@ -3389,7 +3389,7 @@ extern frame_parm_handler x_frame_parm_handlers[]; extern void start_hourglass (void); extern void cancel_hourglass (void); -extern int hourglass_shown_p; +extern bool hourglass_shown_p; /* If non-null, an asynchronous timer that, when it expires, displays an hourglass cursor on all frames. */ extern struct atimer *hourglass_atimer; diff --git a/src/lisp.h b/src/lisp.h index 864a169da50..a9a2c259b5b 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3378,7 +3378,7 @@ extern Lisp_Object Qglyphless_char; extern Lisp_Object QCdata, QCfile; extern Lisp_Object QCmap; extern Lisp_Object Qrisky_local_variable; -extern int noninteractive_need_newline; +extern bool noninteractive_need_newline; extern Lisp_Object echo_area_buffer[2]; extern void add_to_log (const char *, Lisp_Object, Lisp_Object); extern void check_message_stack (void); diff --git a/src/xdisp.c b/src/xdisp.c index a3173c8fc06..e1143bec1c0 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -415,11 +415,11 @@ Lisp_Object Qboth, Qboth_horiz, Qtext_image_horiz; /* Non-zero means print newline to stdout before next mini-buffer message. */ -int noninteractive_need_newline; +bool noninteractive_need_newline; /* Non-zero means print newline to message log before next message. */ -static int message_log_need_newline; +static bool message_log_need_newline; /* Three markers that message_dolog uses. It could allocate them itself, but that causes trouble @@ -478,7 +478,7 @@ Lisp_Object Qmenu_bar_update_hook; /* Nonzero if an overlay arrow has been displayed in this window. */ -static int overlay_arrow_seen; +static bool overlay_arrow_seen; /* Vector containing glyphs for an ellipsis `...'. */ @@ -500,7 +500,7 @@ static Lisp_Object Vmessage_stack; /* Nonzero means multibyte characters were enabled when the echo area message was specified. */ -static int message_enable_multibyte; +static bool message_enable_multibyte; /* Nonzero if we should redraw the mode lines on the next redisplay. */ @@ -514,7 +514,7 @@ int windows_or_buffers_changed; /* Nonzero after display_mode_line if %l was used and it displayed a line number. */ -static int line_number_displayed; +static bool line_number_displayed; /* The name of the *Messages* buffer, a string. */ @@ -536,12 +536,12 @@ static Lisp_Object Vwith_echo_area_save_vector; /* Non-zero means display_echo_area should display the last echo area message again. Set by redisplay_preserve_echo_area. */ -static int display_last_displayed_message_p; +static bool display_last_displayed_message_p; /* Nonzero if echo area is being used by print; zero if being used by message. */ -static int message_buf_print; +static bool message_buf_print; /* The symbol `inhibit-menubar-update' and its DEFVAR_BOOL variable. */ @@ -551,7 +551,7 @@ static Lisp_Object Qmessage_truncate_lines; /* Set to 1 in clear_message to make redisplay_internal aware of an emptied echo area. */ -static int message_cleared_p; +static bool message_cleared_p; /* A scratch glyph row with contents used for generating truncation glyphs. Also used in direct_output_for_insert. */ @@ -566,7 +566,7 @@ static int last_height; /* Non-zero if there's a help-echo in the echo area. */ -int help_echo_showing_p; +bool help_echo_showing_p; /* The maximum distance to look ahead for text properties. Values that are too small let us call compute_char_face and similar @@ -742,7 +742,7 @@ Lisp_Object previous_help_echo_string; #ifdef HAVE_WINDOW_SYSTEM /* Non-zero means an hourglass cursor is currently shown. */ -int hourglass_shown_p; +bool hourglass_shown_p; /* If non-null, an asynchronous timer that, when it expires, displays an hourglass cursor on all frames. */ From 3a6a78fd2537f7394c6f80c1fac63643ce364aa5 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 23 Sep 2013 17:46:20 +0400 Subject: [PATCH 306/321] * dispextern.h (cancel_line, init_desired_glyphs): Remove ancient leftover. --- src/ChangeLog | 4 +++- src/dispextern.h | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 38f4b21d30b..4fdf461b57d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -5,7 +5,9 @@ (display_last_displayed_message_p, message_buf_print) (message_cleared_p, help_echo_showing_p, hourglass_shown_p): Use bool for boolean. - * dispextern.h (help_echo_showing_p, hourglass_shown_p): + * dispextern.h (cancel_line, init_desired_glyphs): + Remove ancient leftover. + (help_echo_showing_p, hourglass_shown_p): * lisp.h (noninteractive_need_newline): Adjust declaration. 2013-09-23 Dmitry Antipov diff --git a/src/dispextern.h b/src/dispextern.h index 30db19b2d03..84111bd9958 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3437,8 +3437,6 @@ extern Lisp_Object marginal_area_string (struct window *, enum window_part, Lisp_Object *, int *, int *, int *, int *); extern void redraw_frame (struct frame *); -extern void cancel_line (int, struct frame *); -extern void init_desired_glyphs (struct frame *); extern bool update_frame (struct frame *, bool, bool); extern void bitch_at_user (void); extern void adjust_frame_glyphs (struct frame *); From 84998447c3c9c37935a1dd948e3739cff5b9e71b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 23 Sep 2013 19:23:32 -0400 Subject: [PATCH 307/321] * lisp/eshell/esh-cmd.el (eshell--sep-terms): New var. (eshell-parse-command, eshell-parse-pipeline): Use it since eshell-separate-commands requires a dynamic scoped var. Reported by Jan Moringen . --- lisp/ChangeLog | 7 +++++++ lisp/eshell/esh-cmd.el | 24 +++++++++++++----------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c25462dbe3a..1a9f6984d91 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2013-09-23 Stefan Monnier + + * eshell/esh-cmd.el (eshell--sep-terms): New var. + (eshell-parse-command, eshell-parse-pipeline): Use it since + eshell-separate-commands requires a dynamic scoped var. + Reported by Jan Moringen . + 2013-09-23 Leo Liu * autoinsert.el (auto-insert-alist): Make the value of diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index 87c72d2caf5..baa8e7bafcf 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -339,13 +339,15 @@ otherwise t.") ;; Command parsing +(defvar eshell--sep-terms) + (defun eshell-parse-command (command &optional args toplevel) "Parse the COMMAND, adding ARGS if given. COMMAND can either be a string, or a cons cell demarcating a buffer region. TOPLEVEL, if non-nil, means that the outermost command (the user's input command) is being parsed, and that pre and post command hooks should be run before and after the command." - (let* (sep-terms + (let* (eshell--sep-terms (terms (append (if (consp command) @@ -365,16 +367,16 @@ hooks should be run before and after the command." (function (lambda (cmd) (setq cmd - (if (or (not (car sep-terms)) - (string= (car sep-terms) ";")) + (if (or (not (car eshell--sep-terms)) + (string= (car eshell--sep-terms) ";")) (eshell-parse-pipeline cmd) `(eshell-do-subjob (list ,(eshell-parse-pipeline cmd))))) - (setq sep-terms (cdr sep-terms)) + (setq eshell--sep-terms (cdr eshell--sep-terms)) (if eshell-in-pipeline-p cmd `(eshell-trap-errors ,cmd)))) - (eshell-separate-commands terms "[&;]" nil 'sep-terms)))) + (eshell-separate-commands terms "[&;]" nil 'eshell--sep-terms)))) (let ((cmd commands)) (while cmd (if (cdr cmd) @@ -586,9 +588,9 @@ For an external command, it means an exit code of 0." (defun eshell-parse-pipeline (terms) "Parse a pipeline from TERMS, return the appropriate Lisp forms." - (let* (sep-terms + (let* (eshell--sep-terms (bigpieces (eshell-separate-commands terms "\\(&&\\|||\\)" - nil 'sep-terms)) + nil 'eshell--sep-terms)) (bp bigpieces) (results (list t)) final) @@ -620,15 +622,15 @@ For an external command, it means an exit code of 0." results (nreverse results) final (car results) results (cdr results) - sep-terms (nreverse sep-terms)) + eshell--sep-terms (nreverse eshell--sep-terms)) (while results - (cl-assert (car sep-terms)) + (cl-assert (car eshell--sep-terms)) (setq final (eshell-structure-basic-command - 'if (string= (car sep-terms) "&&") "if" + 'if (string= (car eshell--sep-terms) "&&") "if" `(eshell-protect ,(car results)) `(eshell-protect ,final)) results (cdr results) - sep-terms (cdr sep-terms))) + eshell--sep-terms (cdr eshell--sep-terms))) final)) (defun eshell-parse-subcommand-argument () From d160dd0c71db061d819ce5ac337e4de8bd4f7d11 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 23 Sep 2013 20:44:58 -0700 Subject: [PATCH 308/321] * alloc.c (valgrind_p): Use bool for boolean. --- src/ChangeLog | 4 ++++ src/alloc.c | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4fdf461b57d..5676d3e8b9a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2013-09-24 Paul Eggert + + * alloc.c (valgrind_p): Use bool for boolean. + 2013-09-23 Dmitry Antipov * xdisp.c (noninteractive_need_newline, message_log_need_newline) diff --git a/src/alloc.c b/src/alloc.c index 564faa18aa8..02742c4cf4a 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -45,16 +45,16 @@ along with GNU Emacs. If not, see . */ #include -#if (defined ENABLE_CHECKING && \ - defined HAVE_VALGRIND_VALGRIND_H && \ - !defined USE_VALGRIND) +#if (defined ENABLE_CHECKING \ + && defined HAVE_VALGRIND_VALGRIND_H \ + && !defined USE_VALGRIND) # define USE_VALGRIND 1 #endif #if USE_VALGRIND #include #include -static int valgrind_p; +static bool valgrind_p; #endif /* GC_CHECK_MARKED_OBJECTS means do sanity checks on allocated objects. @@ -6667,7 +6667,7 @@ init_alloc (void) gcs_done = 0; #if USE_VALGRIND - valgrind_p = RUNNING_ON_VALGRIND; + valgrind_p = RUNNING_ON_VALGRIND != 0; #endif } From 7be68de5d25998e7d15aaab800c40cad48eac846 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 23 Sep 2013 21:28:06 -0700 Subject: [PATCH 309/321] Some minor cleanups of recently-added bool vector code. * conf_post.h (assume): Always return void. Use lint version only if GCC and MSC versions don't apply. * conf_post.h (assume): * data.c (USC_MSC_POPCOUNT, count_trailing_zero_bits): Depend on _MSC_VER, not __MSC_VER, for consistency with the rest of Emacs. * data.c (bool_vector_spare_mask, popcount_size_t_generic) (popcount_size_t_msc, popcount_size_t_gcc, popcount_size_t) (bool_vector_binop_driver, count_trailing_zero_bits) (size_t_to_host_endian): Now static, not static inline; the latter isn't needed with modern compilers and doesn't work with older compilers anyway. --- src/ChangeLog | 14 +++++++++ src/alloc.c | 15 +++++---- src/conf_post.h | 19 ++++++------ src/data.c | 81 +++++++++++++++++++++---------------------------- src/lisp.h | 9 ++---- src/xdisp.c | 3 +- 6 files changed, 69 insertions(+), 72 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 5676d3e8b9a..303eb4f9176 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,19 @@ 2013-09-24 Paul Eggert + Some minor cleanups of recently-added bool vector code. + * conf_post.h (assume): Always return void. Use lint version + only if GCC and MSC versions don't apply. + * conf_post.h (assume): + * data.c (USC_MSC_POPCOUNT, count_trailing_zero_bits): + Depend on _MSC_VER, not __MSC_VER, for consistency with + the rest of Emacs. + * data.c (bool_vector_spare_mask, popcount_size_t_generic) + (popcount_size_t_msc, popcount_size_t_gcc, popcount_size_t) + (bool_vector_binop_driver, count_trailing_zero_bits) + (size_t_to_host_endian): Now static, not static inline; + the latter isn't needed with modern compilers and doesn't + work with older compilers anyway. + * alloc.c (valgrind_p): Use bool for boolean. 2013-09-23 Dmitry Antipov diff --git a/src/alloc.c b/src/alloc.c index 02742c4cf4a..e380d66cb1b 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -981,7 +981,7 @@ struct ablocks #define ABLOCKS_BASE(abase) (abase) #else #define ABLOCKS_BASE(abase) \ - (1 & (intptr_t) ABLOCKS_BUSY (abase) ? abase : ((void**)abase)[-1]) + (1 & (intptr_t) ABLOCKS_BUSY (abase) ? abase : ((void **)abase)[-1]) #endif /* The list of free ablock. */ @@ -1036,7 +1036,7 @@ lisp_align_malloc (size_t nbytes, enum mem_type type) aligned = (base == abase); if (!aligned) - ((void**)abase)[-1] = base; + ((void **) abase)[-1] = base; #ifdef DOUG_LEA_MALLOC /* Back to a reasonable maximum of mmap'ed areas. */ @@ -2016,10 +2016,9 @@ INIT must be an integer that represents a character. */) verify (sizeof (size_t) * CHAR_BIT == BITS_PER_SIZE_T); verify ((BITS_PER_SIZE_T & (BITS_PER_SIZE_T - 1)) == 0); -static -ptrdiff_t +static ptrdiff_t bool_vector_payload_bytes (ptrdiff_t nr_bits, - ptrdiff_t* exact_needed_bytes_out) + ptrdiff_t *exact_needed_bytes_out) { ptrdiff_t exact_needed_bytes; ptrdiff_t needed_bytes; @@ -2068,7 +2067,7 @@ LENGTH must be a number. INIT matters only in whether it is t or nil. */) + total_payload_bytes), word_size) / word_size; - p = (struct Lisp_Bool_Vector* ) allocate_vector (needed_elements); + p = (struct Lisp_Bool_Vector *) allocate_vector (needed_elements); XSETVECTOR (val, p); XSETPVECTYPESIZE (XVECTOR (val), PVEC_BOOL_VECTOR, 0, 0); @@ -2617,9 +2616,9 @@ verify ((VECTOR_BLOCK_SIZE % roundup_size) == 0); verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS)); /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at compile time. */ -#define vroundup_ct(x) ROUNDUP((size_t)(x), roundup_size) +#define vroundup_ct(x) ROUNDUP ((size_t) (x), roundup_size) /* Round up X to nearest mult-of-ROUNDUP_SIZE --- use at runtime. */ -#define vroundup(x) (assume((x) >= 0), vroundup_ct(x)) +#define vroundup(x) (assume ((x) >= 0), vroundup_ct (x)) /* Rounding helps to maintain alignment constraints if USE_LSB_TAG. */ diff --git a/src/conf_post.h b/src/conf_post.h index 3c348d0705b..0786bdfeb33 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -252,18 +252,17 @@ extern void _DebPrint (const char *fmt, ...); # define __has_builtin(x) 0 #endif -/* assume(cond) tells the compiler (and lint) that a certain condition - * will always hold, and that it should optimize (or check) accordingly. */ -#if defined lint +/* Tell the compiler (and lint) that COND will always hold, and that + it should optimize (or check) accordingly. */ +#if (__has_builtin (__builtin_unreachable) \ + || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || __GNUC__ > 4) +# define assume(cond) ((cond) ? (void) 0 : __builtin_unreachable ()) +#elif defined _MSC_VER +# define assume(cond) __assume (cond) +#elif defined lint # define assume(cond) ((cond) ? (void) 0 : abort ()) -#elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || __GNUC__ > 4 -# define assume(cond) ((cond) || (__builtin_unreachable(), 0)) -#elif defined (__clang__) && __has_builtin (__builtin_unreachable) -# define assume(cond) ((cond) || (__builtin_unreachable(), 0)) -#elif defined __MSC_VER -# define assume(cond) __assume ((cond)) #else -# define assume(cond) (0 && (cond)) +# define assume(cond) ((void) (0 && (cond))) #endif /* Use this to suppress gcc's `...may be used before initialized' warnings. */ diff --git a/src/data.c b/src/data.c index 5a05e0652ad..82cfd74cd0f 100644 --- a/src/data.c +++ b/src/data.c @@ -617,7 +617,7 @@ global value outside of any lexical scope. */) struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); if (blv->fwd) /* In set_internal, we un-forward vars when their value is - set to Qunbound. */ + set to Qunbound. */ return Qt; else { @@ -628,7 +628,7 @@ global value outside of any lexical scope. */) } case SYMBOL_FORWARDED: /* In set_internal, we un-forward vars when their value is - set to Qunbound. */ + set to Qunbound. */ return Qt; default: emacs_abort (); } @@ -1996,7 +1996,7 @@ If the current binding is global (the default), the value is nil. */) } /* This code is disabled now that we use the selected frame to return - keyboard-local-values. */ + keyboard-local-values. */ #if 0 extern struct terminal *get_terminal (Lisp_Object display, int); @@ -2963,15 +2963,14 @@ lowercase l) for small endian machines. */) always allocate bool vectors with at least one size_t of storage so that we don't have to special-case empty bit vectors. */ -static inline -size_t +static size_t bool_vector_spare_mask (ptrdiff_t nr_bits) { eassert_and_assume (nr_bits > 0); return (((size_t) 1) << (nr_bits % BITS_PER_SIZE_T)) - 1; } -#if __MSC_VER >= 1500 && (defined _M_IX86 || defined _M_X64) +#if _MSC_VER >= 1500 && (defined _M_IX86 || defined _M_X64) # define USE_MSC_POPCOUNT #elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # define USE_GCC_POPCOUNT @@ -2984,8 +2983,7 @@ bool_vector_spare_mask (ptrdiff_t nr_bits) #endif #ifdef NEED_GENERIC_POPCOUNT -static inline -unsigned int +static unsigned int popcount_size_t_generic (size_t val) { unsigned short j; @@ -2999,8 +2997,7 @@ popcount_size_t_generic (size_t val) #endif #ifdef USE_MSC_POPCOUNT -static inline -unsigned int +static unsigned int popcount_size_t_msc (size_t val) { unsigned int count; @@ -3045,8 +3042,7 @@ popcount_size_t_msc (size_t val) #endif /* USE_MSC_POPCOUNT */ #ifdef USE_GCC_POPCOUNT -static inline -unsigned int +static unsigned int popcount_size_t_gcc (size_t val) { # if BITS_PER_SIZE_T == 64 @@ -3057,9 +3053,8 @@ popcount_size_t_gcc (size_t val) } #endif /* USE_GCC_POPCOUNT */ -static inline -unsigned int -popcount_size_t(size_t val) +static unsigned int +popcount_size_t (size_t val) { #if defined USE_MSC_POPCOUNT return popcount_size_t_msc (val); @@ -3067,7 +3062,7 @@ popcount_size_t(size_t val) return popcount_size_t_gcc (val); #else return popcount_size_t_generic (val); - #endif +#endif } enum bool_vector_op { bool_vector_exclusive_or, @@ -3076,8 +3071,7 @@ enum bool_vector_op { bool_vector_exclusive_or, bool_vector_set_difference, bool_vector_subsetp }; -static inline -Lisp_Object +static Lisp_Object bool_vector_binop_driver (Lisp_Object op1, Lisp_Object op2, Lisp_Object dest, @@ -3108,11 +3102,11 @@ bool_vector_binop_driver (Lisp_Object op1, } eassert_and_assume (nr_bits >= 0); - nr_words = ROUNDUP(nr_bits, BITS_PER_SIZE_T) / BITS_PER_SIZE_T; - - adata = (size_t*) XBOOL_VECTOR (dest)->data; - bdata = (size_t*) XBOOL_VECTOR (op1)->data; - cdata = (size_t*) XBOOL_VECTOR (op2)->data; + nr_words = ROUNDUP (nr_bits, BITS_PER_SIZE_T) / BITS_PER_SIZE_T; + + adata = (size_t *) XBOOL_VECTOR (dest)->data; + bdata = (size_t *) XBOOL_VECTOR (op1)->data; + cdata = (size_t *) XBOOL_VECTOR (op2)->data; i = 0; do { @@ -3132,16 +3126,16 @@ bool_vector_binop_driver (Lisp_Object op1, if (op != bool_vector_subsetp) adata[i] = mword; - i += 1; + i++; } while (i < nr_words); + return changed ? dest : Qnil; } /* Compute the number of trailing zero bits in val. If val is zero, return the number of bits in val. */ -static inline -unsigned int +static unsigned int count_trailing_zero_bits (size_t val) { if (val == 0) @@ -3151,7 +3145,7 @@ count_trailing_zero_bits (size_t val) return __builtin_ctzll (val); #elif defined USE_GCC_POPCOUNT && BITS_PER_SIZE_T == 32 return __builtin_ctz (val); -#elif __MSC_VER && BITS_PER_SIZE_T == 64 +#elif _MSC_VER && BITS_PER_SIZE_T == 64 # pragma intrinsic _BitScanForward64 { /* No support test needed: support since 386. */ @@ -3159,7 +3153,7 @@ count_trailing_zero_bits (size_t val) _BitScanForward64 (&result, val); return (unsigned int) result; } -#elif __MSC_VER && BITS_PER_SIZE_T == 32 +#elif _MSC_VER && BITS_PER_SIZE_T == 32 # pragma intrinsic _BitScanForward { /* No support test needed: support since 386. */ @@ -3171,7 +3165,7 @@ count_trailing_zero_bits (size_t val) { unsigned int count; count = 0; - for(val = ~val; val & 1; val >>= 1) + for (val = ~val; val & 1; val >>= 1) ++count; return count; @@ -3179,8 +3173,7 @@ count_trailing_zero_bits (size_t val) #endif } -static inline -size_t +static size_t size_t_to_host_endian (size_t val) { #ifdef WORDS_BIGENDIAN @@ -3272,17 +3265,13 @@ Return the destination vector. */) nr_bits = min (nr_bits, XBOOL_VECTOR (b)->size); } - bdata = (size_t*) XBOOL_VECTOR (b)->data; - adata = (size_t*) XBOOL_VECTOR (a)->data; - i = 0; + bdata = (size_t *) XBOOL_VECTOR (b)->data; + adata = (size_t *) XBOOL_VECTOR (a)->data; eassert_and_assume (nr_bits >= 0); - while (i < nr_bits / BITS_PER_SIZE_T) - { - bdata[i] = ~adata[i]; - i += 1; - } + for (i = 0; i < nr_bits / BITS_PER_SIZE_T; i++) + bdata[i] = ~adata[i]; if (nr_bits % BITS_PER_SIZE_T) { @@ -3298,7 +3287,7 @@ Return the destination vector. */) DEFUN ("bool-vector-count-matches", Fbool_vector_count_matches, Sbool_vector_count_matches, 2, 2, 0, doc: /* Count how many elements in A equal B. -A must be a bool vector. B is a generalized bool. */) +A must be a bool vector. B is a generalized bool. */) (Lisp_Object a, Lisp_Object b) { ptrdiff_t count; @@ -3312,11 +3301,11 @@ A must be a bool vector. B is a generalized bool. */) nr_bits = XBOOL_VECTOR (a)->size; count = 0; match = NILP (b) ? (size_t) -1 : 0; - adata = (size_t*) XBOOL_VECTOR (a)->data; + adata = (size_t *) XBOOL_VECTOR (a)->data; eassert_and_assume (nr_bits >= 0); - for(i = 0; i < nr_bits / BITS_PER_SIZE_T; ++i) + for (i = 0; i < nr_bits / BITS_PER_SIZE_T; ++i) count += popcount_size_t (adata[i] ^ match); /* Mask out trailing parts of final mword. */ @@ -3335,7 +3324,7 @@ DEFUN ("bool-vector-count-matches-at", Sbool_vector_count_matches_at, 3, 3, 0, doc: /* Count how many consecutive elements in A equal B at i. A must be a bool vector. B is a generalized boolean. i is an -index into the vector.*/) +index into the vector. */) (Lisp_Object a, Lisp_Object b, Lisp_Object i) { ptrdiff_t count; @@ -3354,11 +3343,11 @@ index into the vector.*/) if (XFASTINT (i) > nr_bits) /* Allow one past the end for convenience */ args_out_of_range (a, i); - adata = (size_t*) XBOOL_VECTOR (a)->data; + adata = (size_t *) XBOOL_VECTOR (a)->data; assume (nr_bits >= 0); nr_words = ROUNDUP (nr_bits, BITS_PER_SIZE_T) / BITS_PER_SIZE_T; - + pos = XFASTINT (i) / BITS_PER_SIZE_T; offset = XFASTINT (i) % BITS_PER_SIZE_T; count = 0; @@ -3376,7 +3365,7 @@ index into the vector.*/) mword >>= offset; count = count_trailing_zero_bits (mword); count = min (count, BITS_PER_SIZE_T - offset); - pos += 1; + pos++; if (count + offset < BITS_PER_SIZE_T) return make_number (count); } diff --git a/src/lisp.h b/src/lisp.h index a9a2c259b5b..f49a2042b1b 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -4359,15 +4359,13 @@ functionp (Lisp_Object object) return 0; } -INLINE -uint16_t +INLINE uint16_t swap16 (uint16_t val) { return (val << 8) | (val & 0xFF); } -INLINE -uint32_t +INLINE uint32_t swap32 (uint32_t val) { uint32_t low = swap16 (val & 0xFFFF); @@ -4376,8 +4374,7 @@ swap32 (uint32_t val) } #ifdef UINT64_MAX -INLINE -uint64_t +INLINE uint64_t swap64 (uint64_t val) { uint64_t low = swap32 (val & 0xFFFFFFFF); diff --git a/src/xdisp.c b/src/xdisp.c index e1143bec1c0..6d19531aab6 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1882,8 +1882,7 @@ pixel_to_glyph_coords (struct frame *f, register int pix_x, register int pix_y, text, or we can't tell because W's current matrix is not up to date. */ -static -struct glyph * +static struct glyph * x_y_to_hpos_vpos (struct window *w, int x, int y, int *hpos, int *vpos, int *dx, int *dy, int *area) { From ec7bc82f9c63b6ec533f7489e67b1c1b18d08dd5 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 24 Sep 2013 09:42:30 +0400 Subject: [PATCH 310/321] Optimize glyph row clearing and copying routines. * dispextern.h (struct glyph_row): Change layout of struct glyph_row to help copy_row_except_pointers. Adjust comment. * dispnew.c (null_row): Remove. (clear_glyph_row): Use offsetof and memset to find and clear just the members that need clearing. Adjust comment. (copy_row_except_pointers): Likewise for copying. --- src/ChangeLog | 10 ++++++++ src/dispextern.h | 18 ++++++++------ src/dispnew.c | 61 +++++++++++------------------------------------- 3 files changed, 34 insertions(+), 55 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 303eb4f9176..28b4da176ae 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2013-09-24 Dmitry Antipov + + Optimize glyph row clearing and copying routines. + * dispextern.h (struct glyph_row): Change layout of struct + glyph_row to help copy_row_except_pointers. Adjust comment. + * dispnew.c (null_row): Remove. + (clear_glyph_row): Use offsetof and memset to find and clear + just the members that need clearing. Adjust comment. + (copy_row_except_pointers): Likewise for copying. + 2013-09-24 Paul Eggert Some minor cleanups of recently-added bool vector code. diff --git a/src/dispextern.h b/src/dispextern.h index 84111bd9958..5ddc177bcf0 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -792,7 +792,10 @@ enum glyph_row_area Rows in window matrices on frames having no frame matrices point to glyphs allocated from the heap via xmalloc; glyphs[LEFT_MARGIN_AREA] is the start address of the allocated - glyph structure array. */ + glyph structure array. + + NOTE: layout of first four members of this structure is important, + see clear_glyph_row and copy_row_except_pointers to check why. */ struct glyph_row { @@ -812,8 +815,13 @@ struct glyph_row removed some day, so don't use it in new code. */ struct glyph *glyphs[1 + LAST_AREA]; - /* Number of glyphs actually filled in areas. */ - short used[LAST_AREA]; + /* Number of glyphs actually filled in areas. This could have size + LAST_AREA, but it's 1 + LAST_AREA to simplify offset calculations. */ + short used[1 + LAST_AREA]; + + /* Hash code. This hash code is available as soon as the row + is constructed, i.e. after a call to display_line. */ + unsigned hash; /* Window-relative x and y-position of the top-left corner of this row. If y < 0, this means that eabs (y) pixels of the row are @@ -846,10 +854,6 @@ struct glyph_row in last row when checking if row is fully visible. */ int extra_line_spacing; - /* Hash code. This hash code is available as soon as the row - is constructed, i.e. after a call to display_line. */ - unsigned hash; - /* First position in this row. This is the text position, including overlay position information etc, where the display of this row started, and can thus be less than the position of the first diff --git a/src/dispnew.c b/src/dispnew.c index 4ec989280ea..f7e3fa54441 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -832,41 +832,17 @@ clear_window_matrices (struct window *w, bool desired_p) See dispextern.h for an overall explanation of glyph rows. ***********************************************************************/ -/* Clear glyph row ROW. Do it in a way that makes it robust against - changes in the glyph_row structure, i.e. addition or removal of - structure members. */ - -static struct glyph_row null_row; +/* Clear glyph row ROW. NOTE: this code relies on the current + layout of `glyphs' and `used' fields of `struct glyph_row'. */ void clear_glyph_row (struct glyph_row *row) { - struct glyph *p[1 + LAST_AREA]; + const size_t off = offsetof (struct glyph_row, used); - /* Save pointers. */ - p[LEFT_MARGIN_AREA] = row->glyphs[LEFT_MARGIN_AREA]; - p[TEXT_AREA] = row->glyphs[TEXT_AREA]; - p[RIGHT_MARGIN_AREA] = row->glyphs[RIGHT_MARGIN_AREA]; - p[LAST_AREA] = row->glyphs[LAST_AREA]; - - /* Clear. */ - *row = null_row; - - /* Restore pointers. */ - row->glyphs[LEFT_MARGIN_AREA] = p[LEFT_MARGIN_AREA]; - row->glyphs[TEXT_AREA] = p[TEXT_AREA]; - row->glyphs[RIGHT_MARGIN_AREA] = p[RIGHT_MARGIN_AREA]; - row->glyphs[LAST_AREA] = p[LAST_AREA]; - -#if 0 /* At some point, some bit-fields of struct glyph were not set, - which made glyphs unequal when compared with GLYPH_EQUAL_P. - Redisplay outputs such glyphs, and flickering effects were - the result. This also depended on the contents of memory - returned by xmalloc. If flickering happens again, activate - the code below. If the flickering is gone with that, chances - are that the flickering has the same reason as here. */ - memset (p[0], 0, (char *) p[LAST_AREA] - (char *) p[0]); -#endif + eassert (off == sizeof row->glyphs); + /* Zero everything except pointers in `glyphs'. */ + memset ((char *) row + off, 0, sizeof *row - off); } @@ -1005,29 +981,18 @@ swap_glyph_pointers (struct glyph_row *a, struct glyph_row *b) } -/* Copy glyph row structure FROM to glyph row structure TO, except - that glyph pointers, the `used' counts, and the hash values in the - structures are left unchanged. */ +/* Copy glyph row structure FROM to glyph row structure TO, except that + glyph pointers, the `used' counts, and the hash values in the structures + are left unchanged. NOTE: this code relies on the current layout of + `glyphs', `used', `hash' and `x' fields of `struct glyph_row'. */ static void copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from) { - struct glyph *pointers[1 + LAST_AREA]; - short used[LAST_AREA]; - unsigned hashval; + const size_t off = offsetof (struct glyph_row, x); - /* Save glyph pointers of TO. */ - memcpy (pointers, to->glyphs, sizeof to->glyphs); - memcpy (used, to->used, sizeof to->used); - hashval = to->hash; - - /* Do a structure assignment. */ - *to = *from; - - /* Restore original pointers of TO. */ - memcpy (to->glyphs, pointers, sizeof to->glyphs); - memcpy (to->used, used, sizeof to->used); - to->hash = hashval; + eassert (off == sizeof to->glyphs + sizeof to->used + sizeof to->hash); + memcpy ((char *) to + off, (char *) from + off, sizeof *to - off); } From d6d9cbc15cbebfe466756a7a75601173c15287a2 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Tue, 24 Sep 2013 10:43:20 +0400 Subject: [PATCH 311/321] Use union for the payload of struct Lisp_Vector. This helps to avoid a few glitches dictated by C's aliasing rules. * lisp.h (struct Lisp_Vector): Use union for next and contents member. Adjust comment. Change related users. * alloc.c (next_in_free_list, set_next_in_free_list): Remove. Related users changed. * buffer.c, bytecode.c, ccl.c, character.h, chartab.c, composite.c: * composite.h, disptab.h, fns.c, fontset.c, indent.c, keyboard.c: * lread.c, msdos.c, process.c, w32menu.c, window.c, xdisp.c: * xfaces.c, xfont.c, xmenu.c: Related users changed. --- src/ChangeLog | 13 +++++++++++++ src/alloc.c | 48 ++++++++++++++++-------------------------------- src/buffer.c | 2 +- src/bytecode.c | 2 +- src/ccl.c | 8 ++++---- src/character.h | 2 +- src/chartab.c | 4 ++-- src/composite.c | 2 +- src/composite.h | 8 ++++---- src/disptab.h | 2 +- src/fns.c | 8 ++++---- src/fontset.c | 2 +- src/indent.c | 6 +++--- src/keyboard.c | 17 ++++++++--------- src/lisp.h | 23 +++++++++++++++-------- src/lread.c | 2 +- src/msdos.c | 2 +- src/process.c | 28 ++++++++++++++-------------- src/w32menu.c | 2 +- src/window.c | 2 +- src/xdisp.c | 10 +++++----- src/xfaces.c | 30 +++++++++++++++--------------- src/xfont.c | 2 +- src/xmenu.c | 4 ++-- 24 files changed, 116 insertions(+), 113 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 28b4da176ae..a2eb39e7196 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2013-09-24 Dmitry Antipov + + Use union for the payload of struct Lisp_Vector. + This helps to avoid a few glitches dictated by C's aliasing rules. + * lisp.h (struct Lisp_Vector): Use union for next and + contents member. Adjust comment. Change related users. + * alloc.c (next_in_free_list, set_next_in_free_list): Remove. + Related users changed. + * buffer.c, bytecode.c, ccl.c, character.h, chartab.c, composite.c: + * composite.h, disptab.h, fns.c, fontset.c, indent.c, keyboard.c: + * lread.c, msdos.c, process.c, w32menu.c, window.c, xdisp.c: + * xfaces.c, xfont.c, xmenu.c: Related users changed. + 2013-09-24 Dmitry Antipov Optimize glyph row clearing and copying routines. diff --git a/src/alloc.c b/src/alloc.c index e380d66cb1b..ca21ba2469b 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -2647,22 +2647,6 @@ verify (VECTOR_BLOCK_SIZE <= (1 << PSEUDOVECTOR_SIZE_BITS)); #define VINDEX(nbytes) (((nbytes) - VBLOCK_BYTES_MIN) / roundup_size) -/* Get and set the next field in block-allocated vectorlike objects on - the free list. Doing it this way respects C's aliasing rules. - We could instead make 'contents' a union, but that would mean - changes everywhere that the code uses 'contents'. */ -static struct Lisp_Vector * -next_in_free_list (struct Lisp_Vector *v) -{ - intptr_t i = XLI (v->contents[0]); - return (struct Lisp_Vector *) i; -} -static void -set_next_in_free_list (struct Lisp_Vector *v, struct Lisp_Vector *next) -{ - v->contents[0] = XIL ((intptr_t) next); -} - /* Common shortcut to setup vector on a free list. */ #define SETUP_ON_FREE_LIST(v, nbytes, tmp) \ @@ -2672,7 +2656,7 @@ set_next_in_free_list (struct Lisp_Vector *v, struct Lisp_Vector *next) eassert ((nbytes) % roundup_size == 0); \ (tmp) = VINDEX (nbytes); \ eassert ((tmp) < VECTOR_MAX_FREE_LIST_INDEX); \ - set_next_in_free_list (v, vector_free_lists[tmp]); \ + v->u.next = vector_free_lists[tmp]; \ vector_free_lists[tmp] = (v); \ total_free_vector_slots += (nbytes) / word_size; \ } while (0) @@ -2769,7 +2753,7 @@ allocate_vector_from_block (size_t nbytes) if (vector_free_lists[index]) { vector = vector_free_lists[index]; - vector_free_lists[index] = next_in_free_list (vector); + vector_free_lists[index] = vector->u.next; total_free_vector_slots -= nbytes / word_size; return vector; } @@ -2783,7 +2767,7 @@ allocate_vector_from_block (size_t nbytes) { /* This vector is larger than requested. */ vector = vector_free_lists[index]; - vector_free_lists[index] = next_in_free_list (vector); + vector_free_lists[index] = vector->u.next; total_free_vector_slots -= nbytes / word_size; /* Excess bytes are used for the smaller vector, @@ -2981,7 +2965,7 @@ allocate_vectorlike (ptrdiff_t len) else { struct large_vector *lv - = lisp_malloc ((offsetof (struct large_vector, v.contents) + = lisp_malloc ((offsetof (struct large_vector, v.u.contents) + len * word_size), MEM_TYPE_VECTORLIKE); lv->next.vector = large_vectors; @@ -3035,7 +3019,7 @@ allocate_pseudovector (int memlen, int lisplen, enum pvec_type tag) /* Only the first lisplen slots will be traced normally by the GC. */ for (i = 0; i < lisplen; ++i) - v->contents[i] = Qnil; + v->u.contents[i] = Qnil; XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen); return v; @@ -3123,7 +3107,7 @@ See also the function `vector'. */) p = allocate_vector (XFASTINT (length)); sizei = XFASTINT (length); for (i = 0; i < sizei; i++) - p->contents[i] = init; + p->u.contents[i] = init; XSETVECTOR (vector, p); return vector; @@ -3141,21 +3125,21 @@ usage: (vector &rest OBJECTS) */) register struct Lisp_Vector *p = XVECTOR (val); for (i = 0; i < nargs; i++) - p->contents[i] = args[i]; + p->u.contents[i] = args[i]; return val; } void make_byte_code (struct Lisp_Vector *v) { - if (v->header.size > 1 && STRINGP (v->contents[1]) - && STRING_MULTIBYTE (v->contents[1])) + if (v->header.size > 1 && STRINGP (v->u.contents[1]) + && STRING_MULTIBYTE (v->u.contents[1])) /* BYTECODE-STRING must have been produced by Emacs 20.2 or the earlier because they produced a raw 8-bit string for byte-code and now such a byte-code string is loaded as multibyte while raw 8-bit characters converted to multibyte form. Thus, now we must convert them back to the original unibyte form. */ - v->contents[1] = Fstring_as_unibyte (v->contents[1]); + v->u.contents[1] = Fstring_as_unibyte (v->u.contents[1]); XSETPVECTYPE (v, PVEC_COMPILED); } @@ -3190,7 +3174,7 @@ usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INT to be setcar'd). */ for (i = 0; i < nargs; i++) - p->contents[i] = args[i]; + p->u.contents[i] = args[i]; make_byte_code (p); XSETCOMPILED (val, p); return val; @@ -5183,7 +5167,7 @@ Does not copy symbols. Copies strings without text properties. */) size &= PSEUDOVECTOR_SIZE_MASK; vec = XVECTOR (make_pure_vector (size)); for (i = 0; i < size; i++) - vec->contents[i] = Fpurecopy (AREF (obj, i)); + vec->u.contents[i] = Fpurecopy (AREF (obj, i)); if (COMPILEDP (obj)) { XSETPVECTYPE (vec, PVEC_COMPILED); @@ -5674,7 +5658,7 @@ mark_vectorlike (struct Lisp_Vector *ptr) The distinction is used e.g. by Lisp_Process which places extra non-Lisp_Object fields at the end of the structure... */ for (i = 0; i < size; i++) /* ...and then mark its elements. */ - mark_object (ptr->contents[i]); + mark_object (ptr->u.contents[i]); } /* Like mark_vectorlike but optimized for char-tables (and @@ -5691,7 +5675,7 @@ mark_char_table (struct Lisp_Vector *ptr) VECTOR_MARK (ptr); for (i = 0; i < size; i++) { - Lisp_Object val = ptr->contents[i]; + Lisp_Object val = ptr->u.contents[i]; if (INTEGERP (val) || (SYMBOLP (val) && XSYMBOL (val)->gcmarkbit)) continue; @@ -5896,10 +5880,10 @@ mark_object (Lisp_Object arg) VECTOR_MARK (ptr); for (i = 0; i < size; i++) if (i != COMPILED_CONSTANTS) - mark_object (ptr->contents[i]); + mark_object (ptr->u.contents[i]); if (size > COMPILED_CONSTANTS) { - obj = ptr->contents[COMPILED_CONSTANTS]; + obj = ptr->u.contents[COMPILED_CONSTANTS]; goto loop; } } diff --git a/src/buffer.c b/src/buffer.c index 815f3926c55..1570f3831ac 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -4534,7 +4534,7 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, bool after, Lisp_Object *copy = alloca (size * sizeof *copy); ptrdiff_t i; - memcpy (copy, XVECTOR (last_overlay_modification_hooks)->contents, + memcpy (copy, XVECTOR (last_overlay_modification_hooks)->u.contents, size * word_size); gcpro1.var = copy; gcpro1.nvars = size; diff --git a/src/bytecode.c b/src/bytecode.c index 3ac8b452fbe..23e50826633 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -536,7 +536,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, #ifdef BYTE_CODE_SAFE bytestr_length = SBYTES (bytestr); #endif - vectorp = XVECTOR (vector)->contents; + vectorp = XVECTOR (vector)->u.contents; stack.byte_string = bytestr; stack.pc = stack.byte_string_start = SDATA (bytestr); diff --git a/src/ccl.c b/src/ccl.c index 8fec18296a6..d1783c25718 100644 --- a/src/ccl.c +++ b/src/ccl.c @@ -1094,7 +1094,7 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size ccl_prog_stack_struct[stack_idx].ic = ic; ccl_prog_stack_struct[stack_idx].eof_ic = eof_ic; stack_idx++; - ccl_prog = XVECTOR (AREF (slot, 1))->contents; + ccl_prog = XVECTOR (AREF (slot, 1))->u.contents; ic = CCL_HEADER_MAIN; eof_ic = XFASTINT (ccl_prog[CCL_HEADER_EOF]); } @@ -1936,9 +1936,9 @@ setup_ccl_program (struct ccl_program *ccl, Lisp_Object ccl_prog) return -1; vp = XVECTOR (ccl_prog); ccl->size = vp->header.size; - ccl->prog = vp->contents; - ccl->eof_ic = XINT (vp->contents[CCL_HEADER_EOF]); - ccl->buf_magnification = XINT (vp->contents[CCL_HEADER_BUF_MAG]); + ccl->prog = vp->u.contents; + ccl->eof_ic = XINT (vp->u.contents[CCL_HEADER_EOF]); + ccl->buf_magnification = XINT (vp->u.contents[CCL_HEADER_BUF_MAG]); if (ccl->idx >= 0) { Lisp_Object slot; diff --git a/src/character.h b/src/character.h index cb03cb39947..d1b781caa53 100644 --- a/src/character.h +++ b/src/character.h @@ -677,7 +677,7 @@ extern Lisp_Object string_escape_byte8 (Lisp_Object); /* Return a translation table of id number ID. */ #define GET_TRANSLATION_TABLE(id) \ - (XCDR(XVECTOR(Vtranslation_table_vector)->contents[(id)])) + (XCDR (XVECTOR (Vtranslation_table_vector)->u.contents[(id)])) INLINE_HEADER_END diff --git a/src/chartab.c b/src/chartab.c index b7b9590a538..089c4254da6 100644 --- a/src/chartab.c +++ b/src/chartab.c @@ -1258,7 +1258,7 @@ uniprop_encode_value_character (Lisp_Object table, Lisp_Object value) static Lisp_Object uniprop_encode_value_run_length (Lisp_Object table, Lisp_Object value) { - Lisp_Object *value_table = XVECTOR (XCHAR_TABLE (table)->extras[4])->contents; + Lisp_Object *value_table = XVECTOR (XCHAR_TABLE (table)->extras[4])->u.contents; int i, size = ASIZE (XCHAR_TABLE (table)->extras[4]); for (i = 0; i < size; i++) @@ -1276,7 +1276,7 @@ uniprop_encode_value_run_length (Lisp_Object table, Lisp_Object value) static Lisp_Object uniprop_encode_value_numeric (Lisp_Object table, Lisp_Object value) { - Lisp_Object *value_table = XVECTOR (XCHAR_TABLE (table)->extras[4])->contents; + Lisp_Object *value_table = XVECTOR (XCHAR_TABLE (table)->extras[4])->u.contents; int i, size = ASIZE (XCHAR_TABLE (table)->extras[4]); CHECK_NUMBER (value); diff --git a/src/composite.c b/src/composite.c index 47cac715086..4f125522e38 100644 --- a/src/composite.c +++ b/src/composite.c @@ -266,7 +266,7 @@ get_composition_id (ptrdiff_t charpos, ptrdiff_t bytepos, ptrdiff_t nchars, composition_table = xpalloc (composition_table, &composition_table_size, 1, -1, sizeof *composition_table); - key_contents = XVECTOR (key)->contents; + key_contents = XVECTOR (key)->u.contents; /* Check if the contents of COMPONENTS are valid if COMPONENTS is a vector or a list. It should be a sequence of: diff --git a/src/composite.h b/src/composite.h index 9026d03f7b6..b3ea5cd1ed8 100644 --- a/src/composite.h +++ b/src/composite.h @@ -88,8 +88,8 @@ composition_registered_p (Lisp_Object prop) #define COMPOSITION_GLYPH(cmp, n) \ XINT (XVECTOR (XVECTOR (XHASH_TABLE (composition_hash_table) \ ->key_and_value) \ - ->contents[cmp->hash_index * 2]) \ - ->contents[cmp->method == COMPOSITION_WITH_RULE_ALTCHARS \ + ->u.contents[cmp->hash_index * 2]) \ + ->u.contents[cmp->method == COMPOSITION_WITH_RULE_ALTCHARS \ ? (n) * 2 : (n)]) /* Return the encoded composition rule to compose the Nth glyph of @@ -98,8 +98,8 @@ composition_registered_p (Lisp_Object prop) #define COMPOSITION_RULE(cmp, n) \ XINT (XVECTOR (XVECTOR (XHASH_TABLE (composition_hash_table) \ ->key_and_value) \ - ->contents[cmp->hash_index * 2]) \ - ->contents[(n) * 2 - 1]) + ->u.contents[cmp->hash_index * 2]) \ + ->u.contents[(n) * 2 - 1]) /* Decode encoded composition rule RULE_CODE into GREF (global reference point code), NREF (new ref. point code). Don't check RULE_CODE; diff --git a/src/disptab.h b/src/disptab.h index e02bab04bbc..87dc5a22a68 100644 --- a/src/disptab.h +++ b/src/disptab.h @@ -59,7 +59,7 @@ extern Lisp_Object Qdisplay_table; /* Return the current base (for indexing) of the GLYPH table, or 0 if the table isn't currently valid. */ #define GLYPH_TABLE_BASE \ - ((VECTORP (Vglyph_table)) ? XVECTOR (Vglyph_table)->contents : 0) + ((VECTORP (Vglyph_table)) ? XVECTOR (Vglyph_table)->u.contents : 0) /* Given BASE and LEN returned by the two previous macros, return nonzero if the GLYPH code G should be output as a single diff --git a/src/fns.c b/src/fns.c index de90fd731fb..e4618919640 100644 --- a/src/fns.c +++ b/src/fns.c @@ -1604,7 +1604,7 @@ changing the value of a sequence `foo'. */) for (i = n = 0; i < ASIZE (seq); ++i) if (NILP (Fequal (AREF (seq, i), elt))) - p->contents[n++] = AREF (seq, i); + p->u.contents[n++] = AREF (seq, i); XSETVECTOR (seq, p); } @@ -3450,7 +3450,7 @@ larger_vector (Lisp_Object vec, ptrdiff_t incr_min, ptrdiff_t nitems_max) { struct Lisp_Vector *v; ptrdiff_t i, incr, incr_max, old_size, new_size; - ptrdiff_t C_language_max = min (PTRDIFF_MAX, SIZE_MAX) / sizeof *v->contents; + ptrdiff_t C_language_max = min (PTRDIFF_MAX, SIZE_MAX) / sizeof *v->u.contents; ptrdiff_t n_max = (0 <= nitems_max && nitems_max < C_language_max ? nitems_max : C_language_max); eassert (VECTORP (vec)); @@ -3462,9 +3462,9 @@ larger_vector (Lisp_Object vec, ptrdiff_t incr_min, ptrdiff_t nitems_max) memory_full (SIZE_MAX); new_size = old_size + incr; v = allocate_vector (new_size); - memcpy (v->contents, XVECTOR (vec)->contents, old_size * sizeof *v->contents); + memcpy (v->u.contents, XVECTOR (vec)->u.contents, old_size * sizeof *v->u.contents); for (i = old_size; i < new_size; ++i) - v->contents[i] = Qnil; + v->u.contents[i] = Qnil; XSETVECTOR (vec, v); return vec; } diff --git a/src/fontset.c b/src/fontset.c index 797d51ac0a7..15fdf9f41a0 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -453,7 +453,7 @@ reorder_font_vector (Lisp_Object font_group, struct font *font) } if (score_changed) - qsort (XVECTOR (vec)->contents, size, word_size, + qsort (XVECTOR (vec)->u.contents, size, word_size, fontset_compare_rfontdef); XSETCAR (font_group, make_number (charset_ordered_list_tick)); } diff --git a/src/indent.c b/src/indent.c index 891b42788ed..d956e627ba9 100644 --- a/src/indent.c +++ b/src/indent.c @@ -118,7 +118,7 @@ disptab_matches_widthtab (struct Lisp_Char_Table *disptab, struct Lisp_Vector *w for (i = 0; i < 256; i++) if (character_width (i, disptab) - != XFASTINT (widthtab->contents[i])) + != XFASTINT (widthtab->u.contents[i])) return 0; return 1; @@ -138,7 +138,7 @@ recompute_width_table (struct buffer *buf, struct Lisp_Char_Table *disptab) eassert (widthtab->header.size == 256); for (i = 0; i < 256; i++) - XSETFASTINT (widthtab->contents[i], character_width (i, disptab)); + XSETFASTINT (widthtab->u.contents[i], character_width (i, disptab)); } /* Allocate or free the width run cache, as requested by the @@ -1136,7 +1136,7 @@ compute_motion (ptrdiff_t from, ptrdiff_t frombyte, EMACS_INT fromvpos, width_run_cache_on_off (); if (dp == buffer_display_table ()) width_table = (VECTORP (BVAR (current_buffer, width_table)) - ? XVECTOR (BVAR (current_buffer, width_table))->contents + ? XVECTOR (BVAR (current_buffer, width_table))->u.contents : 0); else /* If the window has its own display table, we can't use the width diff --git a/src/keyboard.c b/src/keyboard.c index 201b9ec8f5b..05efe7c1312 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -4341,7 +4341,7 @@ decode_timer (Lisp_Object timer, struct timespec *result) if (! (VECTORP (timer) && ASIZE (timer) == 9)) return 0; - vector = XVECTOR (timer)->contents; + vector = XVECTOR (timer)->u.contents; if (! NILP (vector[0])) return 0; @@ -7998,7 +7998,7 @@ process_tool_bar_item (Lisp_Object key, Lisp_Object def, Lisp_Object data, void discard any previously made item. */ for (i = 0; i < ntool_bar_items; i += TOOL_BAR_ITEM_NSLOTS) { - Lisp_Object *v = XVECTOR (tool_bar_items_vector)->contents + i; + Lisp_Object *v = XVECTOR (tool_bar_items_vector)->u.contents + i; if (EQ (key, v[TOOL_BAR_ITEM_KEY])) { @@ -8322,7 +8322,7 @@ append_tool_bar_item (void) /* Append entries from tool_bar_item_properties to the end of tool_bar_items_vector. */ vcopy (tool_bar_items_vector, ntool_bar_items, - XVECTOR (tool_bar_item_properties)->contents, TOOL_BAR_ITEM_NSLOTS); + XVECTOR (tool_bar_item_properties)->u.contents, TOOL_BAR_ITEM_NSLOTS); ntool_bar_items += TOOL_BAR_ITEM_NSLOTS; } @@ -9919,7 +9919,7 @@ DEFUN ("recent-keys", Frecent_keys, Srecent_keys, 0, 0, 0, doc: /* Return vector of last 300 events, not counting those from keyboard macros. */) (void) { - Lisp_Object *keys = XVECTOR (recent_keys)->contents; + Lisp_Object *keys = XVECTOR (recent_keys)->u.contents; Lisp_Object val; if (total_keys < NUM_RECENT_KEYS) @@ -9945,7 +9945,7 @@ See also `this-command-keys-vector'. */) (void) { return make_event_array (this_command_key_count, - XVECTOR (this_command_keys)->contents); + XVECTOR (this_command_keys)->u.contents); } DEFUN ("this-command-keys-vector", Fthis_command_keys_vector, Sthis_command_keys_vector, 0, 0, 0, @@ -9957,7 +9957,7 @@ See also `this-command-keys'. */) (void) { return Fvector (this_command_key_count, - XVECTOR (this_command_keys)->contents); + XVECTOR (this_command_keys)->u.contents); } DEFUN ("this-single-command-keys", Fthis_single_command_keys, @@ -9972,7 +9972,7 @@ The value is always a vector. */) { return Fvector (this_command_key_count - this_single_command_key_start, - (XVECTOR (this_command_keys)->contents + (XVECTOR (this_command_keys)->u.contents + this_single_command_key_start)); } @@ -9986,8 +9986,7 @@ shows the events before all translations (except for input methods). The value is always a vector. */) (void) { - return Fvector (raw_keybuf_count, - (XVECTOR (raw_keybuf)->contents)); + return Fvector (raw_keybuf_count, XVECTOR (raw_keybuf)->u.contents); } DEFUN ("reset-this-command-lengths", Freset_this_command_lengths, diff --git a/src/lisp.h b/src/lisp.h index f49a2042b1b..63597e86be6 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1136,12 +1136,19 @@ struct vectorlike_header ptrdiff_t size; }; -/* Regular vector is just a header plus array of Lisp_Objects. */ +/* Regular vector is just a header plus array of Lisp_Objects... */ struct Lisp_Vector { struct vectorlike_header header; - Lisp_Object contents[FLEXIBLE_ARRAY_MEMBER]; + union { + /* ...but sometimes there is also a pointer internally used in + vector allocation code. Usually you don't want to touch this. */ + struct Lisp_Vector *next; + + /* We can't use FLEXIBLE_ARRAY_MEMBER here. */ + Lisp_Object contents[1]; + } u; }; /* A boolvector is a kind of vectorlike, with contents are like a string. */ @@ -1162,7 +1169,7 @@ struct Lisp_Bool_Vector enum { - header_size = offsetof (struct Lisp_Vector, contents), + header_size = offsetof (struct Lisp_Vector, u.contents), bool_header_size = offsetof (struct Lisp_Bool_Vector, data), word_size = sizeof (Lisp_Object) }; @@ -1172,13 +1179,13 @@ enum INLINE Lisp_Object AREF (Lisp_Object array, ptrdiff_t idx) { - return XVECTOR (array)->contents[idx]; + return XVECTOR (array)->u.contents[idx]; } INLINE Lisp_Object * aref_addr (Lisp_Object array, ptrdiff_t idx) { - return & XVECTOR (array)->contents[idx]; + return & XVECTOR (array)->u.contents[idx]; } INLINE ptrdiff_t @@ -1191,7 +1198,7 @@ INLINE void ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Object val) { eassert (0 <= idx && idx < ASIZE (array)); - XVECTOR (array)->contents[idx] = val; + XVECTOR (array)->u.contents[idx] = val; } INLINE void @@ -1200,7 +1207,7 @@ gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object val) /* Like ASET, but also can be used in the garbage collector: sweep_weak_table calls set_hash_key etc. while the table is marked. */ eassert (0 <= idx && idx < (ASIZE (array) & ~ARRAY_MARK_FLAG)); - XVECTOR (array)->contents[idx] = val; + XVECTOR (array)->u.contents[idx] = val; } /* If a struct is made to look like a vector, this macro returns the length @@ -3028,7 +3035,7 @@ INLINE void vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Object *args, ptrdiff_t count) { eassert (0 <= offset && 0 <= count && offset + count <= ASIZE (v)); - memcpy (XVECTOR (v)->contents + offset, args, count * sizeof *args); + memcpy (XVECTOR (v)->u.contents + offset, args, count * sizeof *args); } /* Functions to modify hash tables. */ diff --git a/src/lread.c b/src/lread.c index 9518631ba6d..017dfcb11a5 100644 --- a/src/lread.c +++ b/src/lread.c @@ -3459,7 +3459,7 @@ read_vector (Lisp_Object readcharfun, bool bytecodeflag) vector = Fmake_vector (len, Qnil); size = ASIZE (vector); - ptr = XVECTOR (vector)->contents; + ptr = XVECTOR (vector)->u.contents; for (i = 0; i < size; i++) { item = Fcar (tem); diff --git a/src/msdos.c b/src/msdos.c index 09aedf837d8..aef75120293 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -2394,7 +2394,7 @@ Each input key receives two values in this vector: first the ASCII code, and then the scan code. */) (void) { - Lisp_Object val, *keys = XVECTOR (recent_doskeys)->contents; + Lisp_Object val, *keys = XVECTOR (recent_doskeys)->u.contents; if (total_doskeys < NUM_RECENT_DOSKEYS) return Fvector (total_doskeys, keys); diff --git a/src/process.c b/src/process.c index 94f59942a61..fcaa7894779 100644 --- a/src/process.c +++ b/src/process.c @@ -1333,15 +1333,15 @@ Returns nil if format of ADDRESS is invalid. */) for (i = 0; i < nargs; i++) { - if (! RANGED_INTEGERP (0, p->contents[i], 65535)) + if (! RANGED_INTEGERP (0, p->u.contents[i], 65535)) return Qnil; if (nargs <= 5 /* IPv4 */ && i < 4 /* host, not port */ - && XINT (p->contents[i]) > 255) + && XINT (p->u.contents[i]) > 255) return Qnil; - args[i+1] = p->contents[i]; + args[i+1] = p->u.contents[i]; } return Fformat (nargs+1, args); @@ -1980,7 +1980,7 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len) len = sizeof (sin->sin_addr) + 1; address = Fmake_vector (make_number (len), Qnil); p = XVECTOR (address); - p->contents[--len] = make_number (ntohs (sin->sin_port)); + p->u.contents[--len] = make_number (ntohs (sin->sin_port)); cp = (unsigned char *) &sin->sin_addr; break; } @@ -1992,9 +1992,9 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len) len = sizeof (sin6->sin6_addr)/2 + 1; address = Fmake_vector (make_number (len), Qnil); p = XVECTOR (address); - p->contents[--len] = make_number (ntohs (sin6->sin6_port)); + p->u.contents[--len] = make_number (ntohs (sin6->sin6_port)); for (i = 0; i < len; i++) - p->contents[i] = make_number (ntohs (ip6[i])); + p->u.contents[i] = make_number (ntohs (ip6[i])); return address; } #endif @@ -2019,7 +2019,7 @@ conv_sockaddr_to_lisp (struct sockaddr *sa, int len) i = 0; while (i < len) - p->contents[i++] = make_number (*cp++); + p->u.contents[i++] = make_number (*cp++); return address; } @@ -2090,7 +2090,7 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int { struct sockaddr_in *sin = (struct sockaddr_in *) sa; len = sizeof (sin->sin_addr) + 1; - hostport = XINT (p->contents[--len]); + hostport = XINT (p->u.contents[--len]); sin->sin_port = htons (hostport); cp = (unsigned char *)&sin->sin_addr; sa->sa_family = family; @@ -2101,12 +2101,12 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr; len = sizeof (sin6->sin6_addr) + 1; - hostport = XINT (p->contents[--len]); + hostport = XINT (p->u.contents[--len]); sin6->sin6_port = htons (hostport); for (i = 0; i < len; i++) - if (INTEGERP (p->contents[i])) + if (INTEGERP (p->u.contents[i])) { - int j = XFASTINT (p->contents[i]) & 0xffff; + int j = XFASTINT (p->u.contents[i]) & 0xffff; ip6[i] = ntohs (j); } sa->sa_family = family; @@ -2137,8 +2137,8 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int } for (i = 0; i < len; i++) - if (INTEGERP (p->contents[i])) - *cp++ = XFASTINT (p->contents[i]) & 0xff; + if (INTEGERP (p->u.contents[i])) + *cp++ = XFASTINT (p->u.contents[i]) & 0xff; } #ifdef DATAGRAM_SOCKETS @@ -3729,7 +3729,7 @@ FLAGS is the current flags of the interface. */) any = 1; for (n = 0; n < 6; n++) - p->contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]); + p->u.contents[n] = make_number (((unsigned char *)&rq.ifr_hwaddr.sa_data[0])[n]); elt = Fcons (make_number (rq.ifr_hwaddr.sa_family), hwaddr); } #elif defined (HAVE_GETIFADDRS) && defined (LLADDR) diff --git a/src/w32menu.c b/src/w32menu.c index 7435a09b627..b52aae55499 100644 --- a/src/w32menu.c +++ b/src/w32menu.c @@ -421,7 +421,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) /* Save the frame's previous menu bar contents data. */ if (previous_menu_items_used) - memcpy (previous_items, XVECTOR (f->menu_bar_vector)->contents, + memcpy (previous_items, XVECTOR (f->menu_bar_vector)->u.contents, previous_menu_items_used * word_size); /* Fill in menu_items with the current menu bar contents. diff --git a/src/window.c b/src/window.c index 7081df7de89..cca15122522 100644 --- a/src/window.c +++ b/src/window.c @@ -5401,7 +5401,7 @@ struct saved_window }; #define SAVED_WINDOW_N(swv,n) \ - ((struct saved_window *) (XVECTOR ((swv)->contents[(n)]))) + ((struct saved_window *) (XVECTOR ((swv)->u.contents[(n)]))) DEFUN ("window-configuration-p", Fwindow_configuration_p, Swindow_configuration_p, 1, 1, 0, doc: /* Return t if OBJECT is a window-configuration object. */) diff --git a/src/xdisp.c b/src/xdisp.c index 6d19531aab6..0dc34dfbab0 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -4473,8 +4473,8 @@ setup_for_ellipsis (struct it *it, int len) if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp))) { struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp)); - it->dpvec = v->contents; - it->dpend = v->contents + v->header.size; + it->dpvec = v->u.contents; + it->dpend = v->u.contents + v->header.size; } else { @@ -6778,8 +6778,8 @@ get_next_display_element (struct it *it) if (v->header.size) { it->dpvec_char_len = it->len; - it->dpvec = v->contents; - it->dpend = v->contents + v->header.size; + it->dpvec = v->u.contents; + it->dpend = v->u.contents + v->header.size; it->current.dpvec_index = 0; it->dpvec_face_id = -1; it->saved_face_id = it->face_id; @@ -27555,7 +27555,7 @@ on_hot_spot_p (Lisp_Object hot_spot, int x, int y) if (VECTORP (XCDR (hot_spot))) { struct Lisp_Vector *v = XVECTOR (XCDR (hot_spot)); - Lisp_Object *poly = v->contents; + Lisp_Object *poly = v->u.contents; ptrdiff_t n = v->header.size; ptrdiff_t i; int inside = 0; diff --git a/src/xfaces.c b/src/xfaces.c index 335018dfee2..8d78a28eab1 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -1565,7 +1565,7 @@ the face font sort order. */) vec = Fvconcat (ndrivers, drivers); nfonts = ASIZE (vec); - qsort (XVECTOR (vec)->contents, nfonts, word_size, + qsort (XVECTOR (vec)->u.contents, nfonts, word_size, compare_fonts_by_sort_order); result = Qnil; @@ -1830,7 +1830,7 @@ check_lface (Lisp_Object lface) if (!NILP (lface)) { eassert (LFACEP (lface)); - check_lface_attrs (XVECTOR (lface)->contents); + check_lface_attrs (XVECTOR (lface)->u.contents); } } @@ -2007,7 +2007,7 @@ get_lface_attributes_no_remap (struct frame *f, Lisp_Object face_name, lface = lface_from_face_name_no_resolve (f, face_name, signal_p); if (! NILP (lface)) - memcpy (attrs, XVECTOR (lface)->contents, + memcpy (attrs, XVECTOR (lface)->u.contents, LFACE_VECTOR_SIZE * sizeof *attrs); return !NILP (lface); @@ -2690,7 +2690,7 @@ The value is TO. */) copy = Finternal_make_lisp_face (to, new_frame); } - vcopy (copy, 0, XVECTOR (lface)->contents, LFACE_VECTOR_SIZE); + vcopy (copy, 0, XVECTOR (lface)->u.contents, LFACE_VECTOR_SIZE); /* Changing a named face means that all realized faces depending on that face are invalid. Since we cannot tell which realized faces @@ -3093,7 +3093,7 @@ FRAME 0 means change the face on all frames, and change the default f = XFRAME (frame); if (! FONT_OBJECT_P (value)) { - Lisp_Object *attrs = XVECTOR (lface)->contents; + Lisp_Object *attrs = XVECTOR (lface)->u.contents; Lisp_Object font_object; font_object = font_load_for_lface (f, attrs, value); @@ -3161,7 +3161,7 @@ FRAME 0 means change the face on all frames, and change the default the font to nil so that the font selector doesn't think that the attribute is mandatory. Also, clear the average width. */ - font_clear_prop (XVECTOR (lface)->contents, prop_index); + font_clear_prop (XVECTOR (lface)->u.contents, prop_index); } /* Changing a named face means that all realized faces depending on @@ -3191,7 +3191,7 @@ FRAME 0 means change the face on all frames, and change the default reflected in changed `font' frame parameters. */ if (FRAMEP (frame) && (prop_index || EQ (attr, QCfont)) - && lface_fully_specified_p (XVECTOR (lface)->contents)) + && lface_fully_specified_p (XVECTOR (lface)->u.contents)) set_font_frame_param (frame, lface); else #endif /* HAVE_WINDOW_SYSTEM */ @@ -3371,7 +3371,7 @@ set_font_frame_param (Lisp_Object frame, Lisp_Object lface) { if (FONT_SPEC_P (font)) { - font = font_load_for_lface (f, XVECTOR (lface)->contents, font); + font = font_load_for_lface (f, XVECTOR (lface)->u.contents, font); if (NILP (font)) return; ASET (lface, LFACE_FONT_INDEX, font); @@ -3728,8 +3728,8 @@ Default face attributes override any local face attributes. */) the local frame is defined from default specs in `face-defface-spec' and those should be overridden by global settings. Hence the strange "global before local" priority. */ - lvec = XVECTOR (local_lface)->contents; - gvec = XVECTOR (global_lface)->contents; + lvec = XVECTOR (local_lface)->u.contents; + gvec = XVECTOR (global_lface)->u.contents; for (i = 1; i < LFACE_VECTOR_SIZE; ++i) if (IGNORE_DEFFACE_P (gvec[i])) ASET (local_lface, i, Qunspecified); @@ -3913,8 +3913,8 @@ If FRAME is omitted or nil, use the selected frame. */) lface1 = lface_from_face_name (f, face1, 1); lface2 = lface_from_face_name (f, face2, 1); - equal_p = lface_equal_p (XVECTOR (lface1)->contents, - XVECTOR (lface2)->contents); + equal_p = lface_equal_p (XVECTOR (lface1)->u.contents, + XVECTOR (lface2)->u.contents); return equal_p ? Qt : Qnil; } @@ -4651,7 +4651,7 @@ DEFUN ("face-attributes-as-vector", Fface_attributes_as_vector, Lisp_Object lface; lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE), Qunspecified); - merge_face_ref (XFRAME (selected_frame), plist, XVECTOR (lface)->contents, + merge_face_ref (XFRAME (selected_frame), plist, XVECTOR (lface)->u.contents, 1, 0); return lface; } @@ -5331,9 +5331,9 @@ realize_default_face (struct frame *f) ASET (lface, LFACE_STIPPLE_INDEX, Qnil); /* Realize the face; it must be fully-specified now. */ - eassert (lface_fully_specified_p (XVECTOR (lface)->contents)); + eassert (lface_fully_specified_p (XVECTOR (lface)->u.contents)); check_lface (lface); - memcpy (attrs, XVECTOR (lface)->contents, sizeof attrs); + memcpy (attrs, XVECTOR (lface)->u.contents, sizeof attrs); face = realize_face (c, attrs, DEFAULT_FACE_ID); #ifdef HAVE_WINDOW_SYSTEM diff --git a/src/xfont.c b/src/xfont.c index 6a675482ed9..c5b8db3830c 100644 --- a/src/xfont.c +++ b/src/xfont.c @@ -384,7 +384,7 @@ xfont_list_pattern (Display *display, const char *pattern, if (num_fonts > 0) { char **indices = alloca (sizeof (char *) * num_fonts); - Lisp_Object *props = XVECTOR (xfont_scratch_props)->contents; + Lisp_Object *props = XVECTOR (xfont_scratch_props)->u.contents; Lisp_Object scripts = Qnil; for (i = 0; i < ASIZE (xfont_scratch_props); i++) diff --git a/src/xmenu.c b/src/xmenu.c index 1535b00a47f..ad8380a3c3e 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -990,7 +990,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) /* Save the frame's previous menu bar contents data. */ if (previous_menu_items_used) - memcpy (previous_items, XVECTOR (f->menu_bar_vector)->contents, + memcpy (previous_items, XVECTOR (f->menu_bar_vector)->u.contents, previous_menu_items_used * word_size); /* Fill in menu_items with the current menu bar contents. @@ -2187,7 +2187,7 @@ menu_help_callback (char const *help_string, int pane, int item) Lisp_Object pane_name; Lisp_Object menu_object; - first_item = XVECTOR (menu_items)->contents; + first_item = XVECTOR (menu_items)->u.contents; if (EQ (first_item[0], Qt)) pane_name = first_item[MENU_ITEMS_PANE_NAME]; else if (EQ (first_item[0], Qquote)) From 9da0f50e5ab74e7543f169cef831cc8c22ef4f43 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 24 Sep 2013 00:16:38 -0700 Subject: [PATCH 312/321] * dispnew.c (clear_glyph_row, copy_row_except_pointers): Prefer signed to unsigned integers where either will do. No need for 'const' on locals that do not escape. Omit easserts with unnecessary and unportable assumptions about alignment. Avoid unnecessary casts to char *. --- src/ChangeLog | 8 ++++++++ src/dispnew.c | 10 ++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index a2eb39e7196..e4d9ad3b835 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2013-09-24 Paul Eggert + + * dispnew.c (clear_glyph_row, copy_row_except_pointers): + Prefer signed to unsigned integers where either will do. + No need for 'const' on locals that do not escape. + Omit easserts with unnecessary and unportable assumptions about + alignment. Avoid unnecessary casts to char *. + 2013-09-24 Dmitry Antipov Use union for the payload of struct Lisp_Vector. diff --git a/src/dispnew.c b/src/dispnew.c index f7e3fa54441..f9132f37f68 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -838,11 +838,10 @@ clear_window_matrices (struct window *w, bool desired_p) void clear_glyph_row (struct glyph_row *row) { - const size_t off = offsetof (struct glyph_row, used); + int off = offsetof (struct glyph_row, used); - eassert (off == sizeof row->glyphs); /* Zero everything except pointers in `glyphs'. */ - memset ((char *) row + off, 0, sizeof *row - off); + memset (row->used, 0, sizeof *row - off); } @@ -989,10 +988,9 @@ swap_glyph_pointers (struct glyph_row *a, struct glyph_row *b) static void copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from) { - const size_t off = offsetof (struct glyph_row, x); + int off = offsetof (struct glyph_row, x); - eassert (off == sizeof to->glyphs + sizeof to->used + sizeof to->hash); - memcpy ((char *) to + off, (char *) from + off, sizeof *to - off); + memcpy (&to->x, &from->x, sizeof *to - off); } From 10ebac9d6af07da7650c490a39144177a25861e3 Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Tue, 24 Sep 2013 03:48:53 -0800 Subject: [PATCH 313/321] Fix build break due to vector changes --- src/ChangeLog | 5 +++++ src/process.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index e4d9ad3b835..82517661164 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-24 Daniel Colascione + + * process.c (Fnetwork_interface_info): Fix build break due to + vector changes. + 2013-09-24 Paul Eggert * dispnew.c (clear_glyph_row, copy_row_except_pointers): diff --git a/src/process.c b/src/process.c index fcaa7894779..2ed8a690193 100644 --- a/src/process.c +++ b/src/process.c @@ -3752,7 +3752,7 @@ FLAGS is the current flags of the interface. */) memcpy (linkaddr, LLADDR (sdl), sdl->sdl_alen); for (n = 0; n < 6; n++) - p->contents[n] = make_number (linkaddr[n]); + p->u.contents[n] = make_number (linkaddr[n]); elt = Fcons (make_number (it->ifa_addr->sa_family), hwaddr); break; From 4710d6f406ff792aaae65ad141f96346be44909d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 24 Sep 2013 07:53:49 -0700 Subject: [PATCH 314/321] * data.c (POPCOUNT_STATIC_INLINE): New macro, as a hack for popcount. This is ugly, but it should fix the performance problem for older GCC versions in the short run. I'll look into integrating the Gnulib module for popcount, as a better fix. See the thread starting in: http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00474.html (popcount_size_t_generic) [NEED_GENERIC_POPCOUNT]: (popcount_size_t_msc) [USE_MSC_POPCOUNT]: (popcount_size_t_gcc) [USE_GCC_POPCOUNT]: (popcount_size_t): Use it. --- src/ChangeLog | 13 +++++++++++++ src/data.c | 17 ++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 82517661164..90ffce575f9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2013-09-24 Paul Eggert + + * data.c (POPCOUNT_STATIC_INLINE): New macro, as a hack for popcount. + This is ugly, but it should fix the performance problem for older + GCC versions in the short run. I'll look into integrating the + Gnulib module for popcount, as a better fix. + See the thread starting in: + http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00474.html + (popcount_size_t_generic) [NEED_GENERIC_POPCOUNT]: + (popcount_size_t_msc) [USE_MSC_POPCOUNT]: + (popcount_size_t_gcc) [USE_GCC_POPCOUNT]: + (popcount_size_t): Use it. + 2013-09-24 Daniel Colascione * process.c (Fnetwork_interface_info): Fix build break due to diff --git a/src/data.c b/src/data.c index 82cfd74cd0f..79679bae444 100644 --- a/src/data.c +++ b/src/data.c @@ -2972,18 +2972,25 @@ bool_vector_spare_mask (ptrdiff_t nr_bits) #if _MSC_VER >= 1500 && (defined _M_IX86 || defined _M_X64) # define USE_MSC_POPCOUNT +# define POPCOUNT_STATIC_INLINE static inline #elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # define USE_GCC_POPCOUNT +# if 199901L <= __STDC_VERSION__ || !__STRICT_ANSI__ +# define POPCOUNT_STATIC_INLINE static inline +# endif #else # define NEED_GENERIC_POPCOUNT #endif +#ifndef POPCOUNT_STATIC_INLINE +# define POPCOUNT_STATIC_INLINE static +#endif #ifdef USE_MSC_POPCOUNT -#define NEED_GENERIC_POPCOUNT +# define NEED_GENERIC_POPCOUNT #endif #ifdef NEED_GENERIC_POPCOUNT -static unsigned int +POPCOUNT_STATIC_INLINE unsigned int popcount_size_t_generic (size_t val) { unsigned short j; @@ -2997,7 +3004,7 @@ popcount_size_t_generic (size_t val) #endif #ifdef USE_MSC_POPCOUNT -static unsigned int +POPCOUNT_STATIC_INLINE unsigned int popcount_size_t_msc (size_t val) { unsigned int count; @@ -3042,7 +3049,7 @@ popcount_size_t_msc (size_t val) #endif /* USE_MSC_POPCOUNT */ #ifdef USE_GCC_POPCOUNT -static unsigned int +POPCOUNT_STATIC_INLINE unsigned int popcount_size_t_gcc (size_t val) { # if BITS_PER_SIZE_T == 64 @@ -3053,7 +3060,7 @@ popcount_size_t_gcc (size_t val) } #endif /* USE_GCC_POPCOUNT */ -static unsigned int +POPCOUNT_STATIC_INLINE unsigned int popcount_size_t (size_t val) { #if defined USE_MSC_POPCOUNT From cf647d9300961108f50c6ae47b234d0e9afb89b4 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 24 Sep 2013 08:29:27 -0700 Subject: [PATCH 315/321] * dispnew.c (clear_glyph_row, copy_row_except_pointers): Use enums instead of ints, as it's the usual style for offsetof constants. See: http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00478.html --- src/ChangeLog | 4 ++++ src/dispnew.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 90ffce575f9..3f0c4196afd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2013-09-24 Paul Eggert + * dispnew.c (clear_glyph_row, copy_row_except_pointers): Use enums + instead of ints, as it's the usual style for offsetof constants. See: + http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00478.html + * data.c (POPCOUNT_STATIC_INLINE): New macro, as a hack for popcount. This is ugly, but it should fix the performance problem for older GCC versions in the short run. I'll look into integrating the diff --git a/src/dispnew.c b/src/dispnew.c index f9132f37f68..27167f4e1e4 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -838,7 +838,7 @@ clear_window_matrices (struct window *w, bool desired_p) void clear_glyph_row (struct glyph_row *row) { - int off = offsetof (struct glyph_row, used); + enum { off = offsetof (struct glyph_row, used) }; /* Zero everything except pointers in `glyphs'. */ memset (row->used, 0, sizeof *row - off); @@ -988,7 +988,7 @@ swap_glyph_pointers (struct glyph_row *a, struct glyph_row *b) static void copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from) { - int off = offsetof (struct glyph_row, x); + enum { off = offsetof (struct glyph_row, x) }; memcpy (&to->x, &from->x, sizeof *to - off); } From 0c1738785d65e807e9500f6a1200baba66edc80c Mon Sep 17 00:00:00 2001 From: Sam Steingold Date: Tue, 24 Sep 2013 13:34:51 -0400 Subject: [PATCH 316/321] * lisp/midnight.el (clean-buffer-list-kill-regexps) (clean-buffer-list-kill-buffer-names): Update for the new Man buffer naming which includes the object name. --- lisp/ChangeLog | 6 ++++++ lisp/midnight.el | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1a9f6984d91..ad9b775142e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-09-24 Sam Steingold + + * midnight.el (clean-buffer-list-kill-regexps) + (clean-buffer-list-kill-buffer-names): Update for the new Man + buffer naming which includes the object name. + 2013-09-23 Stefan Monnier * eshell/esh-cmd.el (eshell--sep-terms): New var. diff --git a/lisp/midnight.el b/lisp/midnight.el index f207d438e5b..25de2717b47 100644 --- a/lisp/midnight.el +++ b/lisp/midnight.el @@ -87,7 +87,7 @@ displayed more than this many seconds ago." :type 'integer :group 'midnight) -(defcustom clean-buffer-list-kill-regexps nil +(defcustom clean-buffer-list-kill-regexps '("^\\*Man ") "List of regexps saying which buffers will be killed at midnight. If buffer name matches a regexp in the list and the buffer was not displayed in the last `clean-buffer-list-delay-special' seconds, it is killed by @@ -101,7 +101,7 @@ See also `clean-buffer-list-kill-buffer-names', :group 'midnight) (defcustom clean-buffer-list-kill-buffer-names - '("*Help*" "*Apropos*" "*Man " "*Buffer List*" "*Compile-Log*" "*info*" + '("*Help*" "*Apropos*" "*Buffer List*" "*Compile-Log*" "*info*" "*vc*" "*vc-diff*" "*diff*") "List of strings saying which buffers will be killed at midnight. Buffers with names in this list, which were not displayed in the last From 959c3d24a7ba87716891affbc2c7720e9f020ac6 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 24 Sep 2013 20:44:34 -0700 Subject: [PATCH 317/321] Merge from gnulib. This incorporates: 2013-09-24 manywarnings: enable nicer gcc warning messages 2013-09-23 warnings: port --enable-gcc-warnings to Solaris Studio 12.3 2013-09-21 timespec: use the new TIMESPEC_RESOLUTION elsewhere * configure.ac (WERROR_CFLAGS): Omit -fdiagnostics-show-option and -funit-at-a-time, since manywarnings does that for us now. --- ChangeLog | 9 +++++++++ configure.ac | 3 --- lib/timespec-add.c | 4 ++-- lib/timespec-sub.c | 6 +++--- m4/manywarnings.m4 | 4 +++- m4/warnings.m4 | 8 ++++---- 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index d2a27b7b6ee..f8a219d6a15 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2013-09-25 Paul Eggert + + Merge from gnulib, incorporating: + 2013-09-24 manywarnings: enable nicer gcc warning messages + 2013-09-23 warnings: port --enable-gcc-warnings to Solaris Studio 12.3 + 2013-09-21 timespec: use the new TIMESPEC_RESOLUTION elsewhere + * configure.ac (WERROR_CFLAGS): Omit -fdiagnostics-show-option + and -funit-at-a-time, since manywarnings does that for us now. + 2013-09-23 Jan Djärv * configure.ac: With clang, check for and use -Wno-switch, diff --git a/configure.ac b/configure.ac index 16259f01ed2..53426b67e45 100644 --- a/configure.ac +++ b/configure.ac @@ -886,9 +886,6 @@ else gl_WARN_ADD([-Wno-unused-value]) fi - gl_WARN_ADD([-fdiagnostics-show-option]) - gl_WARN_ADD([-funit-at-a-time]) - AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.]) AH_VERBATIM([FORTIFY_SOURCE], [/* Enable compile-time and run-time bounds-checking, and some warnings, diff --git a/lib/timespec-add.c b/lib/timespec-add.c index 51323a63207..d628237fe56 100644 --- a/lib/timespec-add.c +++ b/lib/timespec-add.c @@ -18,7 +18,7 @@ /* Written by Paul Eggert. */ /* Return the sum of two timespec values A and B. On overflow, return - an extremal value. This assumes 0 <= tv_nsec <= 999999999. */ + an extremal value. This assumes 0 <= tv_nsec < TIMESPEC_RESOLUTION. */ #include #include "timespec.h" @@ -58,7 +58,7 @@ timespec_add (struct timespec a, struct timespec b) { high_overflow: rs = TYPE_MAXIMUM (time_t); - rns = 999999999; + rns = TIMESPEC_RESOLUTION - 1; } } else diff --git a/lib/timespec-sub.c b/lib/timespec-sub.c index b164a8380d0..3f3adea28d6 100644 --- a/lib/timespec-sub.c +++ b/lib/timespec-sub.c @@ -18,8 +18,8 @@ /* Written by Paul Eggert. */ /* Return the difference between two timespec values A and B. On - overflow, return an extremal value. This assumes 0 <= tv_nsec <= - 999999999. */ + overflow, return an extremal value. This assumes 0 <= tv_nsec < + TIMESPEC_RESOLUTION. */ #include #include "timespec.h" @@ -58,7 +58,7 @@ timespec_sub (struct timespec a, struct timespec b) else { rs = TYPE_MAXIMUM (time_t); - rns = 999999999; + rns = TIMESPEC_RESOLUTION - 1; } } else diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4 index be6d4c91c50..80b2476d250 100644 --- a/m4/manywarnings.m4 +++ b/m4/manywarnings.m4 @@ -1,4 +1,4 @@ -# manywarnings.m4 serial 5 +# manywarnings.m4 serial 6 dnl Copyright (C) 2008-2013 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -204,6 +204,8 @@ AC_DEFUN([gl_MANYWARN_ALL_GCC], -Wvla \ -Wvolatile-register-var \ -Wwrite-strings \ + -fdiagnostics-show-option \ + -funit-at-a-time \ \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" diff --git a/m4/warnings.m4 b/m4/warnings.m4 index 5f5da51606b..e3d239b64ff 100644 --- a/m4/warnings.m4 +++ b/m4/warnings.m4 @@ -1,4 +1,4 @@ -# warnings.m4 serial 10 +# warnings.m4 serial 11 dnl Copyright (C) 2008-2013 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -36,9 +36,9 @@ AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [ gl_save_compiler_FLAGS="$gl_Flags" gl_AS_VAR_APPEND(m4_defn([gl_Flags]), [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["]) - AC_COMPILE_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])], - [AS_VAR_SET(gl_Warn, [yes])], - [AS_VAR_SET(gl_Warn, [no])]) + AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])], + [AS_VAR_SET(gl_Warn, [yes])], + [AS_VAR_SET(gl_Warn, [no])]) gl_Flags="$gl_save_compiler_FLAGS" ]) AS_VAR_IF(gl_Warn, [yes], [$2], [$3]) From ec165e83bb5749e0ec62daaf09ee83d1dbf9d37c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Wed, 25 Sep 2013 06:17:46 -0400 Subject: [PATCH 318/321] Auto-commit of generated files. --- autogen/configure | 175 ++++++++++++++++------------------------------ 1 file changed, 62 insertions(+), 113 deletions(-) diff --git a/autogen/configure b/autogen/configure index 08577d9efef..5da983cdd72 100755 --- a/autogen/configure +++ b/autogen/configure @@ -7602,12 +7602,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Werror__Wunknown_warning_option=yes else gl_cv_warn_c__Werror__Wunknown_warning_option=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -7639,12 +7640,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_switch=yes else gl_cv_warn_c__Wno_switch=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -7675,12 +7677,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare=yes else gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -7711,12 +7714,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_pointer_sign=yes else gl_cv_warn_c__Wno_pointer_sign=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -7760,12 +7764,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Werror=yes else gl_cv_warn_c__Werror=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8035,6 +8040,8 @@ $as_echo "$gl_cv_cc_uninitialized_supported" >&6; } -Wvla \ -Wvolatile-register-var \ -Wwrite-strings \ + -fdiagnostics-show-option \ + -funit-at-a-time \ \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" @@ -8092,12 +8099,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_gl_Warn=yes" else eval "$as_gl_Warn=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8131,12 +8139,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_missing_field_initializers=yes else gl_cv_warn_c__Wno_missing_field_initializers=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8167,12 +8176,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_sign_compare=yes else gl_cv_warn_c__Wno_sign_compare=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8203,12 +8213,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_type_limits=yes else gl_cv_warn_c__Wno_type_limits=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8239,12 +8250,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_switch=yes else gl_cv_warn_c__Wno_switch=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8275,12 +8287,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_unused_parameter=yes else gl_cv_warn_c__Wno_unused_parameter=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8311,12 +8324,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_format_nonliteral=yes else gl_cv_warn_c__Wno_format_nonliteral=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8350,12 +8364,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_logical_op=yes else gl_cv_warn_c__Wno_logical_op=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8389,12 +8404,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_format_extra_args=yes else gl_cv_warn_c__Wno_format_extra_args=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8425,12 +8441,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare=yes else gl_cv_warn_c__Wno_tautological_constant_out_of_range_compare=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8461,12 +8478,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_unused_command_line_argument=yes else gl_cv_warn_c__Wno_unused_command_line_argument=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8497,12 +8515,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_unused_value=yes else gl_cv_warn_c__Wno_unused_value=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -8516,79 +8535,6 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -fdiagnostics-show-option" >&5 -$as_echo_n "checking whether C compiler handles -fdiagnostics-show-option... " >&6; } -if test "${gl_cv_warn_c__fdiagnostics_show_option+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -fdiagnostics-show-option" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_warn_c__fdiagnostics_show_option=yes -else - gl_cv_warn_c__fdiagnostics_show_option=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$gl_save_compiler_FLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__fdiagnostics_show_option" >&5 -$as_echo "$gl_cv_warn_c__fdiagnostics_show_option" >&6; } -if test "x$gl_cv_warn_c__fdiagnostics_show_option" = x""yes; then : - as_fn_append WARN_CFLAGS " -fdiagnostics-show-option" -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -funit-at-a-time" >&5 -$as_echo_n "checking whether C compiler handles -funit-at-a-time... " >&6; } -if test "${gl_cv_warn_c__funit_at_a_time+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - gl_save_compiler_FLAGS="$CFLAGS" - as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -funit-at-a-time" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_warn_c__funit_at_a_time=yes -else - gl_cv_warn_c__funit_at_a_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$gl_save_compiler_FLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__funit_at_a_time" >&5 -$as_echo "$gl_cv_warn_c__funit_at_a_time" >&6; } -if test "x$gl_cv_warn_c__funit_at_a_time" = x""yes; then : - as_fn_append WARN_CFLAGS " -funit-at-a-time" -fi - - - - $as_echo "#define lint 1" >>confdefs.h @@ -10554,12 +10500,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_unused_variable=yes else gl_cv_warn_c__Wno_unused_variable=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -10590,12 +10537,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_unused_but_set_variable=yes else gl_cv_warn_c__Wno_unused_but_set_variable=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi @@ -10626,12 +10574,13 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_unused_but_set_parameter=yes else gl_cv_warn_c__Wno_unused_but_set_parameter=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi From 00578659268846921c6a5cf736dadc76bf66e9d5 Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Wed, 25 Sep 2013 14:39:53 -0800 Subject: [PATCH 319/321] * emacs-lisp/cl-macs.el (cl-type-spec): Tell edebug what type specs are and that they're not evaluated. --- lisp/ChangeLog | 5 +++++ lisp/emacs-lisp/cl-macs.el | 2 ++ 2 files changed, 7 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ad9b775142e..7b69330083d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-25 Daniel Colascione + + * emacs-lisp/cl-macs.el (cl-type-spec): Tell edebug what type + specs are and that they're not evaluated. + 2013-09-24 Sam Steingold * midnight.el (clean-buffer-list-kill-regexps) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 7e50b5bbc9e..031bf5553d0 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -209,6 +209,8 @@ The name is made by appending a number to PREFIX, default \"G\"." (def-edebug-spec cl-&key-arg (&or ([&or (symbolp arg) arg] &optional def-form arg) arg)) +(def-edebug-spec cl-type-spec sexp) + (defconst cl--lambda-list-keywords '(&optional &rest &key &allow-other-keys &aux &whole &body &environment)) From 3958758036f64a1c93728ab0a2cb9ea872c59e35 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Thu, 26 Sep 2013 08:46:29 +0800 Subject: [PATCH 320/321] * minibuffer.el (completion-all-sorted-completions): Make args optional as they are. --- lisp/ChangeLog | 5 +++++ lisp/minibuffer.el | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7b69330083d..cf450c55612 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-26 Leo Liu + + * minibuffer.el (completion-all-sorted-completions): Make args + optional as they are. + 2013-09-25 Daniel Colascione * emacs-lisp/cl-macs.el (cl-type-spec): Tell edebug what type diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index ab54b9da138..e588964a65b 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1100,7 +1100,7 @@ scroll the window of possible completions." (if (eq (car bounds) base) md-at-point (completion-metadata (substring string 0 base) table pred)))) -(defun completion-all-sorted-completions (start end) +(defun completion-all-sorted-completions (&optional start end) (or completion-all-sorted-completions (let* ((start (or start (minibuffer-prompt-end))) (end (or end (point-max))) From ba355de014b75ed104da4777f909db70d62f2357 Mon Sep 17 00:00:00 2001 From: Barry O'Reilly Date: Wed, 25 Sep 2013 23:46:47 -0400 Subject: [PATCH 321/321] Signal error when reading an empty byte-code object (Bug#15405) * lread.c (read1): signal error * alloc.c (make_byte_code): eassert header size (sweep_vectors): change an int to size_t --- src/ChangeLog | 7 +++++++ src/alloc.c | 4 +++- src/lread.c | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3f0c4196afd..a6774e30b0c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2013-09-26 Barry O'Reilly + + Signal error when reading an empty byte-code object (Bug#15405) + * lread.c (read1): signal error + * alloc.c (make_byte_code): eassert header size + (sweep_vectors): change an int to size_t + 2013-09-24 Paul Eggert * dispnew.c (clear_glyph_row, copy_row_except_pointers): Use enums diff --git a/src/alloc.c b/src/alloc.c index ca21ba2469b..2d9828ffa79 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -2889,7 +2889,7 @@ sweep_vectors (void) free_this_block = 1; else { - int tmp; + size_t tmp; SETUP_ON_FREE_LIST (vector, total_bytes, tmp); } } @@ -3132,6 +3132,8 @@ usage: (vector &rest OBJECTS) */) void make_byte_code (struct Lisp_Vector *v) { + /* Don't allow the global zero_vector to become a byte code object. */ + eassert(0 < v->header.size); if (v->header.size > 1 && STRINGP (v->u.contents[1]) && STRING_MULTIBYTE (v->u.contents[1])) /* BYTECODE-STRING must have been produced by Emacs 20.2 or the diff --git a/src/lread.c b/src/lread.c index 017dfcb11a5..fe2b92a34b3 100644 --- a/src/lread.c +++ b/src/lread.c @@ -2597,7 +2597,10 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) build them using function calls. */ Lisp_Object tmp; tmp = read_vector (readcharfun, 1); - make_byte_code (XVECTOR (tmp)); + struct Lisp_Vector* vec = XVECTOR (tmp); + if (vec->header.size==0) + invalid_syntax ("Empty byte-code object"); + make_byte_code (vec); return tmp; } if (c == '(')