view lisp/hex-util.el @ 87595:4c6c79916238

* configure.in: Remove references to unsupported systems. * notes/copyright: * MAINTAINERS: Remove references to files that have been removed. * os.texi (System Environment): Remove references to OSes that are not supported anymore. * PROBLEMS: * MACHINES: Remove references to systems not supported anymore. * makefile.w32-in: * Makefile.in: Remove references to Xenix. * gnus.el (gnus-use-long-file-name): Remove reference to xenix. * obsolete/x-apollo.el: Remove file for unsupported system. * term/x-win.el (vendor-specific-keysyms): Remove reference to Apollo. * progmodes/gud.el (gud-dgux-p): Remove. (dbx): Remove reference to dgux. * progmodes/ps-mode.el (ps-mode-print-function): * ps-print.el (ps-lp-system): * paths.el (rmail-spool-directory): * ls-lisp.el (ls-lisp-emulation): * lpr.el (lpr-lp-system): * dired.el (dired-chown-program): Remove references to dgux. * m/7300.h: * m/acorn.h: * m/alliant-2800.h: * m/alliant.h: * m/alliant1.h: * m/alliant4.h: * m/altos.h: * m/amdahl.h: * m/apollo.h: * m/att3b.h: * m/aviion-intel.h: * m/aviion.h: * m/celerity.h: * m/clipper.h: * m/cnvrgnt.h: * m/convex.h: * m/cydra5.h: * m/delta88k.h: * m/dpx2.h: * m/dual.h: * m/elxsi.h: * m/f301.h: * m/gould-np1.h: * m/gould.h: * m/i860.h: * m/ibmps2-aix.h: * m/ibmrt-aix.h: * m/ibmrt.h: * m/irist.h: * m/is386.h: * m/isi-ov.h: * m/mega68.h: * m/mg1.h: * m/news-r6.h: * m/news-risc.h: * m/news.h: * m/nh3000.h: * m/nh4000.h: * m/ns16000.h: * m/ns32000.h: * m/nu.h: * m/orion.h: * m/orion105.h: * m/paragon.h: * m/pfa50.h: * m/plexus.h: * m/pyramid.h: * m/pyrmips.h: * m/sh3el.h: * m/sps7.h: * m/sr2k.h: * m/stride.h: * m/sun1.h: * m/sun2.h: * m/sun3-68881.h: * m/sun3-fpa.h: * m/sun3-soft.h: * m/sun3.h: * m/sun386.h: * m/symmetry.h: * m/tad68k.h: * m/tahoe.h: * m/targon31.h: * m/tek4300.h: * m/tekxd88.h: * m/tower32.h: * m/tower32v3.h: * m/ustation.h: * m/wicat.h: * m/xps100.h: * s/cxux.h: * s/cxux7.h: * s/dgux.h: * s/dgux4.h: * s/dgux5-4-3.h: * s/dgux5-4r2.h: * s/esix.h: * s/esix5r4.h: * s/hiuxmpp.h: * s/hiuxwe2.h: * s/iris3-5.h: * s/iris3-6.h: * s/isc2-2.h: * s/isc3-0.h: * s/isc4-0.h: * s/isc4-1.h: * s/newsos5.h: * s/newsos6.h: * s/osf1.h: * s/osf5-0.h: * s/riscix1-1.h: * s/riscix12.h: * s/sco4.h: * s/sco5.h: * s/sunos4-0.h: * s/sunos4-1.h: * s/sunos413.h: * s/sunos4shr.h: * s/umax.h: * s/unipl5-2.h: * s/xenix.h: * cxux-crt0.s: * unexapollo.c: * unexconvex.c: * unexenix.c: * unexsni.c: Remove files for systems no longer supported. * m/intel386.h: Remove references to unsupported systems. * w32.c (get_emacs_configuration): Remove reference to i860. * sysdep.c: Remove dead code.
author Dan Nicolaescu <dann@ics.uci.edu>
date Sun, 06 Jan 2008 00:56:56 +0000
parents f7d29ef23ff8
children 107ccd98fa12
line wrap: on
line source

;;; hex-util.el --- Functions to encode/decode hexadecimal string.

;; Copyright (C) 1999, 2001, 2002, 2003, 2004,
;;   2005, 2006, 2007 Free Software Foundation, Inc.

;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
;; Keywords: data

;; 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:

(eval-when-compile
  (defmacro hex-char-to-num (chr)
    `(let ((chr ,chr))
       (cond
        ((and (<= ?a chr)(<= chr ?f)) (+ (- chr ?a) 10))
        ((and (<= ?A chr)(<= chr ?F)) (+ (- chr ?A) 10))
        ((and (<= ?0 chr)(<= chr ?9)) (- chr ?0))
        (t (error "Invalid hexadecimal digit `%c'" chr)))))
  (defmacro num-to-hex-char (num)
    `(aref "0123456789abcdef" ,num)))

(defun decode-hex-string (string)
  "Decode hexadecimal STRING to octet string."
  (let* ((len (length string))
	 (dst (make-string (/ len 2) 0))
	 (idx 0)(pos 0))
    (while (< pos len)
      ;; logior and lsh are not byte-coded.
      ;; (aset dst idx (logior (lsh (hex-char-to-num (aref string pos)) 4)
      ;; 			    (hex-char-to-num (aref string (1+ pos)))))
      (aset dst idx (+ (* (hex-char-to-num (aref string pos)) 16)
		       (hex-char-to-num (aref string (1+ pos)))))
      (setq idx (1+ idx)
	    pos (+ 2 pos)))
    dst))

(defun encode-hex-string (string)
  "Encode octet STRING to hexadecimal string."
  (let* ((len (length string))
	 (dst (make-string (* len 2) 0))
	 (idx 0)(pos 0))
    (while (< pos len)
      ;; logand and lsh are not byte-coded.
      ;; (aset dst idx (num-to-hex-char (logand (lsh (aref string pos) -4) 15)))
      (aset dst idx (num-to-hex-char (/ (aref string pos) 16)))
      (setq idx (1+ idx))
      ;; (aset dst idx (num-to-hex-char (logand (aref string pos) 15)))
      (aset dst idx (num-to-hex-char (% (aref string pos) 16)))
      (setq idx (1+ idx)
	    pos (1+ pos)))
    dst))

(provide 'hex-util)

;; arch-tag: fe8aaa79-6c86-400e-813f-5a8cc4cb3859
;;; hex-util.el ends here