-struct CtdlMessage *CtdlFetchMessage(long msgnum, int with_body);
-void CtdlFreeMessage(struct CtdlMessage *msg);
-void serialize_message(struct ser_ret *, struct CtdlMessage *);
-void dump_message(struct CtdlMessage *msg, long Siz);
-int is_valid_message(struct CtdlMessage *);
+struct CtdlMessage *CtdlFetchMessage(long msgnum, int with_body, int run_msg_hooks);
+struct CtdlMessage * CM_Duplicate
+ (struct CtdlMessage *OrgMsg);
+int CM_IsEmpty (struct CtdlMessage *Msg, eMsgField which);
+void CM_SetField (struct CtdlMessage *Msg, eMsgField which, const char *buf, long length);
+void CM_SetFieldLONG (struct CtdlMessage *Msg, eMsgField which, long lvalue);
+void CM_CopyField (struct CtdlMessage *Msg, eMsgField WhichToPutTo, eMsgField WhichtToCopy);
+void CM_CutFieldAt (struct CtdlMessage *Msg, eMsgField WhichToCut, long maxlen);
+void CM_FlushField (struct CtdlMessage *Msg, eMsgField which);
+void CM_Flush (struct CtdlMessage *Msg);
+void CM_SetAsField (struct CtdlMessage *Msg, eMsgField which, char **buf, long length);
+void CM_SetAsFieldSB (struct CtdlMessage *Msg, eMsgField which, StrBuf **buf);
+void CM_GetAsField (struct CtdlMessage *Msg, eMsgField which, char **ret, long *retlen);
+void CM_PrependToField (struct CtdlMessage *Msg, eMsgField which, const char *buf, long length);
+
+void CM_Free (struct CtdlMessage *msg);
+void CM_FreeContents (struct CtdlMessage *msg);
+int CM_IsValidMsg (struct CtdlMessage *msg);
+
+#define CM_KEY(Message, Which) Message->cm_fields[Which], Message->cm_lengths[Which]
+#define CM_RANGE(Message, Which) Message->cm_fields[Which], \
+ Message->cm_fields[Which] + Message->cm_lengths[Which]
+
+void CtdlSerializeMessage(struct ser_ret *, struct CtdlMessage *);
+struct CtdlMessage *CtdlDeserializeMessage(long msgnum, int with_body, const char *Buffer, long Length);