10 ; BBS CRASHBUSTER, LISTING 2 20 ; BY MATTHEW RATCLIFF 30 ; (c) 1985, ANTIC PUBLISHING 40 ; 50 ;FORM: A=USR(PROG,ADR(L$),LEN(L$)) 60 ; 70 RESULT = $D4 ; RETURN # OF BAD CHARACTERS 80 TXADR = $D6 ;SAVE STRING ADDR 90 SAVCR = $D8 ;SAVE CHARACTER TO SEE IF CHANGED 0100 *= $4000 ;CAN GO ANYWHERE 0110 START 0120 LDA #0 ;ZERO-OUT RESULT 0130 STA RESULT 0140 STA RESULT+1 0150 PLA ;GET ARGS 0160 BEQ ERROR ;DISALLOW BAD CALLS 0170 CMP #2 ;MUST BE 2 0180 BEQ AOK ;GOOD..PROCESS IT 0190 TAX ;BAD CALL, CLEAN UP STACK 0200 ER1 PLA 0210 PLA 0220 DEX 0230 BNE ER1 0240 ERROR INC RESULT+1 0250 ;THIS WILL RETURN 256 IN CALLING 0260 ;VARIABLE, INDICATING INVALID CALL. 0270 RTS 0280 AOK PLA 0290 STA TXADR+1 0300 PLA 0310 STA TXADR ;GET STRING ADDRESS 0320 PLA 0330 PLA ;GET LENGTH 0340 TAY ;USE AS INDEX 0350 LOOP 0360 LDA (TXADR),Y 0370 STA SAVCR ;SAVE CHARACTER 0380 AND #$7F ;DISALLOW INVERSE 0390 SEC 0400 CMP #32 ;CHECK FOR CONTROL CARS 0410 BCS NCTL ;NO CONTROL-GOOD 0420 CLC ;YES, THEN ADD 64 0430 ADC #64 ;TO MAKE IT ASCII CHARACTER 0440 ;CONTROL-LETTERS & INVERSE-CONTROL-LETTERS 0450 ;BECOME EQUIVALENT VALID LETTERS. 0460 NCTL SEC 0470 CMP #123 ;NO CHARS ABOVE CHR$(123),"z" 0480 BCC OK1 0490 SBC #64 ;TOO BIG, MAKE CTRL-";" A ";" 0500 ;ALSO TAKES CARE OF ESCAPE-CTRL EDIT KEYS 0510 OK1 CMP #96 ;NOT CTRL-PERIOD EITHER 0520 BNE ALLOK 0530 LDA #46 ;CTRL-PERIOD, MAKE IT PERIOD ONLY 0540 ALLOK STA (TXADR),Y 0550 CMP SAVCR 0560 BEQ TEST 0570 INC RESULT ;KEEP "BAD" COUNT 0580 TEST DEY 0590 BPL LOOP 0600 RTS ;CLEANED UP, BACK TO BASIC 0610 .END
Back to previous page