1 ;;; postpet.el --- Postpet support for GNU Emacs
3 ;; Copyright (C) 1999,2000 Free Software Foundation, Inc.
5 ;; Author: Tanaka Akira <akr@jaist.ac.jp>
6 ;; Keywords: Postpet, MIME, multimedia, mail, news
8 ;; This file is part of SEMI (Sample of Elastic MIME Interfaces).
10 ;; This program is free software; you can redistribute it and/or
11 ;; modify it under the terms of the GNU General Public License as
12 ;; published by the Free Software Foundation; either version 2, or (at
13 ;; your option) any later version.
15 ;; This program is distributed in the hope that it will be useful, but
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 ;; General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
29 (put 'unpack 'lisp-indent-function 1)
30 (defmacro unpack (string &rest body)
31 `(let* ((*unpack*string* (string-as-unibyte ,string))
35 (defun unpack-skip (len)
36 (setq *unpack*index* (+ len *unpack*index*)))
38 (defun unpack-fixed (len)
40 (substring *unpack*string* *unpack*index* (+ *unpack*index* len))
44 (char-int (aref (unpack-fixed 1) 0)))
46 (defun unpack-short ()
47 (let* ((b0 (unpack-byte))
52 (let* ((s0 (unpack-short))
56 (defun unpack-string ()
57 (let ((len (unpack-byte)))
60 (defun unpack-string-sjis ()
61 (decode-mime-charset-string (unpack-string) 'shift_jis))
64 (defun postpet-decode (string)
69 (set-alist 'res 'carryingcount (unpack-long))
71 (set-alist 'res 'sentyear (unpack-short))
72 (set-alist 'res 'sentmonth (unpack-short))
73 (set-alist 'res 'sentday (unpack-short))
75 (set-alist 'res 'petname (unpack-string-sjis))
76 (set-alist 'res 'owner (unpack-string-sjis))
77 (set-alist 'res 'pettype (unpack-fixed 4))
78 (set-alist 'res 'health (unpack-short))
80 (set-alist 'res 'sex (unpack-long))
82 (set-alist 'res 'brain (unpack-byte))
84 (set-alist 'res 'happiness (unpack-byte))
86 (set-alist 'res 'petbirthyear (unpack-short))
87 (set-alist 'res 'petbirthmonth (unpack-short))
88 (set-alist 'res 'petbirthday (unpack-short))
90 (set-alist 'res 'from (unpack-string))
97 (set-alist 'res 'treasure (unpack-short))
98 (set-alist 'res 'money (unpack-long))
103 (defun mime-display-application/x-postpet (entity situation)
105 (narrow-to-region (point-max)(point-max))
106 (let ((pet (postpet-decode (mime-entity-content entity))))
109 "Petname: " (cdr (assq 'petname pet))
111 "Owner: " (cdr (assq 'owner pet))
113 "Pettype: " (cdr (assq 'pettype pet))
115 "From: " (cdr (assq 'from pet))
117 "CarryingCount: " (int-to-string (cdr (assq 'carryingcount pet)))
119 "SentYear: " (int-to-string (cdr (assq 'sentyear pet)))
121 "SentMonth: " (int-to-string (cdr (assq 'sentmonth pet)))
123 "SentDay: " (int-to-string (cdr (assq 'sentday pet)))
125 "PetbirthYear: " (int-to-string (cdr (assq 'petbirthyear pet)))
127 "PetbirthMonth: " (int-to-string (cdr (assq 'petbirthmonth pet)))
129 "PetbirthDay: " (int-to-string (cdr (assq 'petbirthday pet)))
131 "Health: " (int-to-string (cdr (assq 'health pet)))
133 "Sex: " (int-to-string (cdr (assq 'sex pet)))
135 "Brain: " (int-to-string (cdr (assq 'brain pet)))
137 "Happiness: " (int-to-string (cdr (assq 'happiness pet)))
139 "Treasure: " (int-to-string (cdr (assq 'treasure pet)))
141 "Money: " (int-to-string (cdr (assq 'money pet)))
143 (insert "Invalid format\n"))
144 (run-hooks 'mime-display-application/x-postpet-hook))))
152 ;;; postpet.el ends here