home *** CD-ROM | disk | FTP | other *** search
- This is to announce the ver 1.02 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/pdclk102.zip
-
- The source code will be remade in August 1991, new names on variables,
- separation of application and UDP/IP library, ICMP handling added and
- general clean up.
-
-
- Happy times will soon be here!
-
-
- Jan E LDC
-
-
- ;*************************************************************************
- ;** **
- ;** PDCLKSET **
- ;** **
- ;** **
- ;** Copyright (C) 1991 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 UDP/IP 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. Use TERMIN.COM if you want**
- ;** to unload the packet driver. **
- ;** 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 [o[ffset]=time] **
- ;** **
- ;** [d[aylightsave]=PAC | USA | CUB | CHIL | BRZ | GBR | **
- ;** W_EU | M_EU | E_EU | LIBY | EGY | TURK | **
- ;** ISR | IRAN | PRC | ROK | AUS | TASM | **
- ;** NSW | LHI | NZE | **
- ;** FrTime,FrWeekDay,FrDayOfYear, **
- ;** ToTime,ToWday,ToDayOfYr,AddTime] **
- ;** **
- ;** [i[pnr]=n.n.n.n] [t[imserver]=n.n.n.n[,n.n.n.n]] **
- ;** **
- ;** [m[ask]=n.n.n.n] [g[ateway]=n.n.n.n[,n.n.n.n]] **
- ;** **
- ;** [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, and a later update (very useful data, thanks!). **
- ;** The packet driver interface routines were copied from the Clarkson **
- ;** packet driver distribution, without which this project would not **
- ;** have been possible (thanks Russ!). **
- ;** 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%2403732202020::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 1.02'
-
- MN equ 60 ; seconds in a minute
- HR equ 60*MN ; 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
- APR03 equ 31+28+31+3 ; Apr 3
- APR07 equ 31+28+31+7 ; Apr 7
- APR1W equ 31+28+31+1*7 ; Apr 1st week
- APR12 equ 31+28+31+12 ; Apr 12
- APR14 equ 31+28+31+14 ; Apr 14
- APR2W equ 31+28+31+2*7 ; Apr 2nd week
- APR18 equ 31+28+31+18 ; Apr 18
- APR3W equ 31+28+31+3*7 ; Apr 3rd week
- APR22 equ 31+28+31+22 ; Apr 22
- APR23 equ 31+28+31+23 ; Apr 23
- APRNL equ 31+28+31+30-7 ; Apr next last week
- APR26 equ 31+28+31+26 ; Apr 26
- APRLW equ 31+28+31+30 ; Apr last week
- MAY01 equ 31+28+31+30+1 ; May 1
- MAY04 equ 31+28+31+30+4 ; May 4
- MAY1W equ 31+28+31+30+1*7 ; May 1st week
- MAY2W equ 31+28+31+30+2*7 ; May 2nd week
- AUG28 equ 31+28+31+30+31+30+31+28 ; Aug 28
- AUG4W equ 31+28+31+30+31+30+31+4*7 ; Aug 4th week
- SEP01 equ 31+28+31+30+31+30+31+31+1 ; Sep 1
- SEP1W equ 31+28+31+30+31+30+31+31+1*7 ; Sep 1st week
- SEP08 equ 31+28+31+30+31+30+31+31+8 ; Sep 8
- 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
- SEP16 equ 31+28+31+30+31+30+31+31+16 ; Sep 16
- SEP17 equ 31+28+31+30+31+30+31+31+17 ; Sep 17
- SEP20 equ 31+28+31+30+31+30+31+31+20 ; Sep 20
- SEP3W equ 31+28+31+30+31+30+31+31+3*7 ; Sep 3rd week
- SEP28 equ 31+28+31+30+31+30+31+31+28 ; Sep 28
- SEP30 equ 31+28+31+30+31+30+31+31+30 ; Sep 30
- SEPLW equ 31+28+31+30+31+30+31+31+30 ; Sep last week
- 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
- 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
- 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,OCTLW, 2*HR,SUN,MAR3W, HR> ; South Australia
- ATas AlgE <"TASM", 2*HR,SUN,OCT24, 2*HR,SUN,MAR3W, HR> ; Tasmania
- ANSW AlgE <"NSW ", 2*HR,SUN,OCTLW, 2*HR,SUN,MAR1W, HR> ; New South Wales
- ALHI AlgE <"LHI ", 2*HR,SUN,OCTLW, 2*HR,SUN,MAR1W, 30*MN> ; LHI (Australia)
- ANZe AlgE <"NZE ", 2*HR,SUN,OCTLW, 2*HR,SUN,MAR1W, HR> ; New Zealand
-
- ; All entries below this line are indexed by year modulo 4
-
- APa0 AlgE <"PAC ", 2*HR,SUN,APR1W, 1*HR,SUN,NOV13, HR> ; Pacific presidential
- APa1 AlgE <"PAC ", 2*HR,SUN,APR1W, 1*HR,SUN,OCTLW, HR> ; Pacific non-pres
- APa2 AlgE <"PAC ", 2*HR,SUN,APR1W, 1*HR,SUN,OCTLW, HR> ; Pacific non-pres
- APa3 AlgE <"PAC ", 2*HR,SUN,APR1W, 1*HR,SUN,OCTLW, HR> ; Pacific non-pres
-
- ; All entries above this line are cyclic and will last forever
- ; All entries below this line are non-cyclic, they only last 4 years
-
- AIs0 AlgE <"ISR ", 0*HR,DAT,APR26,-1*HR,DAT,SEP20, HR> ; Israel 1992
- AIs1 AlgE <"ISR ", 0*HR,DAT,APR18,-1*HR,DAT,SEP12, HR> ; Israel 1993
- AIs2 AlgE <"ISR ", 0*HR,DAT,APR03,-1*HR,DAT,AUG28, HR> ; Israel 1994
- AIs3 AlgE <"ISR ", 0*HR,DAT,APR07,-1*HR,DAT,SEP01, HR> ; Israel 1991
-
- if 0 ; as years go by, replace entries above from below
- AIs3 AlgE <"ISR ", 0*HR,DAT,APR23,-1*HR,DAT,SEP17, HR> ; Israel 1995
- AIs0 AlgE <"ISR ", 0*HR,DAT,APR14,-1*HR,DAT,SEP08, HR> ; Israel 1996
- AIs1 AlgE <"ISR ", 0*HR,DAT,MAY04,-1*HR,DAT,SEP28, HR> ; Israel 1997
- AIs2 AlgE <"ISR ", 0*HR,DAT,APR19,-1*HR,DAT,SEP13, HR> ; Israel 1998
- AIs3 AlgE <"ISR ", 0*HR,DAT,APR11,-1*HR,DAT,SEP05, HR> ; Israel 1999
- AIs0 AlgE <"ISR ", 0*HR,DAT,APR30,-1*HR,DAT,SEP24, HR> ; Israel 2000
- AIs1 AlgE <"ISR ", 0*HR,DAT,APR15,-1*HR,DAT,SEP09, HR> ; Israel 2001
- AIs2 AlgE <"ISR ", 0*HR,DAT,APR07,-1*HR,DAT,SEP01, HR> ; Israel 2002
- AIs3 AlgE <"ISR ", 0*HR,DAT,APR27,-1*HR,DAT,SEP21, HR> ; Israel 2003
- AIs0 AlgE <"ISR ", 0*HR,DAT,APR18,-1*HR,DAT,SEP12, HR> ; Israel 2004
- AIs1 AlgE <"ISR ", 0*HR,DAT,MAY01,-1*HR,DAT,SEP25, HR> ; Israel 2005
- AIs2 AlgE <"ISR ", 0*HR,DAT,APR23,-1*HR,DAT,SEP17, HR> ; Israel 2006
- AIs3 AlgE <"ISR ", 0*HR,DAT,APR15,-1*HR,DAT,SEP09, HR> ; Israel 2007
- AIs0 AlgE <"ISR ", 0*HR,DAT,APR27,-1*HR,DAT,SEP21, HR> ; Israel 2008
- AIs1 AlgE <"ISR ", 0*HR,DAT,APR19,-1*HR,DAT,SEP13, HR> ; Israel 2009
- endif
- AlgData ends
-
- WARNYEAR equ 1995 ; acyclic data invalid year
-
- ;************************************************************************
-