SEARCH  SYS
       SEARCH  SYSSYM

       CR=15

       LIMIT=D5

       .OFINI
       .OFDEF  DISK,D.DDB
       .OFSIZ  MEMSIZ

START:  PHDR    -1,0,PH$REE!PH$REU
       GETIMP  MEMSIZ,A5

HEADER: CRLF
       TYPECR  This program searches every block on a disk for a text pattern.
       CRLF

GETDSK: TYPESP  What disk do you want to examine?
       KBD     EXIT
       FSPEC   DISK(A5)
       INIT    DISK(A5)
       ORB     #D$ERC,DISK+D.FLG(A5)
       CRLF

GETTXT: TYPESP  What text pattern are you looking for?
       KBD     EXIT
       CRLF

GO:     CLR     DISK+D.REC(A5)
       MOV     DISK+D.DVR(A5),A0
       MOV     24(A0),LIMIT
       TYPESP  Searching
       MOV     LIMIT,D1
       DCVT    0,OT$TRM!OT$TSP
       TYPECR  blocks
       CRLF

BLOCK:  CTRLC   EXIT
       READ    DISK(A5)

SEARCH: MOV     #511.,D0
       MOV     DISK+D.BUF(A5),A3
       MOV     A2,A4
10$:    CALL    MATCH
       BEQ     LIST
       INC     A3
       SOB     D0,10$
       BR      NEXT

LIST:   MOV     DISK+D.REC(A5),D1
       OCVT    7,OT$TRM!OT$TSP!OT$ZER

NEXT:   INC     DISK+D.REC(A5)
       CMM     DISK+D.REC(A5),LIMIT
       JLO     BLOCK

EXIT:   CRLF
       EXIT

MATCH:  MOV     A3,A0                   ;A0 points to section of data buffer
       MOV     A4,A1                   ;A1 points to search text
10$:    MOVB    (A1)+,D1
       CMPB    D1,#CR
       BNE     20$
       LCC     #4
       RTN
20$:    CMMB    D1,(A0)+
       BEQ     10$
       LCC     #0
       RTN

       END