# HG changeset patch # User Richard M. Stallman # Date 810755108 0 # Node ID 53205d572b1b36c44b4cd4f6a6138ddbe2b1e3e0 # Parent 78f30dd2c8fd736810f9407cade45234d4ef1684 (hexl-current-address): New arg VALIDATE. Handle point values in the ASCII text section and in the addresses. (hexl-insert-char): Handle point located in the ASCII text. diff -r 78f30dd2c8fd -r 53205d572b1b lisp/hexl.el --- a/lisp/hexl.el Sun Sep 10 17:44:25 1995 +0000 +++ b/lisp/hexl.el Sun Sep 10 17:45:08 1995 +0000 @@ -269,13 +269,20 @@ (set-buffer-modified-p modified) (goto-char original-point)))) -(defun hexl-current-address () +(defun hexl-current-address (&optional validate) "Return current hexl-address." (interactive) (let ((current-column (- (% (point) 68) 11)) (hexl-address 0)) - (setq hexl-address (+ (* (/ (point) 68) 16) - (/ (- current-column (/ current-column 5)) 2))) + (if (< current-column 0) + (if validate + (error "Point is not on a character in the file") + (setq current-column 0))) + (setq hexl-address + (+ (* (/ (point) 68) 16) + (if (>= current-column 41) + (- current-column 41) + (/ (- current-column (/ current-column 5)) 2)))) hexl-address)) (defun hexl-address-to-marker (address) @@ -577,17 +584,32 @@ (defun hexl-insert-char (ch num) "Insert a character in a hexl buffer." - (let ((address (hexl-current-address))) + (let ((address (hexl-current-address t))) (while (> num 0) - (delete-char 2) - (insert (format "%02x" ch)) - (goto-char - (+ (* (/ address 16) 68) 52 (% address 16))) - (delete-char 1) - (insert (hexl-printable-character ch)) - (or (eq address hexl-max-address) - (setq address (1+ address))) - (hexl-goto-address address) + (let ((hex-position + (+ (* (/ address 16) 68) + 11 + (* 2 (% address 16)) + (/ (% address 16) 2))) + (ascii-position + (+ (* (/ address 16) 68) 52 (% address 16))) + at-ascii-position) + (if (= (point) ascii-position) + (setq at-ascii-position t)) + (goto-char hex-position) + (delete-char 2) + (insert (format "%02x" ch)) + (goto-char ascii-position) + (delete-char 1) + (insert (hexl-printable-character ch)) + (or (eq address hexl-max-address) + (setq address (1+ address))) + (hexl-goto-address address) + (if at-ascii-position + (progn + (beginning-of-line) + (forward-char 51) + (forward-char (% address 16))))) (setq num (1- num))))) ;; hex conversion