Fido msg formats.

 BBS: Inland Empire Archive
Date: 11-01-93 (23:29)             Number: 119
From: CORIDON HENSHAW              Refer#: 64
  To: PETE GRANER                   Recvd: NO  
Subj: Fido msg formats.              Conf: (2) Quik_Bas
Hello Pete!

On Friday October 29 1993, Pete Graner wrote to All in QUIK_BAS:

 PG>         I was wondering if anyone had and examples or translations of
 PG>         the following FidoNet message formats:

 PG>                 PKT
 PG>                 Hudson Message Base
 PG>                 JAM
 PG>                 MSG

I don't have JAM, but I have the TYPE structures of PKT,
HMB and MSG.  Here comes:

===CUT: FIDO.BI===

' This file defines the structures for all the packet files used in
' FidoNet, as well as the standard message header and attribute bits.

' The packet file will look like this:

' PacketHeader -> MessageHeader -> ToName -> FromName -> Subject -> MsgText

' ToName and FromName may be up to 36 bytes and are null terminated.
' Subject may be up to 72 bytes and is null terminated.
' MsgText is unbounded and is null terminated.
' The packet will end with two null bytes.

' To figure out what type of header the .PKT has:
'
' If the "Baud" field equals in the FSC-0039 packet structure is 2, then the
' .PKT uses a FSC-0045 packet header
' Otherwise the packet uses a FSC-0039 or FTS-0001 packet structure.  The two
' are compatable as long as you use the "QorigZone" and "QdestZone" fields.

' The "Version" field should always equal 2.

TYPE FSC0045Type
        OrigNode        AS INTEGER      'original node
        DestNode        AS INTEGER      'destination node
        OrigPoint       AS INTEGER      'original point
        DestPoint       AS INTEGER      'destination point
        zeros           AS STRING * 8   'must be 0's
        SubVersion      AS INTEGER      'packet sub-version (2 in this case)
        Version         AS INTEGER      'packet version (2 in this case)
        OrigNet         AS INTEGER      'original net
        DestNet         AS INTEGER      'destinaition net
        PodCode         AS STRING * 1   'product code
        RevisionLvl     AS STRING * 1   'product revision level
        password        AS STRING * 8   'password
        OrigZone        AS INTEGER      'original zone
        DestZone        AS INTEGER      'destination zone
        origDomain      AS STRING * 8   'original domain
        destDomain      AS STRING * 8   'destination domain
        PodData         AS LONG         'product specific data
END TYPE

TYPE FSC0039Type
        OrigNode        AS INTEGER      'original node
        DestNode        AS INTEGER      'destination node
        year            AS INTEGER      'year
        month           AS INTEGER      'month
        day             AS INTEGER      'day
        hour            AS INTEGER      'hour
        minute          AS INTEGER      'minute
        second          AS INTEGER      'second
        Baud            AS INTEGER      'baud rate, not in use
        Version         AS INTEGER      'should be 2
        OrigNet         AS INTEGER      'original net
        DestNet         AS INTEGER      'destination net
        PodCodeLow      AS STRING * 1   'product code
        MajorLvl        AS STRING * 1   'product revision level
        password        AS STRING * 8   'password
        QorigZone       AS INTEGER      'original zone
        QdestZone       AS INTEGER      'destination zone
        Filler          AS STRING * 4   'spare change
        PodCodeHigh     AS STRING * 1   'product code, high order
        MinorLvl        AS STRING * 1   'product revision level, minor
        CapWord         AS INTEGER      'bitfield for capabilities
        OrigZone        AS INTEGER      'original zone
        DestZone        AS INTEGER      'destination zone
        OrigPoint       AS INTEGER      'original point
        DestPoint       AS INTEGER      'destination point
        PodData         AS LONG         'Product data
'        Terminator      AS STRING * 1   'packet terminator, zeros
END TYPE

TYPE PKTMessageHeaderType
        Header      AS STRING * 1  'first byte in field, no longer used
                                   'will always be 02H
        NullStr     AS STRING * 1  'not used either.  Will always be NULL
        OrigNode    AS INTEGER     'original node
        DestNode    AS INTEGER     'destinaion node
        OrigNet     AS INTEGER     'original net
        DestNet     AS INTEGER     'destination net
        Attributes  AS INTEGER     'attribute bits, link FREQ, Crash, etc.
        Cost        AS INTEGER     'cost
        Datetime    AS STRING * 20 'DateTime string
END TYPE

' this structure will be followed by:
' To name (max 36 bytes, null terminated)
' From name (max 36 bytes, null terminated)
' subject  (max 72 bytes, null terminted)

CONST Private = 1               'message is private
CONST Crash = 2                 'crash send
CONST BeenRead = 4              'message has been read
CONST Sent = 8                  'message is sent
CONST Attach = 16               'file is attached
CONST Forward = 32              'being forwarded
CONST UnknownDest = 64          'destination node is unknown
CONST KillSen = 128             'kill after mailing
CONST IsLocal = 256             'FidoNet vs. local
CONST NothingYet = 512          'expansion bit
CONST NothingYet2 = 1024        'ditto
CONST Freq = 2048               'file request
CONST RecieptRqst = 4096        'receipt requested
CONST IsReciept = 8192          'is a return reciept
CONST AuditRqst = 16384         'audit trail requested
CONST UpdateRqst = 32768        'update request

'MSG header:

TYPE MSGHeaderType
        FromUser AS STRING * 36    'from, null terminated
        ToUser AS STRING * 36      'to, null terminated
        Subject AS STRING * 72     'subject, null terminated
        Datetime AS STRING * 20    'datetime, full (all 20 chars)
        Timesread AS INTEGER       'number of times read
        DestNode AS INTEGER        'destination node
        OrigNode AS INTEGER        'origin node
        Cost AS INTEGER            'cost of message
        OrigNet AS INTEGER         'origin network
        DestNet AS INTEGER         'destination network
        DestZone AS INTEGER        'destination zone (not required)
        OrigZone AS INTEGER        'origin zone      (Not req)
        DestPoint AS INTEGER       'destination point (not req)
        OrigPoint AS INTEGER       'origin zone (some
implemenations use these)
        ReplyTo AS INTEGER         'previous reaply (in same area)
        Attribute AS INTEGER       'attributes, see below
        Nextreply AS INTEGER       'next reply
END TYPE
===END===

<<<See next message for HMB>>>
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET