ASMB HED S/P NSCAN 11/1/79 M. NAKAMURA NAM NSCAN,7 . 92080-1X593 REV.2026 791101 * * SOURCE 92080-18593 * SPC 2 ************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ************************************************************** SPC 2 EXT .ENTR,ISCAN ENT NSCAN * * THIS ROUTINE IS ABLE TO SCAN A STRING AND FIND THE NTH OCCRANCE * OF A TEST CHARACTER. THE SCAN STOPS WHEN THE TERMINATOR CHARACTER * IS ENCOUNTERED. * * CALLING SEQUENCE: * * I = NSCAN (IBUF,IBEG,IBYTES,ICNT) * * IBUF : BUFFER TO BE SCANNED * IBEG : STARTING BYTE OF SCANNING/ LAST POSITION SCANNED * IBYTES : LEFT = TERMINATOR * RIGHT = TEST BYTE * ICNT : NO. OF OCCRANCES OF TEST CHARACTER * * THE A-REGISTER RETURNS A FLAG : 0 = TEST BYTE IS DETECTED * 1 = TERMINATOR IS DETECTED * BUF NOP IBEG NOP BYTES NOP ICNT NOP * NSCAN NOP JSB .ENTR DEF BUF * CLA STA NCNT SET NO. OF OCCURANCES TO 0 * LDA IBEG,I SAVE INITAL FIRST BYTE STA IBSAV * CALL ISCAN(IBUF,IBEG,IBYTES,0) * NSCN1 JSB ISCAN FIND TEST CHARATER USING ISCAN DEF *+5 DEF BUF,I DEF IBEG,I DEF BYTES,I DEF D0 * SZA TEST CHARACTER FOUND? JMP NSCAN,I NO, TERMINATOR FOUND, RETURN LDA IBEG,I GET POSITION OF TEST CHARACTER ADA IBSAV CALCULATE POSITION OF TEST CHARACTER RELATIVE * TO START OF BUFFER STA IBEG,I STA IBSAV * ISZ NCNT INCREMENT TEST CHARACTER COUNT LDA NCNT NTH OCURRANCE OF TEST CHARACTER? CPA ICNT,I JMP NSCN2 YES, RETURN JMP NSCN1 NO, KEEP SCANNING * NSCN2 CLA INDICATE TEST CHARACTER FOUND LDB IBEG,I GET CHARACTER POSITION +1 ADB DM1 GET CHARACTER POSITION STB IBEG,I JMP NSCAN,I RETURN * * * DM1 DEC -1 D0 DEC 0 NCNT BSS 1 IBSAV BSS 1 END