
(defvar kanji-util-version "1.17")

(defvar kanji-keymap (make-keymap) "\
Keymap for Kanji manipulation")

(fset (quote kanji-prefix) kanji-keymap)

(define-key ctl-x-map "" (quote kanji-prefix))

(define-key kanji-keymap "t" (quote toggle-kanji-flag))

(define-key kanji-keymap "f" (quote change-fileio-code))

(define-key kanji-keymap "i" (quote change-input-code))

(define-key kanji-keymap "d" (quote change-display-code))

(define-key kanji-keymap "p" (quote change-process-code))

(define-key kanji-keymap "e" (quote change-kanji-expected-code))

(define-key kanji-keymap "T" (quote toggle-default-kanji-flag))

(define-key kanji-keymap "F" (quote change-default-fileio-code))

(define-key kanji-keymap "P" (quote change-default-process-code))

(define-key kanji-keymap "c" (quote list-kanji-codes-briefly))

(define-key kanji-keymap "C" (quote list-kanji-codes))

(defun toggle-kanji-flag nil "\
Toggle kanji-flag." (interactive) (byte-code "? " [kanji-flag nil redraw-display] 2))

(defun toggle-default-kanji-flag nil "\
Toggle default-kanji-flag." (interactive) (byte-code "? " [default-kanji-flag nil redraw-display] 2))

(defun change-fileio-code nil "\
Change kanji-fileio-code.
NIL -> No-conversion(0) -> Shift-JIS(1) -> JIS(2) -> EUC(3) -> NIL" (interactive) (byte-code "? Â U  T !" [kanji-fileio-code nil t 0 3 set-buffer-modified-p buffer-modified-p] 3))

(defun change-default-fileio-code nil "\
Change default-kanji-fileio-code.
NIL -> No-conversion(0) -> Shift-JIS(1) -> JIS(2) -> EUC(3) -> NIL
New default-kanji-fileio-code is returned." (interactive) (byte-code "? Â U  T !" [default-kanji-fileio-code nil t 0 3 set-buffer-modified-p buffer-modified-p] 3))

(defun change-input-code nil "\
Change kanji-input-code.
No-conversion(0) -> Shift-JIS(1) -> JIS(2) -> EUC(3) -> No-conversion(0)" (interactive) (byte-code "U Â T !" [kanji-input-code nil 3 0 set-buffer-modified-p buffer-modified-p] 3))

(defun change-display-code nil "\
Change kanji-display-code.
No-conversion(0) -> Shift-JIS(1) -> JIS(2) -> EUC(3) -> No-conversion(0)" (interactive) (byte-code "U Â T " [kanji-display-code nil 3 0 redraw-display] 2))

(defun change-process-code nil "\
Change kanji code for the current buffers' process.
No-conversion(0) -> Shift-JIS(1) -> JIS(2) -> EUC(3) -> No-conversion(0)" (interactive) (byte-code "Èp!? !% !	U! ʂ# 	T\")) !" [p code t nil get-buffer-process error "no process" process-kanji-code set-process-kanji-code 3 0 set-buffer-modified-p buffer-modified-p] 7))

(defun change-default-process-code nil "\
Change default-kanji-process-code.
No-conversion(0) -> Shift-JIS(1) -> JIS(2) -> EUC(3) -> No-conversion(0)
New default kanji code for the current process is returned." (interactive) (byte-code "U Ă T !" [default-kanji-process-code t nil 3 0 set-buffer-modified-p buffer-modified-p] 3))

(defun change-kanji-expected-code nil "\
Change kanji-expected-code.
  NIL -> T -> No-conversion(0) -> Shift-JIS(1) -> JIS(2) -> EUC(3) -> NIL
  New kanji-expected-code is returned." (interactive) (byte-code "? ! = Â! U ! T !" [kanji-expected-code t nil 0 3 set-buffer-modified-p buffer-modified-p] 3))

(defun list-kanji-codes-briefly nil "\
Display a list of values of kanji-code related valiables
with a brief format in mini-buffer." (interactive) (byte-code "Ȉ!@	!@
!@!@!@p% !*!@!@&" [default-kanji-fileio-code kanji-input-code kanji-display-code default-kanji-process-code kanji-fileio-code p get-buffer-process kanji-expected-code nil message "global: [FIDP=%c%c%c%c]  local: [FP=%c%c]  expected: [E=%c]" kanji-code-mnemonic-string process-kanji-code] 17))

(defun list-kanji-codes nil "\
Display a list of kanji-code related valiables.
Inserts the names and values in buffer *Kanji Codes* and displays that." (interactive) (byte-code "Ɉ	 ːq!A!A!A!A!A!A
E 
!AF &)*" [*kanji-fileio-code* kanji-fileio-code *kanji-process-code* standard-output default-kanji-fileio-code default-kanji-process-code kanji-expected-code kanji-display-code kanji-input-code nil process-kanji-code "*Kanji Codes*" insert "* List of kanji-code related variables *
" "Global variables:
" "	default-kanji-fileio-code : " kanji-code-mnemonic-string 10 "	default-kanji-process-code : " "	kanji-expected-code : " "	kanji-display-code : " "	kanji-input-code : " "Buffer local variable:
" "	kanji-fileio-code : " "Kanji code for a process of the buffer:
" "	(process-kanji-code) : " "No process"] 35))

(defun kanji-code-mnemonic-string (code) "\
Return as a string the meaning of one character mnemonic CODE." (byte-code "?	 < = Â< = ł< =' ǂ< =1 ɂ< =; ˂< ̇" [code t (45 . "NIL") (84 . "T") 0 (78 . "No-conversion") 1 (83 . "Shift-JIS") 2 (74 . "JIS") 3 (69 . "EUC") (32 . "Invalid value")] 2))

(define-key help-map "T" (quote help-with-tutorial-for-nemacs))

(define-key help-map "N" (quote view-nemacs-news))

(defun help-with-tutorial-for-nemacs nil "\
Select the NEmacs learn-by-doing tutorial." (interactive) (byte-code "Ĉ! ! !!X !!!ĉ\"!eb! ` `\" !e`\"#!eb!)" [file buffer-file-name default-directory auto-save-file-name nil exec-directory expand-file-name "~/NEMACS.tut" delete-other-windows get-file-buffer switch-to-buffer create-file-buffer "~/" insert-file-contents "NEMACS.tut" search-forward "
<<" beginning-of-line delete-region end-of-line newline - window-height selected-window count-lines 4 set-buffer-modified-p] 22))

(defun view-nemacs-news nil "\
Display info on recent changes to NEmacs." (interactive) (byte-code "\"!" [exec-directory nil find-file-read-only expand-file-name "NEMACS.nws"] 4))

(defun kanji-word-list (str) "\
Convert STRING into a list of integers.  Each integer represents
two-byte kanji code as one word." (byte-code "	\"P @A@W( ?( W: 
C\"AL 
\"\\C\"AA 
," [tem str result nil c1 c2 t mapcar + 128 nconc * 256] 8))

(defconst kanji-code-alist (quote (("no conversion" . 0) ("shift jis" . 1) ("jis" . 2) ("euc" . 3))))

(defconst extended-kanji-code-alist (append (quote (("nil"))) kanji-code-alist))

(defun kanji-code-internal (code) (byte-code ";
  9 ! 
\"# Ȃ: 
\". ʂ: 
\"9 ̂: *" [case-fold-search t string code symbol-name "" string-match "s.*jis" 1 "euc" 3 "jis" 2 0] 6))

(defun set-kanji-fileio-code (code &optional buffer) (interactive (byte-code "%C" [extended-kanji-code-alist nil t completing-read "Kanji Code System : "] 6)) (byte-code "?5 9 !5 ;  \"A!?5 %\"A< pqtK  !)" [extended-kanji-code-alist nil t code kanji-code-alist buffer kanji-fileio-code kanji-code-internal assoc kanji-code-p completing-read "Kanji Code System : " set-buffer-modified-p buffer-modified-p] 10))

(defun set-default-kanji-fileio-code (code) (interactive (byte-code "%C" [extended-kanji-code-alist nil t completing-read "Kanji Code System : "] 6)) (byte-code "?5 9 !5 ;  \"A!?5 %\"A\"" [extended-kanji-code-alist nil t code kanji-code-alist kanji-fileio-code kanji-code-internal assoc kanji-code-p completing-read "Kanji Code System : " set-default] 10))

(defconst expected-kanji-code-alist (append (quote (("auto" . t))) extended-kanji-code-alist))

(defun set-kanji-expected-code (code) (interactive (byte-code "%C" [expected-kanji-code-alist nil t completing-read "Kanji Code System : "] 6)) (byte-code "?; =; 9 !; ;& \"A!?; %\"A" [expected-kanji-code-alist nil t code kanji-code-alist kanji-expected-code kanji-code-internal assoc kanji-code-p completing-read "Kanji Code System : "] 10))

(defun set-kanji-input-code (code) (interactive (byte-code "%C" [kanji-code-alist nil t completing-read "Kanji Code System : "] 6)) (byte-code "9 !0 ; \"A!?0 %\"A !" [kanji-code-alist nil t code kanji-input-code kanji-code-internal assoc kanji-code-p completing-read "Kanji Code System : " set-buffer-modified-p buffer-modified-p] 10))

(defun set-kanji-display-code (code) (interactive (byte-code "%C" [kanji-code-alist nil t completing-read "Kanji Code System : "] 6)) (byte-code "9 !0 ; \"A!?0 %\"A!?E %\"AtR  !" [kanji-code-alist nil t code kanji-display-code kanji-code-internal assoc kanji-code-p completing-read "Kanji Code System : " set-buffer-modified-p buffer-modified-p] 13))

(defun set-default-kanji-process-code (code) (interactive (byte-code "%C" [kanji-code-alist nil t completing-read "Kanji Code System : "] 6)) (byte-code "9 !0 ; \"A!?0 %\"A" [kanji-code-alist nil t code default-kanji-process-code kanji-code-internal assoc kanji-code-p completing-read "Kanji Code System : "] 10))

(defun set-kanji-process-code (code) (interactive (byte-code "%C" [kanji-code-alist nil t completing-read "Kanji Code System : "] 6)) (byte-code "9 !0 ; \"A!?0 %\"Aʏt>  !" [kanji-code-alist nil t code kanji-code-internal assoc kanji-code-p completing-read "Kanji Code System : " (byte-code "	\"" [nil code set-process-kanji-code] 3) ((error (byte-code "" [nil] 1))) set-buffer-modified-p buffer-modified-p] 10))

(defvar kanji-expected-code t "\
* Expected Kanji code when a file is read.
0:No-conversion  1:Shift-JIS  2:JIS  3:EUC/AT&T/DEC
If T, kanji code is guessed automatically.
If NIL, code conversion is done according to kanji-fileio-code.
After a file is read, kanji-fileio-code of the buffer is set to
the quessed code if kanji-fileio-code is nil.")

(set-default (quote kanji-expected-code) t)

(or (fboundp (quote si:find-file)) (fset (quote si:find-file) (symbol-function (quote find-file))))

(defun find-file (filename &optional code) "\
Edit file FILENAME.
Switch to a buffer visiting file FILENAME,
creating one if none already exists. Optional argument CODE
specifies the kanji-expected-code for the FILENAME.
If interactive, a numeric argument can be specified.
Just C-u means t for kanji-expected-code." (interactive "FFind file: 
P") (byte-code "	? 2 	= 2 	< Â2 	W' 	V1 	\"2 	!)" [kanji-expected-code code nil t filename - 0 3 error "Invalid argument %s" si:find-file] 3))

(or (fboundp (quote si:find-alternate-file)) (fset (quote si:find-alternate-file) (symbol-function (quote find-alternate-file))))

(defun find-alternate-file (filename &optional code) "\
Find file FILENAME, select its buffer, kill previous buffer.
If the current buffer now contains an empty file that you just visited
(presumably by mistake), use this command to visit the file you really want.
Optional argument CODE specifies the kanji-expected-code for the FILENAME.
If interactive, a numeric argument can be specified.
Just C-u means t for kanji-expected-code." (interactive "FFind alternate file: 
P") (byte-code "	? 2 	= 2 	< Â2 	W' 	V1 	\"2 	!)" [kanji-expected-code code nil t filename - 0 3 error "Invalid argument %s" si:find-alternate-file] 3))

(or (fboundp (quote si:find-file-read-only)) (fset (quote si:find-file-read-only) (symbol-function (quote find-file-read-only))))

(defun find-file-read-only (filename &optional code) "\
Edit file FILENAME but don't save without confirmation.
Like find-file but marks buffer as read-only.
Optional argument CODE specifies the kanji-expected-code for the FILENAME.
If interactive, a numeric argument can be specified.
Just C-u means t for kanji-expected-code." (interactive "FFind file read-only: 
P") (byte-code "	? 2 	= 2 	< Â2 	W' 	V1 	\"2 	!)" [kanji-expected-code code nil t filename - 0 3 error "Invalid argument %s" si:find-file-read-only] 3))

(or (fboundp (quote si:find-file-other-window)) (fset (quote si:find-file-other-window) (symbol-function (quote find-file-other-window))))

(defun find-file-other-window (filename &optional code) "\
Edit file FILENAME, in another window.
May create a new window, or reuse an existing one;
see the function display-buffer.
Optional argument CODE specifies the kanji-expected-code for the FILENAME.
If interactive, a numeric argument can be specified.
Just C-u means t for kanji-expected-code." (interactive "FFind file in other window: 
P") (byte-code "	? 2 	= 2 	< Â2 	W' 	V1 	\"2 	!)" [kanji-expected-code code nil t filename - 0 3 error "Invalid argument %s" si:find-file-other-window] 3))

(defvar default-kanji-fileio-code-find-file-not-found default-kanji-fileio-code)

(defun find-file-not-found-set-kanji-fileio-code nil (byte-code "	" [kanji-fileio-code default-kanji-fileio-code-find-file-not-found nil] 2))

(or (memq (quote find-file-not-found-set-kanji-fileio-code) find-file-not-found-hooks) (setq find-file-not-found-hooks (cons (quote find-file-not-found-set-kanji-fileio-code) find-file-not-found-hooks)))

(defun find-kanji-file-input-code (filename visit start end) (byte-code "	?
 
= ? \"
?% )" [code kanji-expected-code kanji-fileio-code t start end check-region-kanji-code] 3))

(fset (quote default-find-kanji-file-input-code) (symbol-function (quote find-kanji-file-input-code)))

(setq find-kanji-file-input-code (quote find-kanji-file-input-code))

(defvar kanji-file-input-code-alist (quote (("\\.el$" . 3) ("/spool/mail/.*$" . convert-mbox-kanji-code))))

(defun find-kanji-file-input-code-from-filename (filename visit start end) (byte-code "	=!
? 6 @@\"- @AȉA )\\ !F \\ 9N !\\ 	
%+" [alist kanji-file-input-code-alist found nil code case-fold-search system-type filename t visit start end vax-vms file-name-sans-versions string-match numberp fboundp funcall] 10))

(defun convert-mbox-kanji-code (filename visit start end) (byte-code "
\"ebm?K `!#$  `
\"= U= UF 
$+ ))" [buffer-read-only nil start end code narrow-to-region forward-char 1 re-search-forward "^From" move beginning-of-line check-region-kanji-code 2 convert-region-kanji-code 3] 11))

(defun find-kanji-file-input-code-from-file-variables nil "\
Parse, and bind or evaluate as appropriate, any local variables
for current buffer." (byte-code "dbdZe]##)!l7 ` `\"!bnJ ` `\"W G!d !t !w ! ! ! !!`!l !!`\"		!
	!\"  !!p!!! ! l !
= +e -)" [case-fold-search t nil continue prefix prefixlen suffix beg selective-display str var val kanji-fileio-code search-backward "
" 3000 move search-forward "Local Variables:" skip-chars-forward " 	" buffer-substring end-of-line match-beginning 0 beginning-of-line regexp-quote re-search-forward "[
]" forward-line 1 looking-at forward-char error "Local variables entry is missing the prefix" "^:
" "Missing colon in local variables entry" skip-chars-backward read string-equal downcase "end" "^:" "
" "Local variables entry is terminated incorrectly"] 33))

(defvar kanji-file-output-code-query-flag nil "\
*non-nil means that kanji code is queried when kanji-fileio-code is nil.")

(defun find-kanji-file-output-code (start end filename append visit) (byte-code " 	? 
\"%!	" [kanji-file-output-code-query-flag kanji-fileio-code filename kanji-code-alist nil t kanji-code-internal completing-read format "Kanji Code System for %s: "] 8))

(fset (quote default-find-kanji-file-output-code) (symbol-function (quote find-kanji-file-output-code)))

(setq find-kanji-file-output-code (quote find-kanji-file-output-code))

(defvar default-kanji-process-code 0 "\
* Default kanji code for process I/O.
 0:No-conversion 1:Shift-JIS
2:JIS 3:EUC/AT&T/DEC
 Used when kanji-process-code-hook is not set
or the function
 set to the variable returns invalid code. ")

(defun find-kanji-process-code (buffer program &optional servicep &rest args) "\
Arguments are BUFFER, PROGRAM, SERVICEP, and ARGS. BUFFER is output
buffer name of a process or nil.  If SERVICEP is nil, PROGRAM is a path name
of a program to be executed and ARGS is a list of the arguments.
If SERVICEP is not nil, PROGRAM is a name of a service for
open-network-stream and ARGS is a list of hosts.
Kanji code of the process is set to the return value of this function
Please redefine this function as you wish." (byte-code "? ȉ =  \" @\"& \"
H 
A!7 
AE 
A?A ƂE ΏJ )" [buffer t place servicep program args nil default-kanji-process-code "" buffer-name find-service-kanji-code find-program-kanji-code numberp (byte-code "A	
%" [place buffer program servicep args apply] 6) ((error (byte-code "" [default-kanji-process-code] 1)))] 7))

(fset (quote default-find-kanji-process-code) (symbol-function (quote find-kanji-process-code)))

(setq find-kanji-process-code (quote find-kanji-process-code))

(defun strict-string-match (regexp string &optional start) (byte-code "	
	 #= !	G=" [regexp string start 0 string-match match-end] 5))

(defvar program-kanji-code-alist nil)

(defun define-program-kanji-code (buffer program code) (byte-code "	
B\" \" BB*" [key buffer program place program-kanji-code-alist code assoc setcdr] 4))

(defun find-program-kanji-code (buffer program) (byte-code "	
 
?$ @@# @A 
*" [alist program-kanji-code-alist place nil buffer program program-kanji-code-match] 5))

(defun program-kanji-code-match (buffer program patpair) (byte-code "	@	A
9 
! 
J; 
J?* ;* \"D 
?D 
;D 
\"D 
!\"*" [bpat patpair ppat buffer program boundp string-match strict-string-match file-name-nondirectory] 7))

(define-program-kanji-code nil "rsh" (quote find-kanji-process-code-rsh))

(defun find-kanji-process-code-rsh (buffer rsh &optional servicep host &rest args) (byte-code "@\" AA@\" A	@A$" [args buffer nil equal "-l" "-n" find-kanji-process-code] 7))

(define-program-kanji-code nil (concat exec-directory "env") (quote find-kanji-process-code-env))

(defun find-kanji-process-code-env (buffer env &optional servicep &rest args) (byte-code "@\" A@\"2 @\"2 @\"2 @\"2 @\"n @\"B @\"N AAAj @\"[ @\"f AAj A @\"| @\" A
@A$" [args t buffer nil string= "-" string-match "=" "-s" "-set" "-u" "-unset" "--" find-kanji-process-code] 17))

(defvar service-kanji-code-alist nil)

(defun define-service-kanji-code (service host code) (byte-code "	
B\" \" BB*" [key service host place service-kanji-code-alist code assoc setcdr] 4))

(defun find-service-kanji-code (service host) (byte-code "	
 
?$ @@# @A 
*" [alist service-kanji-code-alist place nil service host service-kanji-code-match] 5))

(defun service-kanji-code-match (service host patpair) (byte-code "	@	A? = ; ; \"+ 
?+ 
\"*" [spat patpair hpat service host strict-string-match] 4))
