+
+TITLE FILTRN
+
+TYIC==1
+TYOC==2
+INC==3
+
+A=1
+B=2
+C=3
+D=4
+E=5
+F=6
+G=7
+P=17
+
+NCHRS==60.
+
+BFLNT==200
+LPDL==40
+
+
+FILTRN: MOVE P,[-LPDL,,PDL] ;GET A PDL
+ .OPEN TYIC,[SIXBIT / $TTY/]
+ .VALUE [ASCIZ /:LOGOUT /]
+ .OPEN TYOC,[SIXBIT / %TTY/]
+ .VALUE [ASCIZ /:LOGOUT /]
+
+ .IOT TYOC,["\] ;ACKNOLEDGE
+
+ MOVEI B,4*6 ;PREPARE TO READ FILE STUFF
+ MOVE A,[440600,,PTRF] ;GET POINT BYTER
+
+GETIF: .IOT TYIC,C
+ SUBI C,40 ;CONVERT TO SIXBIT
+ IDPB C,A ;INTO BUFFER
+ SOJN B,GETIF ;DO ALL CHARS
+
+ SKIPE PTRF+3 ;SYSNAME GIVEN?
+ .SUSET [.SSNAM,,PTRF+3] ;NO USE CURRENT
+ MOVSI A,6 ;GET BLOCK IMAGE INPUT MODE
+ HLLM A,PTRF ;AND CLOBBER IN
+
+ .OPEN INC,PTRF ;OPEN THE FILE
+ SKIPA A,["/] ;NEGATIVE ACK
+ MOVEI A,"\ ;POS ACKN
+
+ .IOT TYOC,A ;SEND DOWN
+ CAIE A,"\ ;SKIP IF A WIINER
+
+ .VALUE [ASCIZ /:LOGOUT
+/]
+
+ .IOT TYIC,A ;WAIT FOR HIM TO RE-ACK
+ CAIE A,"\
+ .VALUE [ASCIZ /:LOGOUT /]
+
+
+NXTBB: MOVE A,[-BFLNT,,BUFR] ;SETUP ITO POINTER
+ .IOT INC,A
+ MOVEI B,6*BFLNT ;NUMBER OF 6 BIT CHRS
+ JUMPGE A,GOTIT ;NOT EOF YET, JUMP
+ SETOM EOF ;AT END OF FILE
+ MOVEI B,(A) ;COMPUTE REMAINING
+ SUBI B,BUFR
+ IMULI B,6 ;CONVERT TO 6 BIT CHRS
+
+GOTIT: MOVE C,[440600,,BUFR] ;POINT TO BUFFER
+NXTB: MOVEI G,NCHRS ;GET MAX MESSAGE LNT
+ CAIL G,(B) ;IF GRT THAN LEFT
+ MOVEI G,(B) ;USE REMAINS
+ SUBI B,(G) ;AND SHRINK TOTAL
+ ADDI G,40 ;CONVERT TO ASCII
+ .IOT TYOC,G
+ SUBI G,40
+
+ MOVEI D,0 ;INIT CHECKSUM
+
+LOOP: ILDB A,C ;READ A CHAR
+ ADDI D,(A) ;UPDATE CKS
+ ADDI A,40 ;CONV TO ASCII
+ .IOT TYOC,A ;TO NEXT MACHINE
+ SOJN G,LOOP ;COUNT DOWN
+
+ ANDI D,77 ;CUT CKS
+ ADDI D,40
+ .IOT TYOC,D ;SEND THE CKS
+ .IOT TYIC,D ;WAIT FOR ACK
+
+ CAIE A,"\
+ .VALUE [ASCIZ /:LOGOUT /]
+
+ JUMPN B,NXTB ;STILL MORE IN BUFFER
+
+ SKIPN EOF
+ JRST NXTBB ;MORE IN FILE, READ IT
+
+ .IOT TYOC,[40] ;SEND EOF HACK
+
+ SETZM EOF
+ .VALUE [ASCIZ /:LOGOUT /]
+
+PTRF: 0
+ 0
+ 0
+ 0
+
+BUFR: BLOCK BFLNT
+
+PDL: BLOCK LPDL
+
+EOF: 0
+FOO:
+0
+PAT:
+PATCH: BLOCK 30
+
+END FILTRN
+
+
+\f\ 3\f
\ No newline at end of file