; ******************************************************* ; * * ; * THIS SOFTWARE WAS DEVELOPED WITH SUPPORT * ; * FROM THE NATIONAL INSTITUTES OF HEALTH: * ; * NIH CA06927 * ; * NIH CA22780 * ; * * ; * DIRECT INQUIRIES TO: * ; * COMPUTER CENTER * ; * THE INSTITUTE FOR CANCER RESEARCH * ; * 7701 BURHOLME AVENUE * ; * PHILADELPHIA, PENNSYLVANIA 19111 * ; * * ; * NO WARRANTY OR REPRESENTATION, EXPRESS OR * ; * IMPLIED, IS MADE WITH RESPECT TO THE * ; * CORRECTNESS, COMPLETENESS, OR USEFULNESS * ; * OF THIS SOFTWARE, NOR THAT USE OF THIS * ; * SOFTWARE MIGHT NOT INFRINGE PRIVATELY * ; * OWNED RIGHTS. * ; * * ; * NO LIABILITY IS ASSUMED WITH RESPECT TO * ; * THE USE OF, OR FOR DAMAGES RESULTING FROM * ; * THE USE OF THIS SOFTWARE * ; * * ; ******************************************************* ; * * ; * THIS SOFTWARE WAS DESIGNED FOR USE ON A * ; * PDP-11/70 OPERATING UNDER IAS V3.0 USING * ; * THE IAS PDP-11 MACRO ASSEMBLER. * ; * * ; ******************************************************* ; .TITLE SEARCH FAST MACRO VERSION OF SEARCH ; ; RATFOR VERSION BY WILLIAM WOOD ; RECODED IN MACRO BY BOB STODOLA ; .IDENT /ICR001/ .PSECT $MACOD,RW,I,LCL,CON ; ; # search - find a pattern in a line ; integer function search(text, n, pattrn, m, shftab) ; byte text(1), pattrn(1), shftab(-128:127) ; integer n, m, j, i ; ; search = 0 ; if (m ~= 0) { ; j = m ; while (j <= n) { ; do i = m,1,-1 ; if (text(j-m+i) ~= pattrn(i)) { ; j = j + shftab(text(j)) ; next 2 ; } ; search = j-m+1 ; return ; } ; } ; return ; end ; SEARCH:: MOV 2(R5),R3 MOV R3,R4 ADD @4(R5),R4 MOV @10(R5),R0 BLE 50$ ADD R0,R3 MOV R5,-(SP) MOV 12(R5),-(SP) MOV 6(R5),R5 10$: CMP R3,R4 BHI 40$ MOV R5,R1 ADD R0,R1 MOV R3,R2 20$: CMPB -(R1),-(R2) BNE 30$ CMP R1,R5 BHI 20$ MOV R2,R0 TST (SP)+ MOV (SP)+,R5 SUB 2(R5),R0 INC R0 RETURN 30$: MOVB -1(R3),R2 ADD (SP),R2 MOVB 200(R2),R2 ADD R2,R3 BR 10$ 40$: ADD #4,SP 50$: CLR R0 RETURN .END