Category : Network Files
Archive   : PDCLK145.ZIP
Filename : PDCLKSET.DOC

 
Output of file : PDCLKSET.DOC contained in archive : PDCLK145.ZIP
;*************************************************************************
;** **
;** 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. **
;** **
;*************************************************************************
;** USING PDCLKSET TO SET THE PC SOFTWARE CLOCK **
;*************************************************************************
;** **
;** 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 an UDP/IP time server (most Unix systems). **
;** - The time zone 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. If you are not using BOOTP you probably **
;** must use gateway and mask arguments too. Except for client IP number**
;** and network mask, arguments to PDCLKSET override BOOTP info. **
;** Using a BOOTP server is highly recommended, freeware code exists **
;** for Unix systems and MSDOS PCs. **
;** **
;** BOOTP can not supply which dst algorithm to use; also, zone offset **
;** can't always be trusted. So, in practice, zone offset and dst algo- **
;** rithm (if applicable) are required arguments. On the other hand, **
;** these parameters will stay the same all around the year, no need to **
;** change the setup. **
;** **
;** 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 **
;** other servers. The same applies for gateways. **
;** **
;** 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. **
;** I have only tested PDCLKSET with Ethernet or Ethernet simulating **
;** packet drivers. I have one report that it works with S&K FDDI **
;** interfaces, if so it should work for token ring too, but I've got **
;** no confirmation on that. **
;** **
;** Running through remote bridges or slip links may require longer **
;** than default timeouts. Add the number of extra seconds you need **
;** with the argument LongerTimeout= time. **
;** **
;** In AUTOEXEC.BAT you should first load the packet driver, then call **
;** PDCLKSET. It is very small (12 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. See call syntax below. **
;** 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. **
;** However, if you are the supervisor, use PDCLKSET+SRVTIME to set it **
;** (available at msdos.ftp.sunet.se:pub/network/novelutl/srvtime). **
;** **
;*************************************************************************
;** USING PDCLKSET TO SET A TIMEZONE VARIABLE **
;*************************************************************************
;** **
;** PDCLKSET can also assign the proper normal or dls timezone name to **
;** an environment variable (TZ is used by most systems). Argument **
;** "Zone= #" will assign numeric zones to TZ (like TZ=+0100). If you **
;** want anything else, use the alternative syntax, e.g. **
;** "Zone= tzone=MET,METDST" will set TZONE=MET or METDST. **
;** **
;*************************************************************************
;** SYNTAX AND EXAMPLES FOR TIMESETTING **
;*************************************************************************
;** **
;** (time is [- | +] [h] [m] [[s]] ) **
;** **
;** pdclkset (displays a usage message) or **
;** **
;** pdclkset b[ootp] (only if dst not used) 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] **
;** **
;** [z[onename]= # | varible=normalname,dlsname **
;** **
;** [i[pnr]=n.n.n.n] [t[imservers]=n.n.n.n[,n.n.n.n[,...]]] **
;** **
;** [m[ask]=n.n.n.n g[ateways]=n.n.n.n[,n.n.n.n[,...]]] **
;** **
;** [p[ktintno]=hexnr] [a[lter]=days,time] **
;** **
;** [l[ongertimeout]=time] **
;** **
;** **
;** All arguments to pdclkset must be on the same line, no continuation.**
;** **
;** Examples: **
;** **
;** pdclkset o= -1h d=M_EU z=# (my IP nr and timeserver(s) from BOOTP)**
;** **
;** pdclkset offs=6h dst=USA zonename= tz=CST,CDT (sets TZ=CST or CDT) **
;** **
;** pdclkset o=8h d=PAC ip=123.45.6.7 ts=123.45.6.8 (BOOTP not used)**
;** **
;** pdclkset o=-9h30m t=1.2.3.4 i=2.3.4.5 g=2.3.4.1 m=255.255.255.0 **
;** **
;** **
;** Part of an AUTOEXEC.BAT file may look like this: **
;** **
;** \net\wd8003e -w 0x7d 3 0x280 0xd000 (install packet driver) **
;** \net\winpkt 0x7c 0x7d (install winpkt driver) **
;** \net\pdclkset o=-1h d=M_EU z=# (set PC clock and TZ) **
;** **
;** If you don't want to keep the paket drivers in memory, add the **
;** following line: **
;** **
;** \net\termin 0x7c (remove packet drivers) **
;** **
;** If you just need timesetting, use pdclksml instead of pdclkset. **
;** **
;*************************************************************************
;** USING PDCLKSET FOR NETWORK TESTING (PING) **
;*************************************************************************
;** **
;** There is also a buildt in ping client and server. If you just want **
;** to enable the server, add a "flag=1" argument and the PDCLKSET **
;** termination will be delayd and it responds to incoming pings until **
;** you hit any key. If you want to send pings, use the echo argument. **
;** When you then hit any key, it stops sending but still collects **
;** responses. It terminates when hiting a second key. When pinging, **
;** it displays real time statistics on delay and error rate (nice!). **
;** PDCLKSET sets the hardware timer to enable millisecond accurate **
;** timing; if your PC does not like this, add argument "flag=16". **
;** **
;** A typical ping call look like: **
;** **
;** pdclkset echo=ping.lu.se,32,256 **
;** **
;** The display will look like this: **
;** **
;** Calling nameserver(s)... got reply in 115 ms. **
;** **
;** Ping with packet size 32 and interval 256 ms to 130.235.128.100: **
;** **
;** ------ Packets ------ | --- Delay ms --- | Packet | Load | Time **
;** transmit receive diff | this min avg max | loss | kb/s | s **
;** 187 184 3 87 27 36 517 1.6042 % 5 41 **
;** **
;** **
;** You can use IP packet sizes from 32 to 1500. While a few network **
;** errors only show up at a certain size, the default 32 is good in **
;** most cases and does not unnecessary load links. If you use a **
;** negative size, it will sweep packet sizes from 32 up to abs(size) **
;** and unless you hit ESC at termination an error size distribution **
;** table is displayd. You can then see if packets are lost randomly or **
;** in bursts or if there is a pattern, like odd or big sizes. Sweeping **
;** is very effective for detecting queue limits in routers and bridges.**
;** The ping packet data is by default starting at 0x101 and incremented**
;** by one for each word in the packet. Using the optional data and inc **
;** fields you can fill with other values, like 0,0 or 0xffff,0 which **
;** are useful for WAN modem link tests. **
;** **
;** Packets are transmitted at a constant rate depending on interval, **
;** which can be from 0 and up to 32000. The interval unit is now 0.8 **
;** milliseconds (Note: ver 1.33 had 55 ms units!). By adding flag=32 **
;** the unit will be 0.1 ms giving a finer grain. As a safety for **
;** accidental loading, if you wan't intervals less than 128 ms you **
;** must add a Flag=1 argument. When pinging in a wide area network **
;** environment, watch the load figure (showing the load caused by this **
;** ping activity and calibrated for half duplex media such as Ethernet **
;** or LocalTalk) not to overload slow links. **
;** **
;** The destination host must run IP and you can use its IP number or **
;** its domain name. **
;** **
;** Diff is the difference between sent and received packets, and if **
;** not zero either packets are lost or are in transit. If there are **
;** network errors, watching how receive and diff increments tell you **
;** how the errors are distributed in time (temporary total blocking or **
;** just random drops) down to tenths of a second (very useful!). **
;** Blocking indicates serious errors, else it can be just high load. **
;** **
;** If there turns up a number between packets received and diff, it is **
;** the number of packets dropped due to no buffers available. **
;** **
;** The delay values are useful to characterize link loads. After a **
;** while, the min value approaches the delay on an unloaded link. If **
;** the average value is significantly higher, the link is loaded. If **
;** the max value is significantly higher than the avg value, the load **
;** is bursty. The "this" field shows the current delay. **
;** **
;** Packet loss is simply 100*diff/transmit. If the host you are **
;** pinging don't drop packets (many do, a 386 with PDCLKSET doesn't), **
;** the packet loss as a symptom of network health is as follows: **
;** **
;** 0.01 % or less : your network is helthy. **
;** 0.01 % to 0.1 % : there are some minor faults but nobody will **
;** notice any delays. **
;** 0.1 % to 1 % : you will notice delays more or less often. **
;** 1 % or more : frequent delays, very annoying. **
;** **
;** The display is updated five times a second. To avoid unpleasant **
;** value flickering, when a packet is just sent, diff is temporarily **
;** one less than it should be. When a packet has arrived it is back to **
;** normal. All values (except the "this" and the load values) are **
;** accumulated or averaged during the complete time since pdclkset was **
;** last started. The time field tells you this elapsed time. **
;** **
;** Using udpecho= instead of echo= will send UDP echo instead of icmp **
;** echo (ping) packets. Add flag=64 if you want UDP discard packets. **
;** **
;** Argument f=1 will continue sending despite send errors. **
;** **
;** If you don't run a BOOTP server, the i= (and n=) arguments are **
;** needed and also m= and g= if any traffic goes through a router. **
;** **
;** **
;** Syntax: **
;** **
;** pdclkset e[cho]= name | n.n.n.n [,size[,interval[,data[,inc]]]] **
;** **
;** [i[pnr]=n.n.n.n] [n[ameservers]=n.n.n.n[,n.n.n.n[,...]]] **
;** **
;** [m[ask]=n.n.n.n g[ateways]=n.n.n.n[,n.n.n.n[,...]]] **
;** **
;** [p[ktintno]=hexnr] [f[lags]=flagnr] **
;** **
;** [l[ongertimeout]=time] **
;** **
;** u[dpecho]= name | n.n.n.n [,size[,interval[,data[,inc]]]] **
;** **
;** **
;** Examples: **
;** **
;** pdclkset echo= nic.ddn.mil (ping client, auxilary info from BOOTP) **
;** **
;** pdclkset e= 1.2.3.4 i= 2.3.4.5 g= 2.3.4.1 m= 255.255.255.0 **
;** **
;** pdclkset echo= host.on.this.net ip= 111.22.33.4 ns= 111.22.33.5 **
;** **
;** pdclkset udpecho= ping.lu.se (UDP echo client) **
;** **
;** pdclkset flags= 1 (ping and UDP echo server) **
;** **
;** pdclkset flags= 1 ip= 2.3.4.5 g= 2.3.4.1 m= 255.255.255.0 **
;** **
;*************************************************************************
;** USING PDTBUILD TO GENERATE TABLES WITH ALL IP HOSTS **
;*************************************************************************
;** **
;** The PDTBUILD program, which is included in the ZIP package, looks **
;** at all ARP broadcasts and generates a table with all the IP hosts **
;** on this (sub)net. Each entry has IP number, Ethernet address and **
;** host name, the latter which it asks a name server for. Two files **
;** are generated, IPTBL.TXT and HWTBL.TXT, which are suitable as input **
;** to LANwatch or a LANalyzer or other monitors. It should preferably **
;** be run for a complete day or longer. When started, if IPTBL.TXT **
;** exists it will read it in and update with what it sees on the net. **
;** It can handle up to 4094 hosts. **
;** **
;** In the comment field, an A means authorative answer, N is non- **
;** authorative answer from nameserver. 0 means host not registered **
;** for reverse lookup (in-addr.arpa domain). - means name not found. **
;** < and = denotes Ethernet duplicates for same IP address. >, = and + **
;** denotes IP duplicates for same Ethernetaddress. **
;** **
;** You can speed up address collection by adding flag=8. This will **
;** start ARP probing, a process that cycles through all IP addresses in**
;** the (sub)net and sends an ARP request for each address. The speed **
;** is 9 ARP requests per second, slowing down to two per second when **
;** nameserver requests are needed. It is rather successful in ignoring **
;** ARP replies from proxy ARP gateways (otherwise it would table a lot **
;** of fake hosts). **
;** **
;** You can run echo (ping) in parallell with tablebuilding (and the **
;** ARP probing), although the screen display is somewhat mixed. I do **
;** it because the screen then is updated regularly and I can see it is **
;** running. **
;** **
;** If you don't run a BOOTP server, the i= and n= arguments are needed **
;** and also m= and g= if the nameserver is behind a router. **
;** **
;** The tblbuild code is a quick hack, undocumented, but works for me. **
;** Pdtbuild includes all the functionality of pdclkset. **
;** **
;** Syntax: **
;** **
;** pdtbuild f[lags]=flagnr **
;** **
;** [i[pnr]=n.n.n.n] [n[ameservers]=n.n.n.n[,n.n.n.n[,...]]] **
;** **
;** [m[ask]=n.n.n.n g[ateways]=n.n.n.n[,n.n.n.n[,...]]] **
;** **
;** [p[ktintno]=hexnr] **
;** **
;** **
;** Examples: **
;** **
;** pdtbuild flags= 2 i=2.3.4.5 n=2.3.4.6 (LANalyzer table builder) **
;** **
;** pdtbuild flags= 2 i=2.3.4.5 n=1.2.3.4 g=2.3.4.1 m=255.255.255.0 **
;** **
;** pdtbuild flags= 2+4 (LANwatch table builder) **
;** **
;** pdtbuild flags= 2+8 (table building with probing) **
;** **
;*************************************************************************
;** HISTORY **
;*************************************************************************
;** **
;** Ver 0.85: Beta release. **
;** **
;** Ver 1.02: First official release. **
;** Removed 386-only instructions. Numerous minor changes. **
;** Corrected the Pacific daylight algorithm. **
;** **
;** Ver 1.10: Selected release with support for one gateway. **
;** **
;** Ver 1.27: Major rewrite of the UDP/IP library to make it mostly RFC **
;** compliant. Multi gateway and multi timeserver support. **
;** Fixed hangs on argument syntax errors. **
;** Added comments and documentation to the code. **
;** Added ping server and client function. **
;** **
;** Ver 1.28: Added fragment reassembly. **
;** Added PDTBUILD application to automatically generate **
;** hardware and IP tables by watching network traffic. **
;** **
;** Ver 1.29: Added SQID (Source Quench Introduced Delay) **
;** All time compares changed to js/jns instead of jl/jge, **
;** avoiding wrong handling once every hour. **
;** **
;** Ver 1.30: Added timezone environment variable handling (SET TZ=...).**
;** Timeserver not needed to ping or build tables. **
;** **
;** Ver 1.31: Ping delays now millisecond accurate. **
;** **
;** Ver 1.32: Corrected check on illegal ping packet size. **
;** Ping display cleaned up and overhead reduced. **
;** Corrected BufAlloc error when out of buffers. **
;** **
;** Ver 1.33: Fixed PDTBUILD error when not tablebuilding. Ping **
;** enhancements: Time server not needed, added elapsed ping **
;** time field, send error messages displayed. **
;** **
;** Ver 1.34: Made a table for arg decode. Negative ping size will now **
;** sweep from 28 up to abs(size). Also odd sizes work. **
;** Added code in AdjTo16bits to avoid divide overflow. **
;** **
;** Ver 1.35: Made performance improvements. A 386SX with 16-bit WD **
;** card can now handle 2000 pkts/s short packets (send + **
;** receive) or load to 7 Mb/s (long packets). Echo interval **
;** is now in units of milliseconds (actually 0.858 ms) **
;** instead of 55 ms ticks. Added traffic load field in the **
;** display. Added several debug checks. **
;** **
;** Ver 1.36: Made documentation changes for the above new features. **
;** **
;** Ver 1.37: Added domain name resolver for ping. Corrected a bug in **
;** fragment reassembly. Changed length input to SendUdpPkt. **
;** Found bug preventing inactivity timeout for remote hosts. **
;** **
;** Ver 1.38: TblBuild redesigned to be able to detect both IP and **
;** hardware address duplicates. Corrected a bug when out of **
;** buffers trying to send unreachables. **
;** **
;** Ver 1.39: TblBuild enhanced with an active probe function to speed **
;** up address collection. **
;** **
;** Ver 1.40: udpecho= will send udp echo instead of icmp echo packets. **
;** Flag=1 will continue sending despite of send errors. **
;** Fixed bug limiting pdtbuild to 2047 hosts, now 4094. **
;** Added test on no nameserver when nameservers needed. **
;** Fixed sometimes inaccurate "active this run" in pdtbuild. **
;** **
;** Ver 1.41: Added LongerTimeout= argument to run on slow links. **
;** **
;** Ver 1.42: Fixed IS_386 wrongly set for 8088/8086 (bug introduced in **
;** ver 1.35 caused hangs or bad checksum on PC XTs). **
;** **
;** Ver 1.43: Try to handle the case with high speed CPUs overflowing **
;** some network cards or packet drivers. **
;** **
;** Ver 1.44: Show in front of diff the packets dropped due to no bufs. **
;** Server mode now displays packets and load statistics. **
;** With flag=32 the interval is in units of 0.1 ms. **
;** With flag=64 udp= will send discard packets. **
;** **
;** Ver 1.45: Fixed display of junk characters if the time server IP **
;** had all 12 digits in the "Clock set to ..." message. **
;** **
;*************************************************************************
;** 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 [email protected] of localtime.c and related routines **
;** and tables, and a later update (very useful data, thanks!). **
;** The master environment is found using Pat's code. **
;** The millisecond timer is based on code from Dean Pentcheff. **
;** The DateTimeCalc routine is my own invention. **
;** The packet driver interface routines were copied from the Crynwr **
;** 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. It is now fully RFC **
;** compliant, except for a few small cases mentioned in the code. It **
;** DOES handle IP type of service, fragment reassembly, source quench **
;** throttling, sending port and protocol unreachables, multiple **
;** default gateways, etc. **
;** **
;*************************************************************************
;** WHERE TO GET IT FROM **
;*************************************************************************
;** **
;** Current version of PDCLKSET can be obtained by anonymous FTP from **
;** ftp.lu.se:/pub/network/pdclkset/pdclkxxx.zip or from **
;** msdos.ftp.sunet.se:pub/network/pdclkset/pdclkxxx.zip or from Novell **
;** server LUSTORFS/ARC:PUB\NETWORK\PDCLKSET\PDCLKxxx.ZIP **
;** (Netware access only in Lund and around). **
;** Major releases will also be available on wsmr-simtel20.army.mil and **
;** its mirror archive sites in the msdos.pktdrvr directory. **
;** **
;* *
;* Jan Engvald, Lund University Computing Center *
;* ____________________________________________________________________ *
;* Address: Box 783 E-mail: [email protected] *
;* 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=""; P=Sunet; O=lu; *
;* Telefax: +46 46 138225 OU=ldc; S=Engvald; G=Jan) *
;* Telex: 33533 LUNIVER S *
;* *
;*************************************************************************

; Note: If you want to assemble this code yourself, you need Turbo ASM
; (at least MASM 5.1 does not like comments on structure calls!).
; Also, some files from the Crynwr packet driver collection are needed.

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

.lfcond
PRGVERSION equ ' v1.45'
TBLBUILD equ 1
PINGCLIENT equ 1
DEBUG equ 0

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

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
APR2W equ 31+28+31+2*7 ; Apr 2nd week
APR18 equ 31+28+31+18 ; Apr 18
APRNL equ 31+28+31+30-7 ; Apr next last week
APR23 equ 31+28+31+23 ; Apr 23
APR26 equ 31+28+31+26 ; Apr 26
MAY01 equ 31+28+31+30+1 ; May 1
MAY2W equ 31+28+31+30+2*7 ; May 2nd week
AUG28 equ 31+28+31+30+31+30+31+28 ; Aug 28
SEP01 equ 31+28+31+30+31+30+31+31+1 ; Sep 1
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
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
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
OCT2W equ 31+28+31+30+31+30+31+31+30+2*7 ; Oct 2nd 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

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 equ $-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,APR23,-1*HR,DAT,SEP17, HR> ; Israel 1995

if 0 ; as years go by, replace entries above from below with same label
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 1996 ; acyclic data invalid year

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



  3 Responses to “Category : Network Files
Archive   : PDCLK145.ZIP
Filename : PDCLKSET.DOC

  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/