Mercurial > emacs
view lisp/gnus/uudecode.el @ 80455:4b3759b14cc7
(mac_end_cg_clip): Add argument F. All uses changed.
(mac_begin_cg_clip, mac_end_cg_clip): Allow null GC.
(mac_invert_rectangle, mac_compute_glyph_string_overhangs)
(mac_load_query_font): Use them instead of SetPortWindowPort.
(mac_clear_window) [!USE_CG_DRAWING]: Likewise.
(mac_draw_image_string_cg): Call CGContextSetTextMatrix.
(x_update_begin, x_update_end): Call mac_update_begin and
mac_update_end.
(XTframe_up_to_date): Call mac_frame_up_to_date.
(XTring_bell): Use mac_alert_sound_play.
(note_mouse_movement): Use mac_get_frame_bounds.
(XTmouse_position): Use mac_get_frame_mouse.
(x_scroll_bar_create): Use mac_create_scroll_bar.
(x_scroll_bar_remove): Use mac_dispose_scroll_bar.
(XTset_vertical_scroll_bar): Use mac_set_scroll_bar_bounds and
mac_redraw_scroll_bar.
(mac_move_window_with_gravity) [USE_MAC_TOOLBAR]: Use mac_move_window
instead of MoveWindow.
(mac_handle_size_change) [TARGET_API_MAC_CARBON]:
Use mac_reposition_hourglass.
(x_set_offset): Use mac_move_window_structure instead of
MoveWindowStructure.
(x_set_window_size): Use mac_size_window instead of SizeWindow.
(x_set_mouse_pixel_position) [MAC_OSX]:
Use mac_convert_frame_point_to_global.
(x_raise_frame): Use mac_bring_window_to_front instead of BringToFront.
(x_lower_frame): Use mac_send_window_behind instead of SendBehind.
(mac_handle_visibility_change): Use Window instead of WindowRef.
Use mac_is_window_visible/mac_is_window_collapsed instead of
IsWindowVisible/IsWindowCollapsed, respectively.
Use mac_collapse_window/mac_show_window instead of
CollapseWindow/ShowWindow, respectively.
(x_make_frame_invisible): Use mac_hide_window instead of HideWindow.
(x_iconify_frame): Use mac_show_window instead of ShowWindow.
Use mac_collapse_window instead of CollapseWindow.
(x_free_frame_resources): Use Window instead of WindowRef.
Use mac_dispose_frame_window. Clean up focus-related variables before
calling mac_dispose_frame_window.
(do_zoom_window) [MAC_OS8]: Use mac_clear_area instead of
mac_clear_window.
(mac_initialize): Use mac_toolbox_initialize instead of
initializing any_help_event_p and calling init_apple_event_handler,
init_tsm, and init_menu_bar.
(any_help_event_p, last_window, save_port_clip_region)
(read_socket_inev, saved_menu_event_location): Move variables to
mactoolbox.c.
(last_scroll_bar_part, scroll_bar_timer)
(scroll_bar_timer_event_posted_p) [USE_TOOLKIT_SCROLL_BARS]: Likewise.
(font_panel_shown_p) [USE_MAC_FONT_PANEL]: Likewise.
(tsm_document_id) [USE_MAC_TSM]: Likewise.
(mouse_region) [!TARGET_API_MAC_CARBON]: Likewise.
(mac_window_to_frame, DEFAULT_NUM_COLS, MIN_DOC_SIZE, MAX_DOC_SIZE):
Move defines to mactoolbox.c.
(FRAME_CG_CONTEXT) [USE_CG_DRAWING]: Likewise.
(SCROLL_BAR_FIRST_DELAY, SCROLL_BAR_CONTINUOUS_DELAY)
[USE_TOOLKIT_SCROLL_BARS]: Likewise.
(TOOLBAR_IDENTIFIER, TOOLBAR_ICON_ITEM_IDENTIFIER)
(TOOLBAR_ITEM_COMMAND_ID_OFFSET, TOOLBAR_ITEM_COMMAND_ID_P)
(TOOLBAR_ITEM_COMMAND_ID_VALUE, TOOLBAR_ITEM_MAKE_COMMAND_ID)
[USE_MAC_TOOLBAR]: Likewise.
(M_APPLE, I_ABOUT, EXTRA_STACK_ALLOC, ARGV_STRING_LIST_ID)
(RAM_TOO_LARGE_ALERT_ID, ABOUT_ALERT_ID): Move defines to macgui.h
(x_flush, is_emacs_window, mac_begin_clip, mac_end_clip)
(x_scroll_bar_handle_click, x_scroll_bar_report_motion)
(mac_get_window_bounds, do_window_update, is_emacs_window)
(do_grow_window, do_zoom_window, install_window_handler)
(remove_window_handler, XTread_socket, init_menu_bar): Move functions
to mactoolbox.c.
(mac_flush_display_optional, mac_begin_cg_clip, mac_end_cg_clip)
(mac_prepare_for_quickdraw) [USE_CG_DRAWING]: Likewise.
(mac_scroll_area, mac_event_to_emacs_modifiers, mac_get_mouse_btn)
(mac_convert_event_ref, mac_get_ideal_size, mac_store_drag_event)
(mac_handle_window_event, mac_handle_keyboard_event)
(mac_handle_command_event, mac_handle_mouse_event)
(install_application_handler, mac_post_mouse_moved_event)
[TARGET_API_MAC_CARBON]: Likewise.
(scroll_bar_timer_callback, install_scroll_bar_timer)
(set_scroll_bar_timer, control_part_code_to_scroll_bar_part)
(construct_scroll_bar_click, get_control_part_bounds)
(x_scroll_bar_handle_press, x_scroll_bar_handle_release)
(x_scroll_bar_handle_drag, x_set_toolkit_scroll_bar_thumb)
[USE_TOOLKIT_SCROLL_BARS]: Likewise.
(x_scroll_bar_set_handle, x_scroll_bar_note_movement)
[!USE_TOOLKIT_SCROLL_BARS]: Likewise.
(mac_handle_toolbar_event, mac_create_frame_tool_bar)
(update_frame_tool_bar, free_frame_tool_bar)
(mac_tool_bar_note_mouse_movement, mac_handle_toolbar_command_event)
[USE_MAC_TOOLBAR]: Likewise.
(mac_font_panel_visible_p, mac_handle_font_event)
(mac_show_hide_font_panel, mac_set_font_info_for_selection)
[USE_MAC_FONT_PANEL]: Likewise.
(mac_handle_text_input_event, init_tsm) [USE_MAC_TSM]: Likewise.
(do_apple_menu, mac_wait_next_event) [!TARGET_API_MAC_CARBON]: Likewise.
(mac_store_service_event) [MAC_OSX]: Likewise.
(last_mouse_glyph, last_mouse_glyph_frame, last_mouse_scroll_bar)
(last_mouse_movement_time, input_signal_count)
(mac_screen_config_changed, Qhi_command, Qtoolbar_switch_mode)
(Qservice, Qpaste, Qperform, keycode_to_xkeysym_table): Make variables
non-static.
(Qpanel_closed, Qselection) [USE_MAC_FONT_PANEL]: Likewise.
(Qtext_input, Vmac_ts_active_input_overlay, Qupdate_active_input_area)
(Qunicode_for_key_event, Vmac_ts_script_language_on_focus)
(saved_ts_script_language_on_focus) [USE_MAC_TSM]: Likewise.
(mac_focus_changed, note_mouse_movement, mac_focus_frame)
(mac_handle_origin_change, mac_handle_size_change)
(mac_handle_visibility_change, mac_to_emacs_modifiers)
(mac_mapped_modifiers, mac_get_emulated_btn, do_keystroke)
(mac_get_screen_info): Make functions non-static.
(mac_move_window_with_gravity, mac_get_window_origin_with_gravity)
(mac_image_spec_to_cg_image) [USE_MAC_TOOLBAR]: Likewise.
(mac_store_event_ref_as_apple_event) [TARGET_API_MAC_CARBON]: Likewise.
(Qwindow, mac_ready_for_apple_events): Move externs to mactoolbox.c.
(Qbefore_string) [USE_MAC_TSM]: Likewise.
(mac_toolbox_initialize, x_scroll_bar_report_motion, XTread_socket):
Add externs.
(mac_flush_display_optional) [USE_CG_DRAWING]: Likewise.
(install_drag_handler, remove_drag_handler, install_service_handler)
(install_menu_target_item_handler): Remove externs.
(XSetWindowBackground): Rename to mac_set_frame_window_background.
Take frame as argument instead of display and window.
Move to mactoolbox.c.
(mac_restore_keyboard_input_source, mac_save_keyboard_input_source)
[USE_MAC_TSM]: New functions created from mac_tsm_resume and
mac_tsm_suspend, respectively.
(mac_tsm_resume, mac_tsm_suspend) [USE_MAC_TSM]: Use them.
Move to mactoolbox.c.
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Sun, 06 Apr 2008 01:58:59 +0000 |
parents | 1cb31606209f |
children |
line wrap: on
line source
;;; uudecode.el -- elisp native uudecode ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu> ;; Keywords: uudecode news ;; 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, 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; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;;; Code: (autoload 'executable-find "executable") (eval-when-compile (require 'cl)) (eval-and-compile (defalias 'uudecode-char-int (if (fboundp 'char-int) 'char-int 'identity))) (defcustom uudecode-decoder-program "uudecode" "*Non-nil value should be a string that names a uu decoder. The program should expect to read uu data on its standard input and write the converted data to its standard output." :type 'string :group 'gnus-extract) (defcustom uudecode-decoder-switches nil "*List of command line flags passed to `uudecode-decoder-program'." :group 'gnus-extract :type '(repeat string)) (defcustom uudecode-use-external (executable-find uudecode-decoder-program) "*Use external uudecode program." :version "22.1" :group 'gnus-extract :type 'boolean) (defconst uudecode-alphabet "\040-\140") (defconst uudecode-begin-line "^begin[ \t]+[0-7][0-7][0-7][ \t]+\\(.*\\)$") (defconst uudecode-end-line "^end[ \t]*$") (defconst uudecode-body-line (let ((i 61) (str "^M")) (while (> (setq i (1- i)) 0) (setq str (concat str "[^a-z]"))) (concat str ".?$"))) (defvar uudecode-temporary-file-directory (cond ((fboundp 'temp-directory) (temp-directory)) ((boundp 'temporary-file-directory) temporary-file-directory) ("/tmp"))) ;;;###autoload (defun uudecode-decode-region-external (start end &optional file-name) "Uudecode region between START and END using external program. If FILE-NAME is non-nil, save the result to FILE-NAME. The program used is specified by `uudecode-decoder-program'." (interactive "r\nP") (let ((cbuf (current-buffer)) tempfile firstline status) (save-excursion (goto-char start) (when (re-search-forward uudecode-begin-line nil t) (forward-line 1) (setq firstline (point)) (cond ((null file-name)) ((stringp file-name)) (t (setq file-name (read-file-name "File to Name:" nil nil nil (match-string 1))))) (setq tempfile (if file-name (expand-file-name file-name) (if (fboundp 'make-temp-file) (let ((temporary-file-directory uudecode-temporary-file-directory)) (make-temp-file "uu")) (expand-file-name (make-temp-name "uu") uudecode-temporary-file-directory)))) (let ((cdir default-directory) (default-process-coding-system (if (featurep 'xemacs) ;; In XEmacs, `nil' is not a valid coding system. '(binary . binary) nil))) (unwind-protect (with-temp-buffer (insert "begin 600 " (file-name-nondirectory tempfile) "\n") (insert-buffer-substring cbuf firstline end) (cd (file-name-directory tempfile)) (apply 'call-process-region (point-min) (point-max) uudecode-decoder-program nil nil nil uudecode-decoder-switches)) (cd cdir) (set-buffer cbuf))) (if (file-exists-p tempfile) (unless file-name (goto-char start) (delete-region start end) (let (format-alist) (insert-file-contents-literally tempfile))) (message "Can not uudecode"))) (ignore-errors (or file-name (delete-file tempfile)))))) (eval-and-compile (defalias 'uudecode-string-to-multibyte (cond ((featurep 'xemacs) 'identity) ((fboundp 'string-to-multibyte) 'string-to-multibyte) (t (lambda (string) "Return a multibyte string with the same individual chars as string." (mapconcat (lambda (ch) (string-as-multibyte (char-to-string ch))) string "")))))) ;;;###autoload (defun uudecode-decode-region-internal (start end &optional file-name) "Uudecode region between START and END without using an external program. If FILE-NAME is non-nil, save the result to FILE-NAME." (interactive "r\nP") (let ((done nil) (counter 0) (remain 0) (bits 0) (lim 0) inputpos result (non-data-chars (concat "^" uudecode-alphabet))) (save-excursion (goto-char start) (when (re-search-forward uudecode-begin-line nil t) (cond ((null file-name)) ((stringp file-name)) (t (setq file-name (expand-file-name (read-file-name "File to Name:" nil nil nil (match-string 1)))))) (forward-line 1) (skip-chars-forward non-data-chars end) (while (not done) (setq inputpos (point)) (setq remain 0 bits 0 counter 0) (cond ((> (skip-chars-forward uudecode-alphabet end) 0) (setq lim (point)) (setq remain (logand (- (uudecode-char-int (char-after inputpos)) 32) 63)) (setq inputpos (1+ inputpos)) (if (= remain 0) (setq done t)) (while (and (< inputpos lim) (> remain 0)) (setq bits (+ bits (logand (- (uudecode-char-int (char-after inputpos)) 32) 63))) (if (/= counter 0) (setq remain (1- remain))) (setq counter (1+ counter) inputpos (1+ inputpos)) (cond ((= counter 4) (setq result (cons (concat (char-to-string (lsh bits -16)) (char-to-string (logand (lsh bits -8) 255)) (char-to-string (logand bits 255))) result)) (setq bits 0 counter 0)) (t (setq bits (lsh bits 6))))))) (cond (done) ((> 0 remain) (error "uucode line ends unexpectly") (setq done t)) ((and (= (point) end) (not done)) ;;(error "uucode ends unexpectly") (setq done t)) ((= counter 3) (setq result (cons (concat (char-to-string (logand (lsh bits -16) 255)) (char-to-string (logand (lsh bits -8) 255))) result))) ((= counter 2) (setq result (cons (char-to-string (logand (lsh bits -10) 255)) result)))) (skip-chars-forward non-data-chars end)) (if file-name (let (default-enable-multibyte-characters) (with-temp-file file-name (insert (apply 'concat (nreverse result))))) (or (markerp end) (setq end (set-marker (make-marker) end))) (goto-char start) (if enable-multibyte-characters (mapc #'(lambda (x) (insert (uudecode-string-to-multibyte x))) (nreverse result)) (insert (apply 'concat (nreverse result)))) (delete-region (point) end)))))) ;;;###autoload (defun uudecode-decode-region (start end &optional file-name) "Uudecode region between START and END. If FILE-NAME is non-nil, save the result to FILE-NAME." (if uudecode-use-external (uudecode-decode-region-external start end file-name) (uudecode-decode-region-internal start end file-name))) (provide 'uudecode) ;;; arch-tag: e1f09ed5-62b4-4677-9f13-4e81c4fe8ce3 ;;; uudecode.el ends here