S0 = "CdT" ; values are: EST, CST, MST, PST, EDT, CDT, MDT, PDT ; ; ----- COM-AND set DOS clock ; ; This script dials the US Naval Observatory and sets the DOS clock ; with the time obtained. NOTE: If you change this script, please ; do not connect to the Observatory longer than absolutely required. ; Courteous usage will most likely retain this service. ; ; S0 should be set with your timezone (EST, CST, MST, or PST)... if ; left blank, this script will look for an EBL variable &ZONE... if ; that is not found, this script will ask for it. ; ; Note that this script, as supplied, only invokes DOS's TIME command ; to set the clock. If you have a hardware clock, the TIME command of ; DOS will not necessarily change the hardware clock (and thus last ; accross a power off). ; ; The value in S0, if supplied, establishes the timezone. You must ; manually decide (for now) if daylight savings is used in your area. ; ; ------------------------------------------------------------ ; Script: John Poindexter, commenced 2/89 ; Modified for scheduler 4/93 ; ------------------------------------------------------------ ; ; If the value in S0 is null, look for EBL's &ZONE ; .. This script does not require EBL if the above is set. ; LEGEND "SETTIME v1.0" IF NULL S0 ; If value not set above EBL S0 &ZONE ; .. Ask EBL if it knows the zone ELSE ; If set above SET SUCCESS ON ; .. Fake EBL good completion ENDIF ; ; If no EBL and no value, open a window and ask ; IF FAILED ; No zone in script, and no EBL WOPEN 10,1, 13,77 (contrast) Exit ATSAY 11, 3 (contrast) "Enter your timezone (EST, EDT, CST, CDT, ...)" ATSAY 12, 3 (contrast) "->" ATSAY 13,26 (contrast) " Press ESC to exit" ATGET 12,6 (contrast) 3 S0 WCLOSE ; Restore screen under IF NULL S0 GOTO Exit ; Null entry terminates script ENDIF ; ; Using the Zone value, look up the hour offset ; S1 = "E5C6M7P8" ; Time zone letters and time difference from GMT. FIND S1 S0(0:0) N0 ; Case insensitive table lookup IF NOT FOUND ; Unknown zone character MESSAGE "^M^JYou need to include your time zone in S1 in script.^M^J" GOTO EXIT ENDIF ; ; COmpute the hour offset (allowing for DAYLIGHT Savings) ; S1 = S1(N0+1:N0+1) ; Take hour offset from table ATOI S1 N0 ; COnvert to binary (w/o error message) IF FIND S0 "D" ; Look for daylight savings time N0 = N0 - 1 ; Adjust for daylight savings ENDIF ; ; Set-up to dial the Naval Observatory ; SET FLAG(0) OFF ; Flag indicates wrap to previous day ON ESCAPE GOSUB UNAVAILABLE IF FIND "_DDOVER" "OFF" SET BAUD 1200 ; Set parms for USNO (1200...) SET PARITY NONE ; .. (n,8,1) SET DATA 8 ; .. SET STOP 1 ; .. SET MDEL 30 ; Slow it down ; ; Dial the Naval Observatory ; N99 = 1 LOOP: LEGEND "SETTIME v1.0 dialing attempt #"*N99 TRANSMIT "_MESCa"&"!"; Wake up the modem PAUSE 1 TRANSMIT "_DPREf"&"1-202-653-0351"&"_DSUFf"&"" ; Dialing command WAITFOR "_MCONn"&"" 45 ; Remember to trim trailing blanks IF NOT WAITFOR ; DIAL failed TRANSMIT "_MESCa"&"!" TRANSMIT "_MHANg"&"" INC N99 ; COunt the try IF N99 GT 10 GOTO Unavailable GOTO LOOP ENDIF ; ; Read the UTC ; GET_TIME: WAITFOR "*" 30 RGET S0 RGET S0 MESSAGE S0 IF NOT FIND S0(17:19) "UTC" GOTO GET_TIME ENDIF ; ; Extract the time from the message ; ATOI S0(10:11) N1 ; Extract hour # IF LT N1 N0 ; Test for negative after adjust N1 = N1 + 24 ; Ensure positive hour number after adjust SET FLAG(0) ON ; .. and flag the fact ENDIF ; ; And give the TIME to DOS ; TIME S3 1 ; Save current clock N1 = N1 - N0 ; Adjust for timezone S1 = "TIME "*N1&":"&S0(12:13)&":"&S0(14:15) DOS S1 ; Tell DOS to set the clock MESSAGE S1 ; Display on screen too CLOG "* SETTIME clock change from:" *S3*" to "*S1(5:79) HANGUP GOTO Exit ; ; Failed DIAL ; UNAVAILABLE: HANGUP MESSAGE "^M^JUnable to reach the Naval Observatory.^M^J" GOTO Exit ; ; General exit (modem not connected yet) ; EXIT: IF ISSC "$$$SCHED" EXECUTE "$$$SCHED" IF FCALLED FRETURN ; Return if called EXIT