PIDLIST (FSC-0046)

Document: PIDLIST.TXT (FSC-0046)
Date:     11-Sep-96

                     A list of used product idenfifiers

                    Joaquim Homrighausen, joho@defsol.se

Product identifiers

Product                Version ID        Author
----------------------------------------------------------------------------
!!MessageBase           1.6    !!MB      Holger Lembke          2:240/500.20
Alert                   2.1    Alert     Richard Kail           2:310/25.2
ANet                    921213 ANet      Thomas Ekstroem        2:201/411
Announcer               1.0+   Announcer Peter Karlsson         2:206/221
ArcMail RISC OS         1.04   AM        Philip Blundell        2:440/34.4
Artmail Mailer System   1.00   ART       Klaus Landefeld        2:247/402
Auto Message Taker      1.00   AMT       Patrik Torstensson     n/a
AVALON                  3.73+  AVALON    Stephan Slabihoud      2:2446/110.6
BeroPoint               1.0+   BeroPoint Bernhard Rosenkraenzer 2:2452/307.46
Blender                 1.01   Blender   Serge Vikulov          2:5080/5
The Brake! Mailer       1.0+   The-Brake! John Gladkih          2:5051/16
CMBBS                   3.26   CMBBS     Christof Engel         2:2490/5110
CE-Point                3.26   CE-Point  Christof Engel         2:2490/5110
CrossEd                 1.00+  CROSSED   Mathias Kowalkowski    2:2454/207.1
CrossPoint              2.10   XP        Peter Mandrella        2:243/97.80
Dazzle Wizard           4.00   DazzleWiz Jan H. Andersen        2:238/51
EchoList Expert         .99    ELX       George Hannah          1:255/7
EchoSprint              1.02   ES        Ben Elliston           3:620/262
Enhanced Mail MAnager   .01    EMMA      Johan Zwiekhorst       2:292/118
Enhanced Message EDitor .02    EMED      Johan Zwiekhorst       2:292/118
Eternity BBS            1.00   Eternity  Isaac Oates            1:107/445
EZMail                  .67    EZMail    Torben Paving          2:234/41
FastEcho                1.21+  FastEcho  Tobias Burchhardt      2:2448/400
FDREQ                   1.12   FDREQ     Manfred Schramm        2:2446/502
FDWorks                 1.2    FDWorks   Tilli Weissenberger    2:310/29.5
FileScan                1.5    FileScan  Matthias Duesterhoeft  2:241/4513
FMail                   1.02+  FMail     Folkert Wijnstra       2:283/619
Freqit (MS-DOS)         1.0    FID       Marvin Hart            1:106/462
Freqit (Windows)        1.0    FIW       Marvin Hart            1:106/462
FrontDoor (Editor)      2.00+  FM        Joaquim Homrighausen   2:270/17
FrontDoor (Mailer)      2.00+  FD        Joaquim Homrighausen   2:270/17
FrontDoor APX           1.00+  FDAPX     Joaquim Homrighausen   2:270/17
FrontDoor APX/w         1.00+  FDAPX/w   Mats Wallin            2:270/19
FrontDoor Manager       1.00   FDMGR     Thomas Raehalme        2:220/412
FrontDoor RP for RA     1.21+  FDRPR     Mats Wallin            2:270/19
FrontEnd FX             1.00   FEFX      Eric Theriault         1:132/220
FrontEndTime            1.00   FETime    Eric Theriault         1:132/220
FX Editor               1.00   FXE       Eric Theriault         1:132/220
F_POINT                 1.1    F_POINT   Florian Rupp           2:248/107.2
GEcho                   1.00   GE        Gerard van der Land    2:2802/110
GeeMail                 2.00   GeeMail   Lech Szychowski        2:480/4.7
HbToSca                 1.00   HTS       Jani Laatikainen       2:220/150
HyperBBS                2.00   HyperBBS  Jani Laatikainen       2:220/150
JetMail                 1.00   JetMail   Daniel Roesen          2:243/93.8
JosEcho                  .53g  JosEcho   Jose Rodriguez         2:340/15.20
Juggernaut              1.00+  JDR_BBS   John Rohner            n/a
LA                      1.51+  LA        Erik Groten Steenwelle 2:283/412.1
LapMail                 1.00+  LapMail   Svetoslav Alexandrov   2:350/66
LazyBBS                 .5     LazyBBS   Franck Arnaud          2:320/100
LED                     1.25+  LED       Stephan Slabihoud      2:2446/110.6
M-POINT                 1.74   M-POINT   Manfred Schramm        2:2446/502
Mail FX                 1.00   MFX       Eric Theriault         1:132/220
McMail                  1.0    McMail    Gordian Schuermann     2:2426/2001
MsgTrack                3.20   MT        Andrew Farmer          1:243/1
NewsAgent               .01    NAgent    Steven Bagley          2:2501/101.12
NewsFlash               1.01   NwF       Chris Lueders          2:2402/330
NewsPost                1.6    NewsPost  Andreas Otto           2:2452/307
NodeList Expert         .90    NLX       George Hannah          1:255/7
Notify                  2.1    Notify    Frank Schuhardt        2:247/160
Now Playing             1.01+  NP        Sam Wormleighton       2:250/109.25
O/T-Track               2.60   O/T       Peter Hampf            2:241/1090
OFFFax                  3.03   OFFFax    Frank Schuhardt        2:247/160
PktMake                 1.5    PktMake   Dmitry Morozovsky      2:5020/268
PmFido                  .50+   PmFido    Jiri Kuchta            2:421/13.7
Pobble                  .15    Pobble    Josh Parsons           3:771/340
Post 'em All!           1.10+  PEA       Basil Vorontsov        2:5020/487
QBBed                   2.64   qbbed     Werner Berghofer       2:310/90.100
RASS                    1.00   RASS      Yossi Gottlieb         2:403/139.75
RemoteAccess            1.10   RA        Andrew Milner          2:270/18
SendFile                1.00   SendFile  Mike Shoyher           2:5020/17.3
SING Application        2.16   SING App  Eric Theriault         1:132/220
SpeedMail               1.01   SpeedMail Tilli Weissenberger    2:310/29.5
SuperFX BBS             1.00   SFXBBS    Eric Theriault         1:132/220
Synchronet              1.00   SYNC      Rob Swindell           1:103/705
Synthesis BBS (BBS)     1.00   SynBBS    Eric Theriault         1:132/220
Synthesis BBS (Mailer)  1.00   SynMail   Eric Theriault         1:132/220
TB-Edit                 1.10   TB-Edit   Arjen Lentz            2:283/512
TB-Mailer               1.97   TB-Mailer Arjen Lentz            2:283/512
TB-Point                .10    TB-Point  Arjen Lentz            2:283/512
TechBBS                 1.00   TECHBBS   Marcel Tegelaar        2:281/409
TechMail                1.00   TECHMAIL  Raymond van der Holst  2:281/409.2
TeleMail                1.10   TeleMail  Juergen Weigelt        2:2453/900                  (eMail address)
Terminate/TerMail       1.51+  TerMail   Bo Bendtsen            2:254/261
TosScan                 1.10   TosScan   Joaquim Homrighausen   2:270/17
TPCS                    .89b   TPCS      Krister Hansson-Renaud 2:201/201.7
                                         Mikael Kjellstrom      2:201/201.10
TrapToss                1.20   TrapToss  Rene Hexel             2:310/6
UU2 FIDO/Internet gate  1.92   UU2       Dmitry Zavalishin      2:5020/32
XCOM                    1.00   XCOM      Uwe Kornnagel          2:2464/333
XRobot                  3.00   XRobot    Joaquim Homrighausen   2:270/17
Xrs Alternative Packer  1.04   XAP       Jeroen Smulders        2:512/1.8
Zack! BBS               1.00+  Zack!     Magnus Titho           2:2449/730.8
ZeroToss                1.00   ZeroToss  Jeff Masud             1:103/115
ZNotify                 .65    ZNotify   Boris Huertgen         n/a
-----------------------------------------------------------------------------

Product identifier registration

Simply fill in the required information and send this form to the author of
this document via private netmail.

 Product: _________________________________________

 Version: __________

PID info: _________________________________________

  Author: _________________________________________

 Address: ___________________________ (eMail address)

--- end of file "pidlist.txt" ---

A Product Idenfifier for FidoNet Message Handlers (FSC-0046)

Document: FSC-0046
Version:  005
Date:     30-Aug-94



            A Product Idenfifier for FidoNet Message Handlers

                    Joaquim Homrighausen, joho@defsol.se

                              August 30, 1994

         Copyright 1994 Joaquim Homrighausen; All rights reserved.



Status of this document:

     This FSC suggests a proposed protocol for the FidoNet(r) community,
     and requests discussion and suggestions for improvements.
     Distribution of this document is unlimited.

     Fido and FidoNet are registered marks of Tom Jennings and Fido
     Software.


Purpose

    This document should serve as a guide for the product identfier, PID
    hereafter, format for FidoNet message handlers. The purpose behind PIDs
    is related to my attempt to remove the requirement of Origin lines in
    conference mail messages.

    While I fully understand that this won't happen in all conferences, I
    would like to provide the facility to those who can use it (i.e. for
    conferences where all the participants are using software that supports
    messages without origin lines).

    Another use for PIDs is to minimize the excessive amount of information
    some programs put on the tear lines which increases overall
    transportation cost and time of conference mail.


PID

    A PID replaces the program identifier often seen on the tear line of
    conference mail messages and is hidden behind a ^A (ASCII SOH, 01h).
    This also allows for better tracking of software causing problems in
    conferences.

:   Only one PID per message is allowed and should only be added by the
:   program that creates the message. I.e. programs passing the message on
:   to someone else may not add additional PIDs. If a PID is added, no
:   program information may be present after the tear line.

    A PID also offers the ability to add serial numbers to identify a
    specific copy of a program as being the source of a message with little
    or no effort.


Format

      ^APID:  [ ]


Sample

      ^APID: FM 2.11.b

      Would identify FrontDoor's editor, beta version 2.11 and replace:

       --- FM 2.11 (beta)


Fields

    pID         The ID of the product responsible for creating the message.
                This should be kept as short as possible. The maximum
                length for this field is 10 characters.

    version     The version of the product including any alpha, beta, or
                gamma status. Only the relevant part of the version should
                be included. I.e. 1.00 should be expressed as 1, 1.10 as
                1.1 and 1.01 as 1.01. Alpha, beta, or gamma status should
                be expressed by appending a / or . followed by a, b, or g
                and optionally a revision indicator, such as a1, b2, etc.
                The maximum length for this field is 10 characters.

    serial#     The serial number of the product, omitted if irrelevant
                or zero. The maximum length for this field is ten (10)
                characters.


TID

    TIDs or "Tosser IDs" started to appear shortly after the first
    revision of this document was released. They are added by Conference
    Mail ("EchoMail") processors when a message is exported from the
    local message base and injected into the network distribution scope
    for a conference.

    When a Conference Mail processor adds a TID to a message, it may not
    add a PID. An existing TID should, however, be replaced. TIDs follow
    the same format used for PIDs, as explained above.


List of products

    The accompanying file, PIDLIST.TXT, is a list of products known to
    support the PID proposal. Software authors are encouraged to inform
    the author of this document of changes and additions to this list.

     --- end of file "fsc-0046.005" ---

JAM(mbp) – The Joaquim-Andrew-Mats Message Base Proposal

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  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  (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  (00H) character followed by the password is
    appended. E.g. SECRET*.*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  (00H) character, e.g. C:\MYFILE.LZHNEWS.
    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 \ where  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

    Andrew Milner

    Mats Wallin

    // end of file "jam.doc"

EMSI goes ISO, sort of

This document may be distributed freely provided no charge of any kind occurs and all accompanying files (XLAT.CPP, ISOXLAT.PAS, ISOTEST.PAS, and ISOEMSI.DOC) is left unmodified.

This is to document what has been suggested as an upcoming addendum to the EMSI specifications. The next version of FrontDoor (higher than 2.10) and, I believe TrapDoor, will (or does) use this scheme when creating the EMSI_DAT packet.

The reason for this is to allow high-bit ASCII (or “international characters”) and national codepages to be used transparently. The new encoding scheme does not break anything in existing implementations unless high-bit ASCII is used, in which case it may affect (cosmetic or otherwise) the operation of a mailer that doesn’t support the new scheme.

Basics

All data that is placed in the EMSI_DAT packet is translated to ISO 8859-1 and then processed as usual. Any escaping as per the EMSI specification, is done after the translation to ISO 8859-1. On the receiving side, the data is first unescaped and then translated from ISO 8859-1 to the local codepage. Data that is strictly seven bit ASCII is not translated by the code accompanying this document.

There is no flag or other indicator to show that the EMSI_DAT packet has been encoded using ISO 8859-1. The IEMSI portion of the EMSI specification is not affected at this time.

Notes

One rather serious drawback is that you will see password failures between mailers that use high-bit ASCII in the password between two systems where one is using a mailer that uses the ISO 8859-1 scheme and the other isn’t. The recommended cure is to either remove the high-bit ASCII, or to have the mailer replaced/updated.

Code

The accompanying code, XLAT.CPP (by Alexander Holy, 2:310/90) and ISOXLAT.PAS and ISOTEST.PAS may be used free of charge, no warranties or guarantees, etc. If you find reason to make changes, we would appreciate hearing about it.

That’s about it..

Joaquim Homrighausen
joho@defsol.se

// end of file “isoemsi.doc”