.TITLE MMC1.. MESSAGE CONTROL PROCEDURES IN MACRO .IDENT /MMC1../ ; .PAGE .SBTTL . MESSAGE CHECKING AND HANDLING SOFTWARE M$ GROUP M$CHECK:: ; ENTRY CONDITIONS ; R0 -> CHECK STRING ; R1 -> MESSAGE TABLE ; ; EXIT CONDITIONS ; R0 = MESSAGE MATCH REPLY ; SAVE R1,R2,R3,R4 MOV R0,R4 ;HOLD STRING LENGTH CHECK IF VALID TST @R0 ;IS CHECK STRING LENGTH VALID BLE 60$ ;J IF LESS THAN OR ZERO 10$: TST @R1 ;IS THIS THE LAST ELEMENT IN LIST BEQ 60$ ;EXIT SETTING ERROR CODE CMP @R1,@R0 ;DOES CHECK CONTAIN MINIMUM NO OF CHARS BGT 50$ ;J IF NOT CMP 4(R1),@R0 ;IS MESSAGE SMALLER THAN CHECK STRING BLT 50$ ;J IF SMALLER MOV R1,R3 ;HOLD ADDRESS OF MESSAGE ELEMENT MOV (R0)+,R2 ;HOLD NUMBER OF CHARS TO CHECK ;THEN POINT TO FIRST CHARACTER ADD #6, R3 ;POINT TO 1ST CHAR IN MESSAGE ELEMENT 20$: CMPB (R3)+,(R0)+ ;COMPARE CHARS INDEX TO NEXT BNE 50$ ;J IF CHAR MISMATCH (STEP TO END OF ELEMENT) SOB R2,20$ ;COMPARE ALL CHARACTERS BR 62$ ;EXIT SETTING REPLY CODE ; 50$: ;STEP ONTO NEXT MESSAGE ELEMENT MOV 4(R1),R2 ;HOLD MESSAGE LENGTH BIT #1,R2 ;IS LENGTH ODD NUMBER OF CHARS BEQ 55$ ;J IF EVEN CHAR COUNT INC R2 ;MAKE COUNT EVEN 55$: ADD #6,R2 ;BYPASS SPECIALS AND LENGTH ADD R2,R1 ;R1 -> NEXT MESSAGE ELEMENT MOV R4,R0 ;RESET POINTER TO START OF CHECK STRING BR 10$ ;TRY AGAIN FOR MATCH CHECK ; 60$: MOV #-1,R0 ;HOLD ERROR CODE BR 63$ ;UNSAVE REGISTERS AND EXIT 62$: MOV 2(R1),R0 ;HOLD REPLY CODE 63$: UNSAVE R1,R2,R3,R4 RETURN ; .END ;