+(defun elmo-message-accessible-p (folder number)
+ "Get accessibility of the message.
+Return non-nil when message is accessible."
+ (or (elmo-folder-plugged-p folder)
+ (elmo-folder-local-p folder)
+ (elmo-msgdb-get-cached (elmo-folder-msgdb folder) number)))
+
+(luna-define-generic elmo-message-set-cached (folder number cached)
+ "Set cache status of the message in the msgdb.
+FOLDER is the ELMO folder structure.
+NUMBER is a number of the message.
+If CACHED is t, message is set as cached.")
+
+(luna-define-method elmo-message-set-cached ((folder elmo-folder)
+ number cached)
+ (when (elmo-msgdb-set-cached (elmo-folder-msgdb folder)
+ number
+ cached
+ (elmo-message-use-cache-p folder number))
+ (elmo-folder-set-mark-modified-internal folder t)))
+
+(defun elmo-message-copy-entity (entity)
+ ;;
+ (elmo-msgdb-copy-overview-entity entity))
+
+(defun elmo-message-entity-set-number (entity number)
+ (elmo-msgdb-overview-entity-set-number entity number))
+
+(luna-define-generic elmo-message-entity (folder key)
+ "Return the message-entity structure which matches to the KEY.
+KEY is a number or a string.
+A number is for message number in the FOLDER.
+A string is for message-id of the message.")
+
+(luna-define-method elmo-message-entity ((folder elmo-folder) key)
+ (elmo-msgdb-message-entity (elmo-folder-msgdb folder) key))
+
+(luna-define-generic elmo-message-entity-parent (folder entity)
+ "Return the parent message-entity structure in the FOLDER.
+ENTITY is the message-entity to get the parent.")
+
+(luna-define-method elmo-message-entity-parent ((folder elmo-folder) entity)
+ (elmo-msgdb-get-parent-entity entity (elmo-folder-msgdb folder)))
+
+(put 'elmo-folder-do-each-message-entity 'lisp-indent-function '1)
+(def-edebug-spec elmo-folder-do-each-message-entity
+ ((symbolp form &rest form) &rest form))
+
+(defsubst elmo-folder-list-message-entities (folder)
+ ;; List all message entities in the FOLDER.
+ (mapcar
+ (lambda (number) (elmo-message-entity folder number))
+ (elmo-folder-list-messages folder t t)))
+
+(defmacro elmo-folder-do-each-message-entity (spec &rest form)
+ "Iterator for message entity in the folder.
+\(elmo-folder-do-each-message-entity \(entity folder\)
+ ... do the process using entity...
+\)"
+ `(dolist (,(car spec) (elmo-folder-list-message-entities ,(car (cdr spec))))
+ ,@form))
+
+(defmacro elmo-message-entity-number (entity)
+ `(elmo-msgdb-overview-entity-get-number ,entity))
+
+(defun elmo-message-entity-field (entity field &optional decode)
+ "Get message entity field value.
+ENTITY is the message entity structure obtained by `elmo-message-entity'.
+FIELD is the symbol of the field name.
+if optional DECODE is non-nil, returned value is decoded."
+ (elmo-msgdb-message-entity-field entity field decode))
+
+(defun elmo-message-entity-set-field (entity field value)
+ "Set message entity field value.
+ENTITY is the message entity structure.
+FIELD is the symbol of the field name.
+VALUE is the field value (raw)."
+ (elmo-msgdb-message-entity-set-field entity field value))
+
+(luna-define-generic elmo-folder-count-flags (folder)
+ "Count flagged message number in the msgdb of the FOLDER.
+Return a list of numbers (`new' `unread' `answered')")
+
+(luna-define-method elmo-folder-count-flags ((folder elmo-folder))
+ (let ((new 0)
+ (unreads 0)
+ (answered 0))
+ (dolist (elem (elmo-msgdb-get-mark-alist (elmo-folder-msgdb folder)))
+ (cond
+ ((string= (cadr elem) elmo-msgdb-new-mark)
+ (incf new))
+ ((member (cadr elem) (elmo-msgdb-unread-marks))
+ (incf unreads))
+ ((member (cadr elem) (elmo-msgdb-answered-marks))
+ (incf answered))))
+ (list new unreads answered)))
+
+(defun elmo-message-set-flag (folder number flag)
+ "Set message flag.
+FOLDER is a ELMO folder structure.
+NUMBER is a message number to set flag.
+
+FLAG is a symbol which is one of the following:
+ `unread' (set the message as unread)
+ `answered' (set the message as answered)
+ `important' (set the message as important)
+'sugar' flag:
+ `read' (remove new and unread flags)")
+
+(defun elmo-message-unset-flag (folder number flag)
+ "Unset message flag.
+FOLDER is a ELMO folder structure.
+NUMBER is a message number to set flag.
+
+FLAG is a symbol which is one of the following:
+ `unread' (remove unread and new flag)
+ `answered' (remove answered flag)
+ `important' (remove important flag)
+'sugar' flag:
+ `read' (set unread flag)")
+
+(luna-define-generic elmo-message-mark (folder number)