ITS Muddle.
[pdp10-muddle.git] / MUDDLE / filtrn.5
1
2 TITLE FILTRN
3
4 TYIC==1
5 TYOC==2
6 INC==3
7
8 A=1
9 B=2
10 C=3
11 D=4
12 E=5
13 F=6
14 G=7
15 P=17
16
17 NCHRS==60.
18
19 BFLNT==200
20 LPDL==40
21
22
23 FILTRN: MOVE    P,[-LPDL,,PDL]  ;GET A PDL
24         .OPEN   TYIC,[SIXBIT /  $TTY/]
25         .VALUE  [ASCIZ /:LOGOUT /]
26         .OPEN   TYOC,[SIXBIT /  %TTY/]
27         .VALUE  [ASCIZ /:LOGOUT /]
28
29         .IOT    TYOC,["\]       ;ACKNOLEDGE
30
31         MOVEI   B,4*6           ;PREPARE TO READ FILE STUFF
32         MOVE    A,[440600,,PTRF]        ;GET POINT BYTER
33
34 GETIF:  .IOT    TYIC,C
35         SUBI    C,40                    ;CONVERT TO SIXBIT
36         IDPB    C,A             ;INTO BUFFER
37         SOJN    B,GETIF         ;DO ALL CHARS
38
39         SKIPE   PTRF+3          ;SYSNAME GIVEN?
40         .SUSET  [.SSNAM,,PTRF+3]        ;NO USE CURRENT
41         MOVSI   A,6             ;GET BLOCK IMAGE INPUT MODE
42         HLLM    A,PTRF          ;AND CLOBBER IN
43
44         .OPEN   INC,PTRF                ;OPEN THE FILE
45         SKIPA   A,["/]          ;NEGATIVE ACK
46         MOVEI   A,"\                    ;POS ACKN
47
48         .IOT    TYOC,A                  ;SEND DOWN
49         CAIE    A,"\            ;SKIP IF A WIINER
50
51         .VALUE  [ASCIZ /:LOGOUT
52 /]
53
54         .IOT    TYIC,A          ;WAIT FOR HIM TO RE-ACK
55         CAIE    A,"\
56         .VALUE  [ASCIZ /:LOGOUT /]
57
58
59 NXTBB:  MOVE    A,[-BFLNT,,BUFR]        ;SETUP ITO POINTER
60         .IOT    INC,A
61         MOVEI   B,6*BFLNT       ;NUMBER OF 6 BIT CHRS
62         JUMPGE  A,GOTIT         ;NOT EOF YET, JUMP
63         SETOM   EOF             ;AT END OF FILE
64         MOVEI   B,(A)           ;COMPUTE REMAINING
65         SUBI    B,BUFR
66         IMULI   B,6             ;CONVERT TO 6 BIT CHRS
67
68 GOTIT:  MOVE    C,[440600,,BUFR]        ;POINT TO BUFFER
69 NXTB:   MOVEI   G,NCHRS         ;GET MAX MESSAGE LNT
70         CAIL    G,(B)           ;IF GRT THAN LEFT
71         MOVEI   G,(B)           ;USE REMAINS
72         SUBI    B,(G)           ;AND SHRINK TOTAL
73         ADDI    G,40            ;CONVERT TO ASCII
74         .IOT    TYOC,G
75         SUBI    G,40
76
77         MOVEI   D,0             ;INIT CHECKSUM
78
79 LOOP:   ILDB    A,C             ;READ A CHAR
80         ADDI    D,(A)           ;UPDATE CKS
81         ADDI    A,40            ;CONV TO ASCII
82         .IOT    TYOC,A          ;TO NEXT MACHINE
83         SOJN    G,LOOP          ;COUNT DOWN
84
85         ANDI    D,77            ;CUT CKS
86         ADDI    D,40
87         .IOT    TYOC,D          ;SEND THE CKS
88         .IOT    TYIC,D          ;WAIT FOR ACK
89
90         CAIE    A,"\
91         .VALUE  [ASCIZ /:LOGOUT /]
92
93         JUMPN   B,NXTB          ;STILL MORE IN BUFFER
94
95         SKIPN   EOF
96         JRST    NXTBB           ;MORE IN FILE, READ IT
97
98         .IOT    TYOC,[40]               ;SEND EOF HACK
99
100         SETZM   EOF
101         .VALUE  [ASCIZ /:LOGOUT /]
102
103 PTRF:   0
104         0
105         0
106         0
107
108 BUFR:   BLOCK   BFLNT
109
110 PDL:    BLOCK   LPDL
111
112 EOF:    0
113 FOO:
114 0
115 PAT:
116 PATCH:  BLOCK 30
117
118 END FILTRN
119
120
121 \f\ 3\f