; SOURCE AND NOTES FOR COMPUTE! PROOFREADER

10 C = 0: FOR I = 768 TO 768 + 68: READ A:C = C + A: POKE I,A: NEXT
20  IF C <  > 7258 THEN  PRINT "ERROR IN PROOFREADER DATA STATEMENTS": END
30  IF  PEEK(190 * 256) <  > 76 THEN  POKE 56,0: POKE 57,3: CALL 1002: GOTO 50
40  PRINT  CHR$(4);"IN#A$300"
50  POKE 34,0: HOME : POKE 34,1: VTAB 2: PRINT "PROOFREADER INTSALLED"
60  NEW
100  DATA 216,32,27,253,201,141
110  DATA 208,60,138,72,169,0
120  DATA 72,189,255,1,201,160
130  DATA 240,8,104,10,125,255
140  DATA 1,105,0,72,202,208
150  DATA 238,104,170,41,15,9
160  DATA 48,201,58,144,2,233
170  DATA 57,141,1,4,138,74
180  DATA 74,74,74,41,15,9
190  DATA 48,201,58,144,2,233
200  DATA 57,141,0,4,104,170
210  DATA 169,141,96

; Trigger on CR.
; Compute for each character in buffer in reverse order.
; All spaces are ignored.
; cksum = (cksum << 1) + (char|$80) + carry

0300- D8                   CLD
0301- 20 1B FD             JSR   KEYIN
0304- C9 8D                CMP   #$8D       ; CR
0306- D0 3C                BNE   L0344      ; exit if not CR
0308- 8A                   TXA
0309- 48                   PHA
030A- A9 00                LDA   #$00
030C- 48                   PHA              ; cksum
030D- BD FF 01  L030D      LDA   $01FF,X    ; read (backwards) through input buffer
0310- C9 A0                CMP   #$A0       ; skip spaces
0312- F0 08                BEQ   L031C
0314- 68                   PLA              ; add to cksum
0315- 0A                   ASL
0316- 7D FF 01             ADC   $01FF,X
0319- 69 00                ADC   #$00
031B- 48                   PHA
031C- CA        L031C      DEX
031D- D0 EE                BNE   L030D
031F- 68                   PLA
0320- AA                   TAX
0321- 29 0F                AND   #$0F       ; Place result in upper-left corner
0323- 09 30                ORA   #$30       ; ... digit by digit
0325- C9 3A                CMP   #$3A
0327- 90 02                BCC   L032B
0329- E9 39                SBC   #$39
032B- 8D 01 04  L032B      STA   $0401
032E- 8A        L032E      TXA
032F- 4A                   LSR
0330- 4A                   LSR
0331- 4A                   LSR
0332- 4A                   LSR
0333- 29 0F                AND   #$0F
0335- 09 30                ORA   #$30
0337- C9 3A                CMP   #$3A
0339- 90 02                BCC   L033D
033B- E9 39                SBC   #$39
033D- 8D 00 04  L033D      STA   $0400
0340- 68                   PLA
0341- AA                   TAX
0342- A9 8D                LDA   #$8D
0344- 60        L0344      RTS
