ASMB
      HED S/P ISCAN    3/6/77  P. SENANT
      NAM ISCAN,7 . 92080-1X026 REV.2026  800515
* 
*     SOURCE 92080-18026
* 
      SPC 2 
**************************************************************
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  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 
      ENT ISCAN 
* 
*  THIS ROUTINE IS ABLE TO SCAN A STRING UNTIL/WHILE A TEST BYTE
*  OCCURS.
* 
*  CALLING SEQUENCE:
* 
*  I = ISCAN (IBUF,IBEG,IBYTES,IFLAG) 
* 
*      IBUF   : BUFFER TO BE SCANNED
*      IBEG   : STARTING BYTE OF SCANNING/ LAST POSITION SCANNED
*      IBYTES : LEFT = TERMINATOR 
*               RIGHT = TEST BYTE 
*      FLAG   : 0 = UNTIL 
*               1 = WHILE 
* 
*     THE A-REGISTER RETURNS A FLAG :  0 = TEST BYTE IS DETECTED
*                                      1 = TERMINATOR IS DETECTED 
* 
BUF   NOP 
IBEG  NOP 
BYTES NOP 
FLAG  NOP 
* 
ISCAN NOP 
      JSB .ENTR 
      DEF BUF 
* 
      LDB BUF        COMPUTE
      CLE,ELB        STARTING 
      ADB DM1        BYTE ADDRESS 
      ADB IBEG,I     OF STRING
      STB BUF        AND SAVE IT
* 
      LDA FLAG,I     KIND OF SCAN?
      SZA 
      JMP WHILE      SCAN WHILE 
* 
      LDA BYTES,I    SCAN UNTIL 
      SFB 
      JMP .TES1      TEST BYTE DETECTED 
.TERM EQU *          TERMINATOR DETECTED
      LDA BUF 
      CMA,INA 
      ADB 0 
      STB IBEG,I     RETURN LAST POSITION 
      CCA            I=-1/.TRUE.
      JMP ISCAN,I 
* 
.TES1 EQU * 
      INB 
.TEST EQU *          TEST BYTE FOUND
      LDA BUF 
      CMA,INA 
      ADB 0 
      STB IBEG,I     RETURN LAST POSITION 
      CLA 
      JMP ISCAN,I    I=0/.FALSE.
* 
* 
WHILE EQU *          SCAN WHILE 
      LDA BYTES,I 
      CLB 
      RRL 8          SPLIT TEST & TERM. 
      ALF,ALF 
      STA TEST
      STB TERM
      LDB BUF 
LOOP  LBT 
      CPA TERM       TERMINATOR ? 
      JMP .TERM      YES
      CPA TEST       TEST BYTE ?
      JMP LOOP       YES . CONTINUE 
      JMP .TEST 
* 
* 
DM1   DEC -1
TERM  NOP 
TEST  NOP 
      END 
                                                                                                                                                                                                                      