1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-30 21:41:56 +00:00
Files
PDP-10.its/src/sysnet/datsrv.4
Lars Brinkhoff 07b9e0f539 Fix bug in programs when system time not set.
- DATE
- DATSRV
- TIME
2018-08-25 05:55:38 +02:00

167 lines
2.7 KiB
Groff

;-*- Mode: MIDAS -*-
TITLE DATSRV ; Net daytime server -- install as DEVICE;TCP SYN015
PORT==13. ; Official TCP port for Daytime Server.
A=1 ; General use reguster
B=2 ; "
C=3 ; "
D=4 ; "
DATE=5 ; SIXBIT YYMMDD
SEND=<001000,,>
T=7 ; For use by SEND UUO only
E=40 ; "
NETO==1 ; Output socket
NETI==2 ; Input socket
LOC 41
JSR UUOH
LOC 42
JSR TSINT
LOC 100 ; One page of impure code is all we need
DEBUG: 0
TSINT: 0 ; Interrupt handler - for fatal conditions
0
JSR AUTPSY ; Any interrupt is cause for death.
UUOH: 0 ; UUO handler -- send SIXBIT terminated by '@
MOVEI T,440600 ; SIXBIT byte pointer
HRLM T,E
ILDB T,E
ADDI T,40 ; Convert to ASCII
.IOT NETO,T ; First uppercase
.SEND: ILDB T,E
CAIN T,'@
JRST 2,@UUOH
ADDI T,40 ; Convert to ASCII
CAIL T,"A ; If greater than than A
ADDI T,40 ; convert to lowercase
.IOT NETO,T
JRST .SEND
GO: .CALL [ SETZ
SIXBIT /TCPOPN/
MOVEI NETI
MOVEI NETO
MOVEI PORT
[-1]
[-1] ((SETZ))]
JSR AUTPSY ; Failed (should timeout!)
MOVEI B,3*30. ; Try for 30 sec
RETRY: MOVEI A,10.
.SLEEP A,
.CALL [ SETZ
SIXBIT /WHYINT/
MOVEI NETO
MOVEM A
MOVEM A ((SETZ))]
.LOSE %LSSYS
CAIE A,%NSOPN
CAIN A,%NSRFN
CAIA
SOJG B,RETRY
CAIG B,
JSR AUTPSY ; Timed out...
SERVE: .RDATE DATE,
CAMN DATE,[-1]
JRST [ SEND [SIXBIT /TIME @/]
SEND [SIXBIT /UNSET@/]
JRST CRLF ]
LDB A,[360400,,DATE] ; First digit of year
IMULI A,10.
LDB B,[300400,,DATE] ; Second digit of year
ADD A,B
IDIVI A,4
IMULI A,5
ADD A,B
LDB C,[140600,,DATE] ; Month
TLNE DATE,A
ADDI C,10.
JUMPN B,.+3
CAIG C,22
SOJ A,
ADD A,MONTAB-1-'0 (C)
LDB B,[060400,,DATE] ; First digit of day
IMULI B,10.
LDB D,[000400,,DATE] ; Second digit of day
ADD A,D
ADD A,B
CAL2: ADDI A,5 ; Century starts on a Saturday
IDIVI A,7
SEND WKDAY(B)
SEND MONTH-1-'0 (C)
LDB B,[001400,,T]
ROT B,-14
TLNN B,170000 ; If date has a leading zero
TLZ B,600000 ; make it a blank
IORI B,(SIXBIT /@/)
SEND B
.RTIME B,
LSHC A,2*6
LSH A,6
IORI A,':
LSHC A,2*6
LSH A,6
IORI A,':
HRRI B,(SIXBIT /20@/) ; Century
SEND A
HRLZI B,777700 ; Mask YY
AND B,DATE
TLO B,'@
SEND B
CRLF: .IOT NETO,[15] ; CR
.IOT NETO,[12] ; LF
.NETS NETO, ; Force the output.
.CLOSE NETO, ; Disconnect.
.CLOSE NETI, ; Disconnect.
CAIA
AUTPSY: 0
SKIPE DEBUG
.VALUE
.LOGOUT ; All done
CONST:
CONSTANTS
MONTH: SIXBIT/JAN @/
SIXBIT/FEB @/
SIXBIT/MAR @/
SIXBIT/APR @/
SIXBIT/MAY @/
SIXBIT/JUN @/
SIXBIT/JUL @/
SIXBIT/AUG @/
SIXBIT/SEP @/
SIXBIT/OCT @/
SIXBIT/NOV @/
SIXBIT/DEC @/
MONTAB: 0
3
3
6
1
4
6
2
5
0
3
5
WKDAY: SIXBIT/MON @/
SIXBIT/TUE @/
SIXBIT/WED @/
SIXBIT/THU @/
SIXBIT/FRI @/
SIXBIT/SAT @/
SIXBIT/SUN @/
END GO