Category : Files from Magazines
Archive   : PCTV1N1.ZIP
Filename : NBSTIME.BAS

 
Output of file : NBSTIME.BAS contained in archive : PCTV1N1.ZIP
' NBSTIME.BAS M. Covington 1989
' Turbo BASIC 1.0 and up, QuickBASIC 2.0 and up

' ************************
' * Function Definitions *
' ************************

' FNstr$(num)
' Like STR$ (built in) but result has no leading blank.

DEF FNstr$ (num)
X$ = STR$(num)
FNstr$ = RIGHT$(X$, LEN(X$) - 1)
END DEF

' FNdaysin(month,year)
' gives number of days in nth month of specified year.

DEF FNdaysin (month, year)
days = 31
IF month=4 OR month=6 OR month=9 OR month=11 THEN days = 30
IF month=2 THEN days = 28
IF month=2 AND (year MOD 4)=0 THEN days = 29
FNdaysin = days
END DEF

' ******************
' * Main Program *
' ******************

' Open serial port and tell Hayes modem to dial

CLS
PRINT "Calling NBS to obtain time of day and set clock..."
ON ERROR GOTO ErrorHandler
OPEN "COM1:1200,E,7,1,CS,DS,CD" AS #1
PRINT #1, "ATDT 1-303-494-4774"

GetLine:

' Read a line from serial port into text$,
' ending with CHR$(10) (line feed).
' Store "TIMEOUT" if nothing is received after 100,000 tries
' (up to 2 minutes depending on machine).

text$ = "": tries = 0

WHILE (tries<100000) AND (RIGHT$(text$, 1)<>CHR$(10))
IF NOT EOF(1) THEN
text$ = text$ + INPUT$(1,#1)
tries = 0
END IF
tries = tries + 1
WEND
IF tries=100000 THEN text$ = "TIMEOUT"

' Discard the Return and Line Feed at end of line.

WHILE LEN(text$)>0 AND RIGHT$(text$, 1)<" "
text$ = LEFT$(text$, LEN(text$) - 1)
WEND

' Check data received.
' If modem error message, bail out.
' If not 49-char line, read another line.

IF text$="TIMEOUT" OR text$="NO CARRIER" OR text$="BUSY" THEN
PRINT text$; " -- Unable to connect."
GOTO Finish
ELSEIF LEN(text$) <> 49 THEN
GOTO GetLine
END IF

PRINT "Data received from NBS:"
PRINT text$

' Convert date to numbers to do time zone conversion.
' Minutes, seconds, unaffected, remain a string.

yr = VAL(MID$(text$,7,2))
mo = VAL(MID$(text$,10,2))
da = VAL(MID$(text$,13,2))
hr = VAL(MID$(text$,16,2))
minsec$ = MID$(text$,18,6)

' Convert to user's time zone and check daylight saving time.

hr = hr - 5 ' Eastern time is -5, Pacific is - 8.

dst = VAL(MID$(text$, 25, 2))
IF dst>1 AND dst<51 THEN hr = hr + 1

' If hour<0, change date to previous day.

IF hr<0 THEN hr = hr + 24: da = da - 1
IF da=0 THEN mo = mo - 1: da = FNdaysin(mo, yr)
IF mo=0 THEN yr = yr - 1: mo = 12

' Assume user is in western hemisphere and local time is
' always *behind* UTC, so no need to check for hr > 23.

' Set the system clock

DATE$ = FNstr$(mo) + "-" + FNstr$(da) + "-" + FNstr$(yr)
TIME$ = FNstr$(hr) + minsec$
PRINT "Date and time have been set to: "; DATE$; " "; TIME$

' Close serial port, which drops DTR and hangs up phone

Finish:
CLOSE #1
END

' *******************
' * Error Handler *
' *******************

' Ignore parity, framing, overrun errors (Error 57)

ErrorHandler:
IF ERR<>57 THEN PRINT ""
RESUME


  3 Responses to “Category : Files from Magazines
Archive   : PCTV1N1.ZIP
Filename : NBSTIME.BAS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/