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 
                                                                                                                                                    