.TITLE BYTLEN RETURN ARRAY LENGTH .SBTTL GENERAL INFORMATION .IDENT /01/ .LIST ME ;+ ; AUTHOR: KERRY WYCKOFF ;- ;+ ; CHANGES: NONE ;- ;+ ; MODULE FUNCTION: ; ; THIS ROUTINE RETURNS AN INTEGER*2 VALUE ; WHICH IS THE NUMBER OF NON-ZERO, NON-BLANK ; CHARACTERS IN A SPECIFIED ARRAY. ; ;- ;+ ; ASSEMBLY INSTRUCTIONS: ; ; MAC BYTLEN=BYTLEN ; ;- ;+ ; CALL FORMAT: ; ; 1) IF(BYTLEN(LENGTH,SOURCE).EQ.0)----- ; 2) I=BYTLEN(LENGTH,SOURCE) ; ;- .PAGE .SBTTL SYMBOL, MACRO, DATA DEFINITIONS ;+ ; LOCAL SYMBOL DEFINITIONS: NONE ;- ;+ ; LOCAL MACROS: NONE ;- ;+ ; LOCAL DATA BLOCKS: NONE ;- .PAGE .SBTTL FUNCTION DETAILS ;+ ; FUNCTION DETAILS: ; ; ; INPUTS: ; ; R5 CONTAINS THE ADDRESS OF THE PARAMETER LIST ; 1) WORD: NUMBER OF PARAMETERS ; 2) WORD: ADDRESS OF TOTAL ARRAY LENGTH ; 3) WORD: ADDRESS OF ARRAY ; ; OUTPUTS: ; ; R0 CONTAINS THE NUMBER OF NON-ZERO, NON-BLANK BYTES ; ; SIDE EFFECTS: NONE ; ;- .PAGE .SBTTL CODE SECTION .PSECT W05COD .ENABL LSB BYTLEN:: MOV @2(R5),R0 ; R0=TOTAL # BYTES BLE 99$ ; IF LE 0, RETURN MOV 4(R5),R1 ; R1=ADDRESS OF SOURCE MOV R0,R2 ; R2=SAVED COPY OF LENGTH MOV #^C40,R3 ; R3='BLANK' 1$: BITB (R1)+,R3 ; TEST FOR 0 OR BLANK BEQ 2$ ; IF EQ, FINISH UP SOB R2,1$ ; LOOP UNTIL DONE 2$: SUB R2,R0 ; CALCULATE LENGTH 99$: RTS PC ; RETURN .END