[comp.protocols.tcp-ip.ibmpc] PDCLKSET beta release

XJELDC@gemini.ldc.lu.se (Jan Engvald LDC) (08/20/90)

This is to announce the ver 0.85 beta release of PDCLKSET.

PDCLKSET sets the PC clock from an UDP/IP TIME server and uses a packet 
driver interface. It is meant to be called from AUTOEXEC.BAT and is very
small and fast. It knows a lot about daylight saving algorithms, but 
please send me mail if the rules are wrong or you need more of them.

PDCLKSET is available by anonymous FTP from Pollux.lu.se (130.235.132.89):
/pub/network/pdclkset/pdclk085.zip

Included are part04.txt from where I extracted the rules, and part06.txt
with some additional dst info.

The source code will be released later, but I want to tidy up a few
things first. However, detailed desription and dst tables are appended
to the read.me file that follows.

Happy testing!


Jan E LDC

;*************************************************************************
;**                                                                     **
;**                     PDCLKSET                                        **
;**                                                                     **
;**                                                                     **
;**             Copyright (C) 1990 Jan.Engvald @ LDC.lu.se		**
;**                                                                     **
;** This program is free software; you can redistribute it and/or modify**
;** it under the terms of the GNU General Public License as published by**
;** the Free Software Foundation, version 1.				**
;**									**
;** This program is distributed in the hope that it will be useful,	**
;** but WITHOUT ANY WARRANTY; without even the implied warranty of	**
;** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	**
;** GNU General Public License for more details.			**
;**									**
;** You should have received a copy of the GNU General Public License	**
;** along with this program; if not, write to the Free Software		**
;** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.		**
;**                                                                     **
;*************************************************************************
;**                                                                     **
;** PDCLKSET sets the time and date of the PC clock using a TIME server.**
;** To do so, the following information is required:			**
;** 									**
;** - This clients unique IP number.					**
;** - The IP number of a time server.					**
;** - The time offset from UTC (GMT) at this place.			**
;** - If daylight saving (summer) time is used, which algorithm to use.	**
;** 									**
;** All the above info can be supplied as arguments to PDCLKSET. If any	**
;** of the first three are missing, it will send a BOOTP request to try	**
;** to find the missing info. Except for client IP number, arguments to	**
;** PDCLKSET overrides BOOTP info.					**
;** 									**
;** BOOTP can not supply which dst algorithm to use; also, time offset	**
;** can't always be trusted. So, in practice, time offset and dst algo-	**
;** rithm (if applicable) are required arguments.			**
;** 									**
;** If PDCLKSET finds more than one time server (sum of arguments and	**
;** BOOTP fields) and the first one does not answer, it will try the	**
;** second server.							**
;** 									**
;** It is very hard to get accurate info on all the dst algorithms used	**
;** all over the world, so the one you choose, you should test out. Use	**
;** the alter argument to add or subtract time and days, and check that	**
;** the dst switch occurs correctly. When using the alter argument, the	**
;** date and time is displayed as usual, but the PC clock is not set.	**
;** If you find any errors, mail me the correct info to my mail address	**
;** below. If you want to, you can customize your own dst algorithm, see**
;** detailed info below.						**
;** 									**
;** PDCLKSET talks to the network card via a packet driver. If you have	**
;** more than one packet driver, it will use the first one (lowest 	**
;** packet interrupt number) unless you use the pktintno argument.	**
;** In AUTOEXEC.BAT you should first load the packet driver, then call	**
;** PDCLKSET. It is very small (6 kbyte) and executes fast, so you will	**
;** not notice any delay. PDCLKSET is not a TSR and does not require any**
;** CONFIG.SYS files, so no memory is wasted.				**
;** Note: If you always log into a Novell server after a boot, you 	**
;** don't need this program, the PC clock will be set from the server.	**
;** 									**
;** Call syntax:							**
;** 									**
;**   (time is [- | +]{<hours>h | <minutes>m | <seconds>[s]})		**
;**									**
;** pdclkset b[ootp]       or						**
;**									**
;** pdclkset [i[pnr]=n.n.n.n]  [t[imserver]=n.n.n.n[,n.n.n.n]]		**
;** 									**
;**          [o[ffset]=time]						**
;** 									**
;**          [d[aylightsave]=PACP | USA | CUB | CHIL | BRZ | GBR |	**
;**                          W_EU | M_EU | E_EU | LIBY | EGY | TURK |	**
;**                          ISR | IRAN | PRC | ROK | AUS | NSW | NZE |	**
;**                          FrTime,FrWeekDay,FrDayOfYear,		**
;**                          ToTime,ToWday,ToDayOfYr,AddTime]		**
;** 									**
;**          [a[lter]=days,time]  [p[ktintno]=decimalnr]		**
;** 									**
;** 									**
;** Examples:								**
;** 									**
;** pdclkset offs= -60m dst=M_EU (my IP nr and timeserver(s) from BOOTP)**
;** 									**
;** pdclkset o=5h  d=USA  ip=123.45.6.7  ts=123.45.6.8  (BOOTP not used)**
;**								 	**
;*************************************************************************
;** 									**
;** Acknowledgments:							**
;** 									**
;** The checksum routine used is a modified NCSA Telnet version.	**
;** The dst algorithm was modelled after PCIP SETCLOCK (thanks Drew!),	**
;** but enhanced to use parameters from a table.			**
;** The dst algorithm table was derived from a comp.sources.unix 1989	**
;** posting by ado@ncifcrf.gov of localtime.c and related routines	**
;** and tables (very useful data, thanks!).				**
;** The packet driver interface routines were copied from the Clarkson	**
;** packet driver distribution.						**
;** The small UDP/IP library was written by me, and can probably be	**
;** used in other small assembler applications.				**
;* 									 *
;* Jan Engvald, Lund University Computing Center			 *
;* ____________________________________________________________________	 *
;*   Address: Box 783               E-mail: xjeldc@ldc.lu.se		 *
;*            S-220 07 LUND    Earn/Bitnet: xjeldc@seldc52		 *
;*            SWEDEN          (Span/Hepnet: Sweden::Gemini::xjeldc)	 *
;*    Office: Soelvegatan 18        VAXPSI: psi%24020031020720::xjeldc	 *
;* Telephone: +46 46 107458         (X.400: C=se; A=TeDe; P=Sunet; O=lu; *
;*   Telefax: +46 46 138225                 OU=ldc; S=Engvald; G=Jan)	 *
;*     Telex: 33533 LUNIVER S						 *
;*								 	 *
;*************************************************************************

;************************************************************************
;*		Compile time constants                                  *
;************************************************************************

DEBUG		equ	0
IDSTRING	equ	'PDCLKSET ver 0.85beta'

HR		equ	60*60			; seconds in an hour

SUN		equ	0			; Sunday
SAT		equ	6			; Saturday
DAT		equ	0ffh			; Specific date follows

JANLW		equ	31				; Jan last week
FEB2W		equ	31+2*7				; Feb 2nd week
MAR1W		equ	31+28+1*7			; Mar 1st week
MAR2W		equ	31+28+2*7			; Mar 2nd week
MAR3W		equ	31+28+3*7			; Mar 2rd week
MARLW		equ	31+28+31			; Mar last week
APR01		equ	31+28+31+1			; Apr 1
APR1W		equ	31+28+31+1*7			; Apr 1st week
APR2W		equ	31+28+31+2*7			; Apr 2nd week
APR12		equ	31+28+31+12			; Apr 12
APR3W		equ	31+28+31+3*7			; Apr 3rd week
APRNL		equ	31+28+31+30-7			; Apr next last week
APRLW		equ	31+28+31+30			; Apr last week
MAY01		equ	31+28+31+30+1			; May 1
MAY1W		equ	31+28+31+30+1*7			; May 1st week
MAY2W		equ	31+28+31+30+2*7			; May 2nd week
AUG4W		equ	31+28+31+30+31+30+31+4*7	; Aug 4th week
SEP1W		equ	31+28+31+30+31+30+31+31+1*7	; Sep 1st week
SEP12		equ	31+28+31+30+31+30+31+31+12	; Sep 12
SEP2W		equ	31+28+31+30+31+30+31+31+2*7	; Sep 2nd week
SEP3W		equ	31+28+31+30+31+30+31+31+3*7	; Sep 3rd week
SEPLW		equ	31+28+31+30+31+30+31+31+30	; Sep last week
SEP30		equ	31+28+31+30+31+30+31+31+30	; Sep 30
OCT01		equ	31+28+31+30+31+30+31+31+30+1	; Oct 1
OCT1W		equ	31+28+31+30+31+30+31+31+30+1*7	; Oct 1st week
OCT2W		equ	31+28+31+30+31+30+31+31+30+2*7	; Oct 2nd week
OCT3W		equ	31+28+31+30+31+30+31+31+30+3*7	; Oct 3rd week
OCT24		equ	31+28+31+30+31+30+31+31+30+24	; Oct 18 - 24
OCT4W		equ	31+28+31+30+31+30+31+31+30+4*7	; Oct 4th week
OCT29		equ	31+28+31+30+31+30+31+31+30+29	; Oct 23 - 29
OCTLW		equ	31+28+31+30+31+30+31+31+30+31		; Oct last week
NOV13		equ	31+28+31+30+31+30+31+31+30+31+13	; Nov 5 - 13
DEC01		equ	31+28+31+30+31+30+31+31+30+31+30+1	; Dec 1
DEC2W		equ	31+28+31+30+31+30+31+31+30+31+30+2*7	; Dec 2nd week

AlgE		struc
AlgName		db	"EUR "			; Name of dst algorithm
AlgFromTime	dw	2*HR			; local standard time dst start
AlgFromWeekDay	dw	SUN			; weekday dst start
AlgFromWeek	dw	MARLW			; last day-of-year dst start
AlgUntilTime	dw	2*HR			; local standard time dst end
AlgUntilWeekDay	dw	SUN			; weekday dst end
AlgUntilWeek	dw	SEPLW			; last day-of-year dst end
AlgAddAmount	dw	1*HR			; dst advance amount
AlgEntryLen	=	$-AlgName
AlgE		ends

AlgData		struc
APac AlgE <"PACP", 2*HR,SUN,OCTLW, 1*HR,SUN,NOV13, HR>	; Pacific presidential
AUSA AlgE <"USA ", 2*HR,SUN,APR1W, 1*HR,SUN,OCTLW, HR>	; USA Canada Mexico
ACub AlgE <"CUB ", 0*HR,SUN,MAY2W,-1*HR,SUN,OCT2W, HR>	; Cuba
AChl AlgE <"CHIL", 0*HR,SUN,OCT2W,-1*HR,SUN,MAR2W, HR>	; Chile
ABrz AlgE <"BRZ ", 2*HR,SAT,OCT4W, 1*HR,SAT,FEB2W, HR>	; Brazil
AGBR AlgE <"GBR ", 1*HR,SUN,MARLW, 1*HR,SUN,OCT29, HR>	; United Kingdom
AWEu AlgE <"W_EU", 1*HR,SUN,MARLW, 1*HR,SUN,SEPLW, HR>	; West Europe
AMEu AlgE <"M_EU", 2*HR,SUN,MARLW, 2*HR,SUN,SEPLW, HR>	; Central Europe + SU
AEEu AlgE <"E_EU", 3*HR,SUN,MARLW, 3*HR,SUN,SEPLW, HR>	; East Europe
ALby AlgE <"LIBY", 2*HR,DAT,APR01, 1*HR,DAT,SEP30, HR>	; Libya
AEgy AlgE <"EGY ", 2*HR,DAT,MAY01, 1*HR,DAT,OCT01, HR>	; Egypt
ATur AlgE <"TURK", 1*HR,SUN,MARLW, 0*HR,SUN,SEPLW, HR>	; Turkey
AIsr AlgE <"ISR ", 2*HR,SUN,APR3W, 1*HR,SAT,AUG4W, HR>	; Israel
AIra AlgE <"IRAN", 2*HR,SUN,MARLW, 1*HR,SUN,SEP3W, HR>	; Iran
APRC AlgE <"PRC ", 2*HR,SUN,APR2W, 2*HR,SUN,SEP2W, HR>	; People Rep of China
AROK AlgE <"ROK ", 2*HR,SUN,MAY2W, 2*HR,SUN,OCT2W, HR>	; Rep of Korea
AAus AlgE <"AUS ", 2*HR,SUN,OCT24, 2*HR,SUN,MAR3W, HR>	; South Australia
ANSW AlgE <"NSW ", 2*HR,SUN,OCTLW, 2*HR,SUN,MAR3W, HR>	; New South Wales
ANZe AlgE <"NZE ", 2*HR,SUN,OCTLW, 2*HR,SUN,MAR1W, HR>	; New Zealand
AlgData		ends

;************************************************************************