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