mirror of
https://github.com/PDP-10/its.git
synced 2026-01-23 10:59:24 +00:00
192 lines
3.8 KiB
Groff
Executable File
192 lines
3.8 KiB
Groff
Executable File
;-*-MIDAS-*-
|
||
TITLE IFILE SERVER
|
||
|
||
;MODIFIED FOR ITS/OZ FTP. from MINIC from MINI.
|
||
;
|
||
; 2-Sep-85 17:54:14, GZ - use SOPEN, fix EOF handling
|
||
|
||
;Contact name is IFILE
|
||
;
|
||
;Protocol: (all you can do is read files)
|
||
;Initial packet contains filename, ala SIMPLE connection.
|
||
;Server returns data packets containing stuff, followed by eof.
|
||
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
E=5
|
||
T=6
|
||
TT=7
|
||
P=17
|
||
|
||
CHIC=10
|
||
CHOC=11
|
||
DKIC=12
|
||
ERRC=13
|
||
|
||
DEBUG: 0
|
||
|
||
PDL: -20,,.
|
||
BLOCK 22
|
||
|
||
.INSRT SYSTEM;CHSDEF >
|
||
|
||
$$CHAOS==1
|
||
$$CONNECT==1
|
||
.INSRT SYSENG;NETWRK >
|
||
|
||
PKTBUF: BLOCK %CPMXW+%CPKDT
|
||
BUF1==PKTBUF
|
||
BUF1L==<%CPMXW+%CPKDT>*5
|
||
BUF2: BLOCK <BUF1L+3>/4
|
||
|
||
WINSIZ: 5
|
||
|
||
GO: .CLOSE 1, ;Close load channel
|
||
MOVE P,PDL
|
||
MOVEI T,TSINT
|
||
MOVEM T,42
|
||
.SUSET [.SMASK,,[%PIIOC]]
|
||
MOVEI A,CHIC
|
||
MOVEI B,0
|
||
MOVEI C,[ASCIZ/IFILE/]
|
||
MOVE D,WINSIZ
|
||
PUSHJ P,NETWRK"CHALSN
|
||
JSR LOSE
|
||
.SUSET [.SSNAME,,[SIXBIT/IFILE/]] ;Give peekers a clue
|
||
|
||
OPEN: LDB B,[$CPKNB+NETWRK"PKTBUF]
|
||
MOVE C,[440800,,%CPKDT+NETWRK"PKTBUF]
|
||
OPEN1: SOJL B,OPEN2
|
||
ILDB A,C
|
||
CAIE A,40
|
||
JRST OPEN1
|
||
OPEN2: MOVE D,[440700,,BUF2]
|
||
OPEN3: SOJL B,OPEN4
|
||
ILDB A,C
|
||
IDPB A,D
|
||
JRST OPEN3
|
||
OPEN4: SETZ A,
|
||
IDPB A,D
|
||
MOVE A,[.UAI,,DKIC]
|
||
.CALL [ SETZ ? SIXBIT/SOPEN/ ? A ? [440700,,BUF2]]
|
||
JRST OPENLS
|
||
; JRST XMITA
|
||
|
||
XMITA: MOVE A,[440700,,BUF1] ;HAVE TO DELETE ^C'S AND ^L'S AT EOF
|
||
MOVEI B,5 ;GET BUFFERED-BACK WORD
|
||
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI DKIC ? A ? SETZ B]
|
||
.LOSE %LSFIL
|
||
XMITA0: MOVE A,[440700,,BUF1+1]
|
||
MOVEI B,BUF1L-5
|
||
MOVE C,B
|
||
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI DKIC ? A ? SETZ B]
|
||
.LOSE %LSFIL
|
||
PUSH P,C
|
||
IDIVI B,5 ;ROUND TO WORD BOUNDARY
|
||
IMULI B,5
|
||
JUMPG C,[ MOVEI D,0 ;IF PARTIAL WORD TRANSFER, MAKE SURE FILLED WITH NULLS
|
||
IDPB D,A
|
||
SOJA C,. ]
|
||
POP P,C
|
||
SUB C,B
|
||
JUMPE C,XMITA9 ;NOTHING TRANSFERRED, EOF
|
||
XMITA3: MOVE A,[440700,,BUF1] ;NOW MOVE AND CONVERT BYTE-SIZE. DON'T MOVE LAST 5 CHARS
|
||
MOVE E,[440800,,BUF2]
|
||
MOVEI D,0
|
||
ZIPCO: ILDB T,A
|
||
IDPB T,E
|
||
ADDI D,1
|
||
XMITA2: SOJG C,ZIPCO
|
||
MOVE A,[440800,,BUF2]
|
||
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI CHOC ? A ? SETZ D]
|
||
JSR LOSE
|
||
XMITA9: JUMPL B,XMITA7 ;HERE B HAS NUMBER CHARS NOT XFERRED LAST SIOT OR -1 FLAG
|
||
MOVEI C,BUF1L-5
|
||
SUB C,B
|
||
ADDI C,4
|
||
IDIVI C,5 ;NUMBER OF VALID WORDS IN BUFFER (NOT COUNTING FIRST ONE)
|
||
MOVE D,BUF1(C) ;MOVE LAST WORD UP TO FIRST POSITION (REST HAVE BEEN XMTED)
|
||
MOVEM D,BUF1
|
||
JUMPE B,XMITA0 ;NO EOF YET
|
||
;D HAS LAST WORD IN FILE, COUNT VALID CHARS
|
||
MOVEI C,5
|
||
LSH D,-1
|
||
XMITA8: MOVE A,D
|
||
ANDI A,177
|
||
JUMPE A,.+3 ;Nulls appear from someplace
|
||
CAIE A,^C
|
||
CAIN A,^L
|
||
SOJG C,[ LSH D,-7 ? JRST XMITA8]
|
||
SETO B,
|
||
JUMPN C,XMITA3 ;GO TRANSMIT LAST WORD, SUCH AS IT IS
|
||
XMITA7: .CALL [ SETZ ? SIXBIT/FORCE/ ? SETZI CHOC]
|
||
JSR LOSE
|
||
; JRST XMTEOF
|
||
|
||
XMTEOF: MOVSI B,(<.BYTE 8 ? %COEOF ? 0>)
|
||
MOVEM B,PKTBUF
|
||
.CALL [ SETZ ? 'PKTIOT ? MOVEI CHOC ? SETZI PKTBUF]
|
||
JSR LOSE
|
||
.CALL [SETZ ? 'FINISH ? SETZI CHOC]
|
||
JSR LOSE
|
||
.CLOSE DKIC,
|
||
MOVSI B,(<.BYTE 8 ? %COCLS ? 0>)
|
||
MOVEM B,PKTBUF
|
||
.CALL [ SETZ ? 'PKTIOT ? MOVEI CHOC ? SETZI PKTBUF]
|
||
JSR LOSE
|
||
SKIPN DEBUG
|
||
.LOGOUT 1,
|
||
.VALUE
|
||
.LOGOUT 1,
|
||
|
||
;;XMITB: MOVE A,[444400,,%CPKDT+PKTBUF]
|
||
; MOVEI B,%CPMXC/4
|
||
; MOVE C,B
|
||
; .CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI DKIC ? A ? SETZ B]
|
||
; .LOSE %LSFIL
|
||
; SUB C,B
|
||
; JUMPE C,XMTEOF
|
||
; IMULI C,4
|
||
; DPB C,[$CPKNB+PKTBUF]
|
||
; MOVEI A,300
|
||
; DPB A,[$CPKOP+PKTBUF]
|
||
; .CALL [ SETZ ? 'PKTIOT ? MOVEI CHOC ? SETZI PKTBUF]
|
||
; JSR LOSE
|
||
; JUMPE B,XMITB]; END IF IFNE 0,
|
||
|
||
TSINT: 0 ? 0
|
||
JSR LOSE
|
||
|
||
LOSE: 0
|
||
SKIPE DEBUG
|
||
.VALUE
|
||
.LOGOUT
|
||
JRST .-2
|
||
|
||
;FAILURE, RETURN ERROR MESSAGE
|
||
|
||
OPENLS: MOVEI A,203
|
||
DPB A,[$CPKOP+PKTBUF]
|
||
.CALL [ SETZ ? SIXBIT/OPEN/ ? [.UAI,,ERRC] ? [SIXBIT/ERR/] ? MOVEI 1 ? SETZI 0]
|
||
.LOSE %LSFIL
|
||
MOVE A,[440800,,%CPKDT+PKTBUF]
|
||
MOVEI B,%CPMXC
|
||
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI ERRC ? A ? SETZ B]
|
||
.LOSE %LSFIL
|
||
MOVEI B,0
|
||
IDPB B,A
|
||
OPENL1: MOVE A,[440800,,%CPKDT+PKTBUF]
|
||
OPENL2: ILDB TT,A
|
||
CAIL TT,40
|
||
AOJA B,OPENL2
|
||
DPB B,[$CPKNB+PKTBUF]
|
||
.CALL [ SETZ ? 'PKTIOT ? MOVEI CHOC ? SETZI PKTBUF]
|
||
JSR LOSE
|
||
SKIPN DEBUG
|
||
.LOGOUT 1,
|
||
.VALUE
|
||
|
||
END GO
|