TIP: Click on subject to list as thread! ANSI
echo: fidosoft.husky
to: Nicholas Boel
from: mark lewis
date: 2016-12-22 17:46:54
subject: Bug report.

22 Dec 16 12:03, you wrote to All:

 NB> To further the description of what seems to be happening:

 NB> When a PKT arrives here and hpt tosses it, it will forward the PKT to links
 NB> with the identical times of the messages.

that's proper...

 NB> However, when HPT stores the message into a JAM message base, it seems
 NB> to round down to the next even number in seconds of when the message
 NB> was written, if the message was originally posted with an uneven
 NB> seconds in the timestamp.

ewwww... what message base format are we talking about?

 NB> For example:

 NB> PKT contains message with 12:06:33

 NB> HPT will store the message in the JAM message base with 12:06:32 as the
 NB> time it was written.

 NB> HPT will forward the message to links with the original time, 12:06:33.

yeah, it shouldn't do that... it should round /up/ to the next even second
if the code is following the m$ DOS time stamp format documentation...

int(round((time.sec / 2) + .5)

that says (or should say) take the seconds (time.sec), divide it by 2
(using real number division instead of integer division), add .5, round
that result and finally then take the integer value by effectively lopping
off the decimals... adding the .5 effectively means you'll always round
up...

this may be a relic from the SQUish base... it has the DOS file system 2sec
granularity i described in my recent post on the original topic... HPT is
probably using the same time routine and stuffing everything into a JAM
base instead of having different routines per supported message base...
here's the information on the datetime stamp in the SQUish base format...

===== snip squish.txt =====
The  SCOMBO type is used for  describing a message date/time stamp. This
structure has the following format:

          Name      Type      Ofs  Description
          date      word      0    DOS bitmapped date value.  This field is
                                   used to store a message date.

                                   The first five bits represent the day of
                                   the month.  (A value of 1 represents the
                                   first of the month.)

                                   The next four bits indicate the month of
                                   the year. (1=January; 12=December.)

                                   The  remaining  seven bits  indicate the
                                   year (relative to 1980).

          time      word      2    DOS  bitmapped time  value.   This field
                                   used to store a message time.

                                   The first five bits indicate the seconds
                                   value,  divided by  two.   This  implies
                                   that all  message  dates and  times  get
                                   rounded  to a  multiple of  two seconds.
                                   (0  seconds  = 0;  16  seconds  = 8;  58
                                   seconds = 29.)

                                   The next six  bits represent the minutes
                                   value.

                                   The  remaining  five bits  represent the
                                   hour value, using a 24-hour clock.

Total: 4 bytes
===== snip squish.txt =====

it is exactly the DOS FAT12/FAT16/FAT32 time stamp format... look at the
second paragraph on the time section and recall my previous post (to
wilfred) about the 5bits used for the storage of the seconds...

the fix would be to not convert the time stamp to the DOS file system time
format when writing to JAM and MSG formats... in JAM the time stamps are
unsigned 32bit integers (ulong) according to the original JAMLIB C code...
in 16bit pascal code, this is a longint which is signed so has only half
the count that the unsigned C ulong has... in JAM the number is the seconds
since the epoch...

the question then is which epoch... 1970 or 1980... the unix epoch is 1970
Jan 1... the DOS epoch (used for IBM BIOS INT 1Ah, DOS, OS/2, FAT12, FAT16,
FAT32 and exFAT filesystems) is 1980 Jan 1...

i don't recall which came first, MAPI or SMAPI... one was SQUish only...
the other was derived from the SQUish only one and had JAM and MSG grafted
in... i suspect that grafting is using the same time conversion routine for
all three formats... i have not gone looking into the code to be sure,
though... empirical evidence seems to indicate this, though... in fact, a
quick running through my JAM bases on this point, using HPT and GoldEd+,
shows all seconds are even numbers... looking on my main system, using
fastecho and TimED, shows odd and even seconds...

)\/(ark

Always Mount a Scratch Monkey
Do you manage your own servers? If you are not running an IDS/IPS yer doin'
it wrong...
... Technically horrible stuff, but somehow very tasty.
---
* Origin: (1:3634/12.73)
SEEN-BY: 3/50 103/705 109/500 116/116 123/5 52 111 140 500 789 1970 6502
SEEN-BY: 124/5013 5014 135/300 140/1 153/757 154/10 30 700 203/0 221/6 226/600
SEEN-BY: 227/51 201 229/426 230/0 240/1661 5832 249/303 261/38 280/464 5003
SEEN-BY: 292/854 310/31 320/119 322/759 340/800 342/11 423/120 633/267 280
SEEN-BY: 640/384 712/550 848 770/1 2320/100 3634/12 15 22 27 50 5075/35
@PATH: 3634/12 123/500 154/10 280/464 712/848 633/267

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.