ITS Muddle.
[pdp10-muddle.git] / MUDDLE / filtrn.5
diff --git a/MUDDLE/filtrn.5 b/MUDDLE/filtrn.5
new file mode 100644 (file)
index 0000000..d78c405
--- /dev/null
@@ -0,0 +1,121 @@
+
+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