gecko-dev/lib/xp/bin-to-c.el

66 строки
2.2 KiB
EmacsLisp

;;; -*- Mode: Emacs-Lisp -*-
;;;
;;; The contents of this file are subject to the Netscape Public License
;;; Version 1.0 (the "NPL"); you may not use this file except in
;;; compliance with the NPL. You may obtain a copy of the NPL at
;;; http://www.mozilla.org/NPL/
;;;
;;; Software distributed under the NPL is distributed on an "AS IS" basis,
;;; WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
;;; for the specific language governing rights and limitations under the
;;; NPL.
;;;
;;; The Initial Developer of this code under the NPL is Netscape
;;; Communications Corporation. Portions created by Netscape are
;;; Copyright (C) 1998 Netscape Communications Corporation. All Rights
;;; Reserved.
;;;
(defun bin-to-c (name input output)
(save-excursion
(set-buffer (let ((font-lock-mode nil))
(find-file-noselect output)))
(fundamental-mode)
(erase-buffer)
(insert-file-contents input)
(goto-char (point-min))
(insert "static unsigned char " name "[] = {\n \"")
(while (not (eobp))
(cond ((or (< (following-char) 32)
(> (following-char) 126))
(insert ?\\
(+ ?0 (lsh (logand (following-char) ?\700) -6))
(+ ?0 (lsh (logand (following-char) ?\070) -3))
(+ ?0 (logand (following-char) ?\007)))
(delete-char 1))
((or (= (following-char) ?\")
(= (following-char) ?\?)
(= (following-char) ?\\))
(insert ?\\)
(forward-char 1))
(t
(forward-char 1)))
(if (> (current-column) 70)
(insert "\"\n \""))
)
(insert "\"\n};\n")
(save-buffer)
))
(defun batch-bin-to-c ()
(defvar command-line-args-left) ;Avoid 'free variable' warning
(if (not noninteractive)
(error "batch-bin-to-c is to be used only with -batch"))
(let ((name (nth 0 command-line-args-left))
(in (and (nth 1 command-line-args-left)
(expand-file-name (nth 1 command-line-args-left))))
(out (and (nth 2 command-line-args-left)
(expand-file-name (nth 2 command-line-args-left))))
(version-control 'never))
(or (and name in out)
(error
"usage: emacs -batch -f batch-bin-to-c name input-file output-file"))
(setq command-line-args-left (cdr (cdr command-line-args-left)))
(let ((auto-mode-alist nil))
(bin-to-c name in out))))