640 lines
28 KiB
HTML
640 lines
28 KiB
HTML
<HTML>
|
||
<!-- $Id$ -->
|
||
<HEAD>
|
||
<TITLE>JAM Message Base Proposal.</TITLE>
|
||
</HEAD>
|
||
|
||
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
|
||
<BODY
|
||
BGCOLOR="#FFFFFF"
|
||
TEXT="#000000"
|
||
LINK="#0000FF"
|
||
VLINK="#000080"
|
||
ALINK="#FF0000"
|
||
>
|
||
<PRE>
|
||
Filename....: JAM-001
|
||
Rev.........: 001
|
||
Dated.......: 93-07-01
|
||
Status .....: Released
|
||
Subject.....: JAM message base proposal
|
||
Author......: Joaquim Homrighausen
|
||
Co-Authors..: Andrew Milner, Mats Birch, Mats Wallin
|
||
|
||
---------------------------------------------------------------------
|
||
JAM(mbp)
|
||
The Joaquim-Andrew-Mats Message Base Proposal
|
||
---------------------------------------------------------------------
|
||
Copyright 1993 Joaquim Homrighausen, Andrew Milner,
|
||
Mats Birch, Mats Wallin.
|
||
ALL RIGHTS RESERVED.
|
||
---------------------------------------------------------------------
|
||
|
||
|
||
=====================================================================
|
||
Restrictions
|
||
---------------------------------------------------------------------
|
||
JAM may be used by any developer as long as these specifications are
|
||
followed exactly. JAM may be used free-of-charge by any developer
|
||
for any purpose, commercially or otherwise.
|
||
|
||
This document may be freely copied and distributed, but must NEVER be
|
||
distributed in a modified form. If you have an enhancement request,
|
||
please contact the author of this document; do not change it
|
||
yourself.
|
||
|
||
All applications that support JAM must include one of the following
|
||
notices in their documentation and somewhere in the product's credit
|
||
section:
|
||
|
||
"JAM(mbp) - Copyright 1993 Joaquim Homrighausen, Andrew Milner,
|
||
Mats Birch, Mats Wallin.
|
||
ALL RIGHTS RESERVED."
|
||
|
||
or
|
||
|
||
"This product uses the JAM(mbp) API -
|
||
Copyright 1993 Joaquim Homrighausen, Andrew Milner, Mats Birch,
|
||
Mats Wallin. ALL RIGHTS RESERVED."
|
||
|
||
No organization, company, person, entity, or other being may impose
|
||
any fees for any reason for providing this document or the
|
||
accompanying API. This document and the accompanying API may not be
|
||
sold or otherwise transferred for personal or company gain under any
|
||
circumstances.
|
||
|
||
=====================================================================
|
||
Definitions and general notes
|
||
---------------------------------------------------------------------
|
||
CURRENTREV 1
|
||
|
||
JAM The JAM message base format.
|
||
|
||
CRC Cyclic Redundancy Check. All CRC values
|
||
calculated on strings must assume that the
|
||
data within the string has been converted
|
||
to lowercase (A-Z = a-z).
|
||
|
||
CRC-32 32-bit CRC (as used in the Zmodem file
|
||
transfer protocol) value. The polynom for
|
||
a CRC-32 is edb88320H and the CRC-32 seed
|
||
is -1L (ffffffffH).
|
||
|
||
uchar Unsigned 8-bit value
|
||
|
||
ushort Unsigned 16-bit value
|
||
|
||
ulong Unsigned 32-bit value
|
||
|
||
UNIX date An ulong representing the number of seconds
|
||
since midnight, January 1, 1970. UNIX-style
|
||
dates is the only form of time stamps used
|
||
in JAM (1).
|
||
|
||
Message # The physical record number within the index
|
||
file is used as a message number. The
|
||
lowest message number is one (1) and the
|
||
highest message number is 4294967295
|
||
(ffffffffH).
|
||
|
||
FTN FidoNet Technology Network
|
||
|
||
FTS FidoNet Technical Standard
|
||
|
||
(1) All timestamps created locally (i.e. those not imported from
|
||
other systems) are stored in local time.
|
||
|
||
=====================================================================
|
||
Files
|
||
---------------------------------------------------------------------
|
||
Each conference is made up from four files. How and where these files
|
||
are stored and named is implementation dependant. The only file with
|
||
a fixed minimum size is the .JHR (header data) file. It has a 1024-
|
||
byte block used to hold information about a specific message area as
|
||
described later.
|
||
|
||
filename.JHR - Message header data
|
||
filename.JDT - Message text data
|
||
filename.JDX - Message index
|
||
filename.JLR - Lastread information
|
||
|
||
A future revision of JAM may also include a file that holds the
|
||
following three items:
|
||
|
||
- The highest assigned user number
|
||
- The last generated message ID
|
||
- A global conference list with the conference name, description,
|
||
and physical location of the message base.
|
||
|
||
=====================================================================
|
||
.JHR file header
|
||
---------------------------------------------------------------------
|
||
Below is the format of the 1024-byte record at the beginning of all
|
||
.JHR files. The first actual message header starts at offset 1024 in
|
||
the .JHR file.
|
||
|
||
FixedHeaderInfoStruct:
|
||
ulong Signature; // <J><A><M> followed by <NUL>
|
||
ulong datecreated; // Creation date
|
||
ulong modcounter; // Update counter
|
||
ulong activemsgs; // Number of active (not deleted) msgs
|
||
ulong passwordcrc; // CRC-32 of password to access
|
||
ulong basemsgnum; // Lowest message number in index file
|
||
uchar RESERVED[1000]; // Reserved space
|
||
end;
|
||
|
||
MODCOUNTER must be incremented and updated on disk each time an
|
||
application modifies the contents of the message base. When it
|
||
reaches ffffffffH, it wraps to zero.
|
||
|
||
---------------------------------------------------------------------
|
||
BaseMsgNum Lowest message number in index file
|
||
---------------------------------------------------------------------
|
||
This field determines the lowest message number in the index file.
|
||
The value for this field is one (1) when a message area is first
|
||
created. By using this field, a message area can be packed (deleted
|
||
messages are removed) without renumbering it. If BaseMsgNum contains
|
||
500, the first index record points to message number 500.
|
||
|
||
BaseMsgNum has to be taken into account when an application
|
||
calculates the next available message number (for creating new
|
||
messages) as well as the highest and lowest message number in a
|
||
message area.
|
||
|
||
---------------------------------------------------------------------
|
||
????????.JHR Message headers
|
||
---------------------------------------------------------------------
|
||
The .JHR file contains none or more Header records. Each record
|
||
define one message and contains information about the message and its
|
||
text (if any). The Header record is of variable length. The layout of
|
||
the Header record follows.
|
||
|
||
MessageHeader:
|
||
MessageFixedHeader:
|
||
ulong Signature; // <J><A><M> followed by <NUL>
|
||
ushort Revision; // Revision level of header (1)
|
||
ushort ReservedWord; // Reserved for future use
|
||
ulong SubfieldLen; // Length of subfields (2)
|
||
ulong TimesRead; // Number of times message read
|
||
ulong MSGIDcrc; // CRC-32 of MSGID line (3)
|
||
ulong REPLYcrc; // CRC-32 of REPLY line (3)
|
||
ulong ReplyTo; // This msg is a reply to..
|
||
ulong Reply1st; // First reply to this msg
|
||
ulong Replynext; // Next msg in reply chain
|
||
ulong DateWritten; // When msg was written
|
||
ulong DateReceived; // When msg was read by recipient
|
||
ulong DateProcessed;// When msg was processed by tosser/
|
||
// scanner
|
||
ulong MessageNumber;// Message number (1-based)
|
||
ulong Attribute; // Msg attribute, see "Msg Attributes"
|
||
ulong Attribute2; // Reserved for future use
|
||
ulong Offset; // Offset of text in ????????.JDT file
|
||
ulong TxtLen; // Length of message text
|
||
ulong PasswordCRC; // CRC-32 of password to access message
|
||
ulong Cost; // Cost of message
|
||
end;
|
||
SubField1 // Extra fields as defined below
|
||
.
|
||
.
|
||
SubFieldXX
|
||
end;
|
||
|
||
(1) This field is intended for future revisions of the specifications
|
||
to allow the use of a different fixed-length binary message
|
||
header. The current revision level is one (1).
|
||
|
||
(2) The SubfieldLen field is set to zero (0) if the header does not
|
||
have any subfield data. I.e. the length of the binary header is
|
||
not included in this field.
|
||
|
||
(3) When calculating the CRC-32 of the MSGID and REPLY lines, the
|
||
text ^aMSGID: and ^aREPLY: should be removed as well as all
|
||
leading and trailing white space characters.
|
||
|
||
|
||
The SubField structure is made up of an ID, a length specifier, and
|
||
a block of data. Zero or more subfields may follow the fixed-length
|
||
binary header. SubFields are not stored in any specific order and
|
||
are not terminated by any specific character unless otherwise
|
||
specified.
|
||
|
||
SubField:
|
||
ushort LoID; // Field ID, 0-65535
|
||
ushort HiID; // Reserved for future use
|
||
ulong datlen; // Length of buffer that follows
|
||
uchar Buffer[datlen]; // DATLEN bytes of data
|
||
end;
|
||
|
||
---------------------------------------------------------------------
|
||
Defined LoID codes
|
||
---------------------------------------------------------------------
|
||
|
||
ID=0, Name=OADDRESS
|
||
|
||
A network address. This is used to specify the originating address.
|
||
More than one OADDRESS field may exist. DATLEN must not exceed 100
|
||
characters. For a FidoNet-style address, this field must follow the
|
||
ZONE:NET/NODE.POINT@DOMAIN format where .POINT is excluded if zero
|
||
and @DOMAIN is excluded if unknown.
|
||
|
||
|
||
ID=1, Name=DADDRESS
|
||
|
||
A network address. This is used to specify the destination address.
|
||
More than one DADDRESS field may exist (e.g. carbon copies). DATLEN
|
||
must not exceed 100 characters. For a FidoNet-style address, this
|
||
field must follow the ZONE:NET/NODE.POINT@DOMAIN format where .POINT
|
||
is excluded if zero and @DOMAIN is excluded if unknown.
|
||
|
||
|
||
ID=2, Name=SENDERNAME
|
||
|
||
The sender (author) of the message. DATLEN must not exceed 100
|
||
characters.
|
||
|
||
|
||
ID=3, Name=RECEIVERNAME
|
||
|
||
The recipient of the message. DATLEN must not exceed 100 characters.
|
||
|
||
|
||
ID=4, Name=MSGID
|
||
|
||
Used to store the message identification data. All data not relevant
|
||
to the actual ID string, including leading and trailing white space
|
||
characters should be removed. DATLEN must not exceed 100 characters.
|
||
|
||
|
||
ID=5, Name=REPLYID
|
||
|
||
Used to store the message reply data. All data not relevant to the
|
||
actual reply string, including leading and trailing white space
|
||
characters should be removed. DATLEN must not exceed 100 characters.
|
||
|
||
|
||
ID=6, Name=SUBJECT
|
||
|
||
The subject of the message. DATLEN must not exceed 100 characters.
|
||
Note that this field may not be used for FidoNet-style file attaches
|
||
or file requests.
|
||
|
||
|
||
ID=7, Name=PID
|
||
|
||
Used to store the FTN PID kludge line. Only the actual PID data is
|
||
stored and ^aPID: is stripped along with any leading and trailing
|
||
white space characters. DATLEN must not exceed 40 characters.
|
||
|
||
|
||
ID=8, Name=TRACE
|
||
|
||
This is also referred to as ^aVia information in FTNs. It contains
|
||
information about a system which the message has travelled through.
|
||
The format of the field is <YYYYMMDDHHMMSS><Network address> where:
|
||
|
||
YYYY is the year (1992-9999)
|
||
MM is the month (01-12)
|
||
DD is the day (01-31)
|
||
HH is the hour (00-23)
|
||
MM is the minute (00-59)
|
||
SS is the second (00-59)
|
||
|
||
The timestamp is stored in ASCII (0-9) characters. The network
|
||
address is the address of the system. It is expressed in ASCII
|
||
notation in the native format of the forwarding system.
|
||
|
||
|
||
ID=9, Name=ENCLOSEDFILE
|
||
|
||
A file attached to the message. Only one filename may be specified
|
||
per subfield. No wildcard characters are allowed. If this subfield
|
||
is present in a message header, the ATTRIBUTE must include the
|
||
MSG_FILEATTACH bit.
|
||
|
||
|
||
ID=10, Name=ENCLOSEDFILEWALIAS
|
||
|
||
Identical to ENCLOSEDFILE with the exception that the filename is
|
||
followed by a <NUL> (00H) and an alias filename to be transmited to
|
||
the remote system in place of the local name of the file.
|
||
|
||
|
||
ID=11, Name=ENCLOSEDFREQ
|
||
|
||
A request for one or more files. Only one filemask may be specified
|
||
per subfield. If the filemask contains a complete path, it is to be
|
||
regarded as an update file request. If this subfield is present in a
|
||
message header, the ATTRIBUTE must include the MSG_FILEREQUEST bit.
|
||
To indicate that a password is to be transmitted along with the
|
||
request, a <NUL> (00H) character followed by the password is
|
||
appended. E.g. SECRET*.*<NUL>MYPASSWORD.
|
||
|
||
|
||
ID=12, Name=ENCLOSEDFILEWCARD
|
||
|
||
One or more files attached to the message. Only one filename may be
|
||
specified per subfield. Wildcard characters are allowed. If this
|
||
subfield is present in a message header, the ATTRIBUTE must include
|
||
the MSG_FILEATTACH bit.
|
||
|
||
|
||
ID=13, Name=ENCLOSEDINDIRECTFILE
|
||
|
||
One or more files attached to the message. The filename points to an
|
||
ASCII file with one filename entry per line. If alias filenames are
|
||
to be used, they are specified after the actual filename and
|
||
separated by a <NUL> (00H) character, e.g. C:\MYFILE.LZH<NUL>NEWS.
|
||
Wildcard characters are not allowed.
|
||
|
||
|
||
ID=1000, Name=EMBINDAT
|
||
|
||
Reserved for future use.
|
||
|
||
|
||
ID=2000, Name=FTSKLUDGE
|
||
|
||
An FTS-compliant "kludge" line not otherwise represented here. All
|
||
data not relevant to the actual kludge line, including leading and
|
||
trailing white space and ^A (01H) characters should be removed.
|
||
DATLEN must not exceed 255 characters. The FTS kludges INTL, TOPT,
|
||
and FMPT must never be stored as separate SubFields. Their data must
|
||
be extracted and used for the address SubFields.
|
||
|
||
|
||
ID=2001, Name=SEENBY2D
|
||
|
||
Used to store two-dimensional (net/node) SEEN-BY information often
|
||
used in FTN conference environments. Only the actual SEEN-BY data is
|
||
stored and ^aSEEN-BY: or SEEN-BY: is stripped along with any leading
|
||
and trailing white space characters.
|
||
|
||
|
||
ID=2002, Name=PATH2D
|
||
|
||
Used to store two-dimensional (net/node) PATH information often used
|
||
in FTN conference environments. Only the actual PATH data is stored
|
||
and ^aPATH: is stripped along with any leading and trailing white
|
||
space characters.
|
||
|
||
|
||
ID=2003, Name=FLAGS
|
||
|
||
Used to store the FTN FLAGS kludge information. Note that all FLAG
|
||
options that have binary representation in the JAM message header
|
||
must be removed from the FLAGS string prior to storing it. Only
|
||
the actual flags option string is stored and ^aFLAGS is stripped
|
||
along with any leading and trailing white space characters.
|
||
|
||
|
||
ID=2004, Name=TZUTCINFO
|
||
|
||
Time zone information. This subfield consists of four mandatory
|
||
bytes and one optional. The first character may be a plus (+) or a
|
||
minus (-) character to indicate a location east (plus) or west
|
||
(minus) of UTC 0000. The plus character is implied unless the first
|
||
character is a minus character. The following four bytes must be
|
||
digits in the range zero through nine and indicates the offset in
|
||
hours and minutes. E.g. 0100 indicates an offset of one hour east of
|
||
UTC.
|
||
|
||
---------------------------------------------------------------------
|
||
Message attributes
|
||
---------------------------------------------------------------------
|
||
MSG_LOCAL (0x00000001L) // Msg created locally
|
||
MSG_INTRANSIT (0x00000002L) // Msg is in-transit
|
||
MSG_PRIVATE (0x00000004L) // Private
|
||
MSG_READ (0x00000008L) // Read by addressee
|
||
MSG_SENT (0x00000010L) // Sent to remote
|
||
MSG_KILLSENT (0x00000020L) // Kill when sent
|
||
MSG_ARCHIVESENT (0x00000040L) // Archive when sent
|
||
MSG_HOLD (0x00000080L) // Hold for pick-up
|
||
MSG_CRASH (0x00000100L) // Crash
|
||
MSG_IMMEDIATE (0x00000200L) // Send Msg now, ignore restrictions
|
||
MSG_DIRECT (0x00000400L) // Send directly to destination
|
||
MSG_GATE (0x00000800L) // Send via gateway
|
||
MSG_FILEREQUEST (0x00001000L) // File request
|
||
MSG_FILEATTACH (0x00002000L) // File(s) attached to Msg
|
||
MSG_TRUNCFILE (0x00004000L) // Truncate file(s) when sent
|
||
MSG_KILLFILE (0x00008000L) // Delete file(s) when sent
|
||
MSG_RECEIPTREQ (0x00010000L) // Return receipt requested
|
||
MSG_CONFIRMREQ (0x00020000L) // Confirmation receipt requested
|
||
MSG_ORPHAN (0x00040000L) // Unknown destination
|
||
MSG_ENCRYPT (0x00080000L) // Msg text is encrypted (1)
|
||
MSG_COMPRESS (0x00100000L) // Msg text is compressed (1)
|
||
MSG_ESCAPED (0x00200000L) // Msg text is seven bit ASCII (1)
|
||
MSG_FPU (0x00400000L) // Force pickup
|
||
MSG_TYPELOCAL (0x00800000L) // Msg is for local use only
|
||
MSG_TYPEECHO (0x01000000L) // Msg is for conference distribution
|
||
MSG_TYPENET (0x02000000L) // Msg is direct network mail
|
||
MSG_NODISP (0x20000000L) // Msg may not be displayed to user
|
||
MSG_LOCKED (0x40000000L) // Msg is locked, no editing possible
|
||
MSG_DELETED (0x80000000L) // Msg is deleted
|
||
|
||
(1) This revision of JAM does not include compression, encryption, or
|
||
escaping. The bits are reserved for future use.
|
||
|
||
=====================================================================
|
||
????????.JDT Message text
|
||
---------------------------------------------------------------------
|
||
The .JDT file contains the text of messages. The text is stored as an
|
||
stream of seven or eight bit ASCII data. Allowed characters in the
|
||
text are 00H through ffH unless the header ATTRIBUTE field has the
|
||
MSG_ESCAPED bit enabled, in which case the legal range of data is 20H
|
||
through 7eH.
|
||
|
||
An escaped character is stored as \<hex> where <hex> is the two digit
|
||
hexadecimal ASCII value of the character. A single \ is stored as \\
|
||
or \5C. The case of the hexadecimal ASCII value is irrelevant, i.e.
|
||
5c is treated as 5C.
|
||
|
||
=====================================================================
|
||
????????.JDX Message index
|
||
---------------------------------------------------------------------
|
||
The .JDX file is used to quickly locate messages for any given user
|
||
name or to locate a message with a specific number. Each record in
|
||
the file consists of two ulongs. The first ulong holds the CRC-32 of
|
||
the recipient's name (lowercase), the second ulong holds the
|
||
physical offset of the message header in the .JHR (header) file.
|
||
|
||
The record number (+BaseMsgNum) within the .JDX file determines a
|
||
message's number.
|
||
|
||
If both ulongs are -1 (ffffffffH), there is no corresponding message
|
||
header.
|
||
|
||
=====================================================================
|
||
????????.JLR Lastread storage
|
||
---------------------------------------------------------------------
|
||
The .JLR file is used to maintain a user's position within a message
|
||
area. The layout of the "lastread" record follows. One record per
|
||
user is required.
|
||
|
||
LastRead:
|
||
ulong UserCRC; // CRC-32 of user name (lowercase) (1)
|
||
ulong UserID; // Unique UserID
|
||
ulong LastReadMsg; // Last read message number
|
||
ulong HighReadMsg; // Highest read message number
|
||
end;
|
||
|
||
(1) The functions to convert a string to lowercase characters that
|
||
are provided in the API will only convert characters A-Z (into
|
||
a-z). It is required that this convention is followed by all
|
||
applications.
|
||
|
||
The UserID field is a unique number for each user. If the "lastread"
|
||
record is deleted, UserCRC and UserID are both set to -1
|
||
(ffffffffH). An application may not depend on any specific order in
|
||
the .JLR file. A user's "lastread" record may appear anywhere in the
|
||
file and must be searched for when retrieving it and when storing an
|
||
updated record.
|
||
|
||
=====================================================================
|
||
Updating message headers
|
||
---------------------------------------------------------------------
|
||
If a header record grows after is has been retrieved from the .JHR
|
||
file, it must be appended to the end of the .JHR file since it would
|
||
overwrite the following header otherwise. The .JDX file must be
|
||
properly updated to indicate the new location of the header record.
|
||
The old header record must be changed to indicate that it has been
|
||
deleted by setting the MSG_DELETED bit in the Attribute field and the
|
||
TextLen field to zero (to prevent a maintenance program from removing
|
||
the message text that is now pointed to by another header).
|
||
|
||
=====================================================================
|
||
Message base sharing and locking
|
||
---------------------------------------------------------------------
|
||
To allow several programs to access the message base at any given
|
||
time, region locking is used to protect the message base from being
|
||
corrupted during updates.
|
||
|
||
When an application needs to write to any of the message base files,
|
||
it must first attempt to lock the first byte of the .JHR (header)
|
||
file. If the lock call fails, the application must either fail or
|
||
attempt to lock the file again. The message base files may under no
|
||
circumstances be updated if the application cannot successfully lock
|
||
the .JHR file.
|
||
|
||
Note that data acquired (read) from the message base may not be used
|
||
when writing data to the message base, unless the application has
|
||
maintained a lock of the message base from the time the data was
|
||
acquired or the MODCOUNTER field is the same as when the data was
|
||
acquired.
|
||
|
||
The application must open the files in shareable (DENYNONE) read/
|
||
write or readonly mode. The only exception to this is an application
|
||
that requires exclusive access to the message base, such as a message
|
||
base maintenance utility, it should open the files in non-shareable
|
||
(DENYALL) read/write mode.
|
||
|
||
=====================================================================
|
||
Reply threads and linking
|
||
---------------------------------------------------------------------
|
||
JAM introduces a new reply link pointer, not commonly used today.
|
||
This section is an attempt to describe how reply threads, reply
|
||
linking, and this new reply link pointer is implemented in JAM.
|
||
|
||
One of the major differences is that reply threads in JAM are not
|
||
based on similar or identical subjects of messages since this method
|
||
does not allow for proper reply threads.
|
||
|
||
The method used in JAM is based on the immediate relation between any
|
||
given message and direct replies to it. This is supported by many
|
||
message editors by using the MSGID and REPLY FTS kludge fields. These
|
||
are common, although expressed differently, in messages not based on
|
||
FidoNet technology, such as RFC-822. The obvious advantages include
|
||
allowing a program to easily find the original message to a reply,
|
||
and to find all replies to any given message.
|
||
|
||
The reply thread information consists of three fields: ReplyTo,
|
||
Reply1st, and ReplyNext. The reason for three fields, as opposed to
|
||
just two, is that with two fields, it is only possible to keep track
|
||
of the original message of a reply (which is sufficient) and one
|
||
reply to any given message (which is not sufficient). With three
|
||
fields, it is possible to maintain a thread of any number of replies
|
||
to any given message.
|
||
|
||
In the description of the different fields below, the following
|
||
messages and message numbers will be referred to:
|
||
|
||
1 -> 2 -> 4 -> 5
|
||
: :
|
||
: +--> 8
|
||
:
|
||
+--> 3 -> 7
|
||
:
|
||
+--> 6
|
||
|
||
Message number two, three, and six are replies to message number one.
|
||
Message number four and eight are replies to message number two.
|
||
Message number seven is a reply to message number three.
|
||
Message number five is a reply to message number four.
|
||
|
||
---------------------------------------------------------------------
|
||
ReplyTo
|
||
---------------------------------------------------------------------
|
||
This field holds the number of the message that this message is a
|
||
reply to. In the example above, the ReplyTo field would contain the
|
||
following values:
|
||
|
||
Message number one would contain zero; message number two, three, and
|
||
six, would contain one; message number four and eight would contain
|
||
two; message number seven would contain three, and message number
|
||
five would contain four.
|
||
|
||
---------------------------------------------------------------------
|
||
Reply1st
|
||
---------------------------------------------------------------------
|
||
This field holds the number of the first message that is a reply to
|
||
this message. In the example above, the Reply1st field would contain
|
||
the following values:
|
||
|
||
Message number one would contain two, message number three would
|
||
contain seven, and message number four would contain five. All other
|
||
messages would contain zero.
|
||
|
||
---------------------------------------------------------------------
|
||
ReplyNext
|
||
---------------------------------------------------------------------
|
||
This field is used to create the actual message thread or chain. In
|
||
the event that there is more than one reply to any given message, it
|
||
is necessary to maintain a thread of all the replies; this is due to
|
||
the fact that the original message can only hold information about
|
||
the first reply (the Reply1st field) to it.
|
||
|
||
The first reply (which the original message's Reply1st field holds),
|
||
has its ReplyNext field pointing to the second reply, the second
|
||
reply's ReplyNext field poinst to the third reply, and so on.
|
||
|
||
In the example above, the ReplyNext field would contain the following
|
||
values:
|
||
|
||
Message number two would contain three, message number three would
|
||
contain six, and message number four would contain eight. All other
|
||
messages would contain zero.
|
||
|
||
=====================================================================
|
||
Contacts
|
||
---------------------------------------------------------------------
|
||
Joaquim Homrighausen Telefax: +352 316 702
|
||
389, route d'Arlon Modem: +352 316 702
|
||
L-8011 Strassen eMail: 2:270/17@fidonet
|
||
Luxembourg joho@abs.lu
|
||
|
||
Andrew Milner Telefax: +352 251 621
|
||
9a, Boulevard Joseph II Modem: +352 251 621
|
||
L-1840 Belair eMail: 2:270/18@fidonet
|
||
Luxembourg andrew@fido.lu
|
||
|
||
Mats Wallin Telefax: +46 8 6453285
|
||
F<>rskottsv<73>gen 11 Modem: +46 8 6453882
|
||
S-126 44 H<>gersten eMail: 2:201/329@fidonet
|
||
Sweden mw@fido.lu
|
||
</PRE>
|
||
|
||
<A HREF="index.htm"><IMG SRC="../images/b_arrow.png" ALT="Back" Border="0" width="33" height="35">Go Back</A>
|
||
|
||
</BODY>
|
||
</HTML>
|
||
|