197 lines
6.8 KiB
C
197 lines
6.8 KiB
C
|
/*
|
||
|
** JAM(mbp) - The Joaquim-Andrew-Mats Message Base Proposal
|
||
|
**
|
||
|
** C API
|
||
|
**
|
||
|
** Written by Joaquim Homrighausen.
|
||
|
**
|
||
|
** ----------------------------------------------------------------------
|
||
|
**
|
||
|
** jam.h (JAMmb)
|
||
|
**
|
||
|
** Prototypes and definitions for the JAM message base format
|
||
|
**
|
||
|
** Copyright 1993 Joaquim Homrighausen, Andrew Milner, Mats Birch, and
|
||
|
** Mats Wallin. ALL RIGHTS RESERVED.
|
||
|
**
|
||
|
** 93-06-28 JoHo
|
||
|
** Initial coding.
|
||
|
**
|
||
|
*/
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#ifndef __JAM_H__
|
||
|
#define __JAM_H__
|
||
|
|
||
|
#ifndef __JAMSYS_H__
|
||
|
#include "jamsys.h"
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
** File extensions
|
||
|
*/
|
||
|
#define EXT_HDRFILE ".jhr"
|
||
|
#define EXT_TXTFILE ".jdt"
|
||
|
#define EXT_IDXFILE ".jdx"
|
||
|
#define EXT_LRDFILE ".jlr"
|
||
|
|
||
|
/*
|
||
|
** Revision level and header signature
|
||
|
*/
|
||
|
#define CURRENTREVLEV 1
|
||
|
#define HEADERSIGNATURE "JAM"
|
||
|
|
||
|
/*
|
||
|
** Header file information block, stored first in all .JHR files
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
CHAR8 Signature[4]; /* <J><A><M> followed by <NUL> */
|
||
|
UINT32 DateCreated; /* Creation date */
|
||
|
UINT32 ModCounter; /* Last processed counter */
|
||
|
UINT32 ActiveMsgs; /* Number of active (not deleted) msgs */
|
||
|
UINT32 PasswordCRC; /* CRC-32 of password to access */
|
||
|
UINT32 BaseMsgNum; /* Lowest message number in index file */
|
||
|
CHAR8 RSRVD[1000]; /* Reserved space */
|
||
|
}
|
||
|
JAMHDRINFO, _JAMDATA * JAMHDRINFOptr;
|
||
|
|
||
|
/*
|
||
|
** Message status bits
|
||
|
*/
|
||
|
#define MSG_LOCAL 0x00000001L /* Msg created locally */
|
||
|
#define MSG_INTRANSIT 0x00000002L /* Msg is in-transit */
|
||
|
#define MSG_PRIVATE 0x00000004L /* Private */
|
||
|
#define MSG_READ 0x00000008L /* Read by addressee */
|
||
|
#define MSG_SENT 0x00000010L /* Sent to remote */
|
||
|
#define MSG_KILLSENT 0x00000020L /* Kill when sent */
|
||
|
#define MSG_ARCHIVESENT 0x00000040L /* Archive when sent */
|
||
|
#define MSG_HOLD 0x00000080L /* Hold for pick-up */
|
||
|
#define MSG_CRASH 0x00000100L /* Crash */
|
||
|
#define MSG_IMMEDIATE 0x00000200L /* Send Msg now, ignore restrictions */
|
||
|
#define MSG_DIRECT 0x00000400L /* Send directly to destination */
|
||
|
#define MSG_GATE 0x00000800L /* Send via gateway */
|
||
|
#define MSG_FILEREQUEST 0x00001000L /* File request */
|
||
|
#define MSG_FILEATTACH 0x00002000L /* File(s) attached to Msg */
|
||
|
#define MSG_TRUNCFILE 0x00004000L /* Truncate file(s) when sent */
|
||
|
#define MSG_KILLFILE 0x00008000L /* Delete file(s) when sent */
|
||
|
#define MSG_RECEIPTREQ 0x00010000L /* Return receipt requested */
|
||
|
#define MSG_CONFIRMREQ 0x00020000L /* Confirmation receipt requested */
|
||
|
#define MSG_ORPHAN 0x00040000L /* Unknown destination */
|
||
|
#define MSG_ENCRYPT 0x00080000L /* Msg text is encrypted */
|
||
|
#define MSG_COMPRESS 0x00100000L /* Msg text is compressed */
|
||
|
#define MSG_ESCAPED 0x00200000L /* Msg text is seven bit ASCII */
|
||
|
#define MSG_FPU 0x00400000L /* Force pickup */
|
||
|
#define MSG_TYPELOCAL 0x00800000L /* Msg is for local use only (not for export) */
|
||
|
#define MSG_TYPEECHO 0x01000000L /* Msg is for conference distribution */
|
||
|
#define MSG_TYPENET 0x02000000L /* Msg is direct network mail */
|
||
|
#define MSG_NODISP 0x20000000L /* Msg may not be displayed to user */
|
||
|
#define MSG_LOCKED 0x40000000L /* Msg is locked, no editing possible */
|
||
|
#define MSG_DELETED 0x80000000L /* Msg is deleted */
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Message header
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
CHAR8 Signature[4]; /* <J><A><M> followed by <NUL> */
|
||
|
UINT16 Revision; /* CURRENTREVLEV */
|
||
|
UINT16 ReservedWord; /* Reserved */
|
||
|
UINT32 SubfieldLen; /* Length of subfields */
|
||
|
UINT32 TimesRead; /* Number of times message read */
|
||
|
UINT32 MsgIdCRC; /* CRC-32 of MSGID line */
|
||
|
UINT32 ReplyCRC; /* CRC-32 of REPLY line */
|
||
|
UINT32 ReplyTo; /* This msg is a reply to.. */
|
||
|
UINT32 Reply1st; /* First reply to this msg */
|
||
|
UINT32 ReplyNext; /* Next msg in reply chain */
|
||
|
UINT32 DateWritten; /* When msg was written */
|
||
|
UINT32 DateReceived; /* When msg was received/read */
|
||
|
UINT32 DateProcessed; /* When msg was processed by packer */
|
||
|
UINT32 MsgNum; /* Message number (1-based) */
|
||
|
UINT32 Attribute; /* Msg attribute, see "Status bits" */
|
||
|
UINT32 Attribute2; /* Reserved for future use */
|
||
|
UINT32 TxtOffset; /* Offset of text in text file */
|
||
|
UINT32 TxtLen; /* Length of message text */
|
||
|
UINT32 PasswordCRC; /* CRC-32 of password to access msg */
|
||
|
UINT32 Cost; /* Cost of message */
|
||
|
}
|
||
|
JAMHDR, _JAMDATA * JAMHDRptr;
|
||
|
|
||
|
/*
|
||
|
** Message header subfield types
|
||
|
*/
|
||
|
#define JAMSFLD_OADDRESS 0
|
||
|
#define JAMSFLD_DADDRESS 1
|
||
|
#define JAMSFLD_SENDERNAME 2
|
||
|
#define JAMSFLD_RECVRNAME 3
|
||
|
#define JAMSFLD_MSGID 4
|
||
|
#define JAMSFLD_REPLYID 5
|
||
|
#define JAMSFLD_SUBJECT 6
|
||
|
#define JAMSFLD_PID 7
|
||
|
#define JAMSFLD_TRACE 8
|
||
|
#define JAMSFLD_ENCLFILE 9
|
||
|
#define JAMSFLD_ENCLFWALIAS 10
|
||
|
#define JAMSFLD_ENCLFREQ 11
|
||
|
#define JAMSFLD_ENCLFILEWC 12
|
||
|
#define JAMSFLD_ENCLINDFILE 13
|
||
|
#define JAMSFLD_EMBINDAT 1000
|
||
|
#define JAMSFLD_FTSKLUDGE 2000
|
||
|
#define JAMSFLD_SEENBY2D 2001
|
||
|
#define JAMSFLD_PATH2D 2002
|
||
|
#define JAMSFLD_FLAGS 2003
|
||
|
#define JAMSFLD_TZUTCINFO 2004
|
||
|
#define JAMSFLD_UNKNOWN 0xffff
|
||
|
|
||
|
/*
|
||
|
** Message header subfield
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
UINT16 LoID; /* Field ID, 0 - 0xffff */
|
||
|
UINT16 HiID; /* Reserved for future use */
|
||
|
UINT32 DatLen; /* Length of buffer that follows */
|
||
|
CHAR8 Buffer[1]; /* DatLen bytes of data */
|
||
|
}
|
||
|
JAMSUBFIELD, _JAMDATA * JAMSUBFIELDptr;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
UINT16 LoID; /* Field ID, 0 - 0xffff */
|
||
|
UINT16 HiID; /* Reserved for future use */
|
||
|
UINT32 DatLen; /* Length of buffer that follows */
|
||
|
}
|
||
|
JAMBINSUBFIELD, _JAMDATA * JAMBINSUBFIELDptr;
|
||
|
|
||
|
/*
|
||
|
** Message index record
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
UINT32 UserCRC; /* CRC-32 of destination username */
|
||
|
UINT32 HdrOffset; /* Offset of header in .JHR file */
|
||
|
}
|
||
|
JAMIDXREC, _JAMDATA * JAMIDXRECptr;
|
||
|
|
||
|
/*
|
||
|
** Lastread structure, one per user
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
UINT32 UserCRC; /* CRC-32 of user name (lowercase) */
|
||
|
UINT32 UserID; /* Unique UserID */
|
||
|
UINT32 LastReadMsg; /* Last read message number */
|
||
|
UINT32 HighReadMsg; /* Highest read message number */
|
||
|
}
|
||
|
JAMLREAD, _JAMDATA * JAMLREADptr;
|
||
|
|
||
|
#endif /* __JAM_H__ */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/* end of file "jam.h" */
|