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:
committed by
Eric Swenson
parent
82a94fc0d0
commit
3677bb2c42
191
src/syseng/ifile.3
Executable file
191
src/syseng/ifile.3
Executable 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
|
||||
Reference in New Issue
Block a user