aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Yidong2007-04-19 23:53:02 +0000
committerChong Yidong2007-04-19 23:53:02 +0000
commitfcb006c4ee97e3413a794c543367b771f0237495 (patch)
tree98d323db419ea791ea6fb9a8b74f466202189c43
parent9cd04e16395bafbb8801e67ee082ce0a0bf42370 (diff)
downloademacs-fcb006c4ee97e3413a794c543367b771f0237495.tar.gz
emacs-fcb006c4ee97e3413a794c543367b771f0237495.zip
(archive-find-type): lzh-exe for lzh self-extracting exe.
(archive-lzh-summarize): Add optional start arg for where to start looking at the archive. (archive-lzh-exe-summarize, archive-lzh-exe-extract): New functions.
-rw-r--r--lisp/arc-mode.el36
1 files changed, 34 insertions, 2 deletions
diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index 8630d3e8b06..1a22ac628e6 100644
--- a/lisp/arc-mode.el
+++ b/lisp/arc-mode.el
@@ -700,6 +700,10 @@ archive.
700 (string-match "\\.[aA][rR][cC]$" 700 (string-match "\\.[aA][rR][cC]$"
701 (or buffer-file-name (buffer-name)))) 701 (or buffer-file-name (buffer-name))))
702 'arc) 702 'arc)
703 ;; This pattern modelled on the BSD/GNU+Linux `file' command.
704 ;; Have seen capital "LHA's", and file has lower case "LHa's" too.
705 ;; Note this regexp is also in archive-exe-p.
706 ((looking-at "MZ\\(.\\|\n\\)\\{34\\}LH[aA]'s SFX ") 'lzh-exe)
703 (t (error "Buffer format not recognized"))))) 707 (t (error "Buffer format not recognized")))))
704;; ------------------------------------------------------------------------- 708;; -------------------------------------------------------------------------
705(defun archive-summarize (&optional shut-up) 709(defun archive-summarize (&optional shut-up)
@@ -1398,8 +1402,8 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
1398;; ------------------------------------------------------------------------- 1402;; -------------------------------------------------------------------------
1399;; Section: Lzh Archives 1403;; Section: Lzh Archives
1400 1404
1401(defun archive-lzh-summarize () 1405(defun archive-lzh-summarize (&optional start)
1402 (let ((p 1) 1406 (let ((p (or start 1)) ;; 1 for .lzh, something further on for .exe
1403 (totalsize 0) 1407 (totalsize 0)
1404 (maxlen 8) 1408 (maxlen 8)
1405 files 1409 files
@@ -1621,6 +1625,34 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
1621 ;; This should work even though newmode will be dynamically accessed. 1625 ;; This should work even though newmode will be dynamically accessed.
1622 (lambda (old) (archive-calc-mode old newmode t)) 1626 (lambda (old) (archive-calc-mode old newmode t))
1623 files "a unix-style mode" 8)) 1627 files "a unix-style mode" 8))
1628
1629;; -------------------------------------------------------------------------
1630;; Section: Lzh Self-Extracting .exe Archives
1631;;
1632;; No support for modifying these files. It looks like the lha for unix
1633;; program (as of version 1.14i) can't create or retain the DOS exe part.
1634;; If you do an "lha a" on a .exe for instance it renames and writes to a
1635;; plain .lzh.
1636
1637(defun archive-lzh-exe-summarize ()
1638 "Summarize the contents of an LZH self-extracting exe, for `archive-mode'."
1639
1640 ;; Skip the initial executable code part and apply archive-lzh-summarize
1641 ;; to the archive part proper. The "-lh5-" etc regexp here for the start
1642 ;; is the same as in archive-find-type.
1643 ;;
1644 ;; The lha program (version 1.14i) does this in skip_msdos_sfx1_code() by
1645 ;; a similar scan. It looks for "..-l..-" plus for level 0 or 1 a test of
1646 ;; the header checksum, or level 2 a test of the "attribute" and size.
1647 ;;
1648 (re-search-forward "..-l[hz][0-9ds]-" nil)
1649 (archive-lzh-summarize (match-beginning 0)))
1650
1651;; `archive-lzh-extract' runs "lha pq", and that works for .exe as well as
1652;; .lzh files
1653(defalias 'archive-lzh-exe-extract 'archive-lzh-extract
1654 "Extract a member from an LZH self-extracting exe, for `archive-mode'.")
1655
1624;; ------------------------------------------------------------------------- 1656;; -------------------------------------------------------------------------
1625;; Section: Zip Archives 1657;; Section: Zip Archives
1626 1658