1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-07 17:01:19 +00:00

IFILE - Chaosnet file service.

This commit is contained in:
Lars Brinkhoff
2017-02-24 22:46:02 +01:00
committed by Eric Swenson
parent 82a94fc0d0
commit 3677bb2c42
3 changed files with 196 additions and 0 deletions

191
src/syseng/ifile.3 Executable file
View File

@@ -0,0 +1,191 @@
;-*-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