1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-23 10:59:24 +00:00
2017-02-24 21:47:27 -08:00

192 lines
3.8 KiB
Groff
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;-*-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