On (19 Mar 95) George Bleck wrote to All...
GB> Does anyone have the record structures for the more popular BBS message
GB> base formats (Fido , JAM, Huson ). I can't seem to find them
GB> anywhere...
Squish:
' *.SQ? BASIC .BI Structure
'-------------------------------------------------------------------------
'Ok, now for the explanations: the two main files are .SQD and
'.SQI. The first structure is for the .SQI file (you can open
'that one as RANDOM with a length of 12); the others are for the .SQD
' file (which you open as BINARY).
'
'There is a one-to-one correspondence between records in .SQI and the
'(non deleted) messages. You want message #25: just read the 25th
'record from the .SQI file into the SQIDX-dimensioned variable. Then,
'use the offset SQI.OFFST + 1 to read the SQHDR-dimensioned variable
'(the SQI offsets start at 0 but QB treats the first byte in a BINARY
'file as byte 1). This SQHDR is 28-bytes long, and it is immediately
'followed by the 238 bytes of the SQMSG-defined variable (the message
'header), and SQD.MSGLEN bytes of message text.
'
TYPE SQIDX '.SQI file: one of these (12 bytes) per message.
Offst AS LONG 'Offset to message header start
UmsgID AS LONG 'MSG number
Hash AS LONG 'Message Hash information
END TYPE
TYPE SQBASE '.SQD database header (256 bytes): 1 per .SQD
ile
SLEN AS INTEGER 'Signed INT with a min of -32767, max of 32767
RSVD1 AS INTEGER 'Reserved
NUMMSG AS LONG 'No of msgs in area
HiMsg AS LONG 'Highest msg number (same as NUMMSG)
SKIPMSG AS LONG 'Number of msgs to protect from autoKill
HiWater AS LONG 'Highwater mark
UID AS LONG 'Number of next UMSGID to use
BaseId AS STRING * 80 'Name (incl path) of this message base
FBEGIN AS LONG 'Offset to 1st frame
FLAST AS LONG 'Offset to last frame
FFBEGIN AS LONG 'Offset to 1st free frame
FFLAST AS LONG 'Offset to last free frame
FEND AS LONG 'Offset to end of file
MAXMSGS AS LONG 'Number of msgs to keep
MAXDAYS AS INTEGER 'Number of days to keep msgs for
SZSQHDR AS INTEGER 'Size of SQHDR (Always 28 bytes)
END TYPE
TYPE SQHDR
ID AS LONG 'Squish signature - Always 0xAFAE4453
Nextf AS LONG 'Offset to next frame or 0 if last frame
Prevf AS LONG 'Offset to prior frame or 0 if first frame
FLEN AS LONG 'Frame length for this frame not including SqdHdr
MsgLen AS LONG 'Message length - same as FLEN
CLEN AS LONG 'Lenth of Control Information
FTYP AS INTEGER 'File type - Always 0 (normal) if new message,
' 1 (delated msg) if available frame.
RSVD AS INTEGER 'Reserved
END TYPE
TYPE SQMESSAGE ' The message Header, as it appears in a Squish area
ATTRIB AS STRING * 4 'Message Attribute Flag
From AS STRING * 36 'From Name with trailing nulls
Dest AS STRING * 36 'To Name with trailing nulls
Subj AS STRING * 72 'Message subject with trailing nulls
OrigZone AS INTEGER 'Origination Zone
OrigNet AS INTEGER 'Origination Net
OrigNode AS INTEGER 'Origination Node
OrigPoint AS INTEGER 'Origination Point
DestZone AS INTEGER 'Destination Zone
DestNet AS INTEGER 'Destination Net
DestNode AS INTEGER 'Destination Node
DestPoint AS INTEGER 'Destination Point
DateWritten AS LONG 'DOS-ST date/time STAMP
DateArrived AS LONG 'DOS-ST date/time STAMP
UTCofs AS INTEGER 'Not Used
ReplyTo AS LONG 'UMSGID of message this replies to
Replies AS STRING * 36 '36 bytes for reply array
UmsgID AS LONG 'UMSGID is only used if the MSGUID Bit is
' set in the ATTRIBUTE Field
DateMsg AS STRING * 20 'ASCII Z Date
END TYPE
... Cat HAIR all over the keyboard...Don't blame me for spelling errors.
--- PPoint 1.88
---------------
* Origin: The Point of Obfuscation! (1:212/2001.5)
|