view lib/alib/ptsearch.a @ 2765:0bd16cca86b7

Updated rules.mak for all the os9 format's to format the entire disk. People were having some issues with the disk images not being formatted to their full capacity and preventing some functions from working.
author drencor-xeen
date Thu, 17 Jan 2013 11:03:26 -0600
parents 7d70b7e1cb21
children aaba193af04f
line wrap: on
line source

***************************************
 
* Pattern Search

* OTHER MODULES REQUIRED: COMPARE

* ENTRY: X=start of memory to search
*        U=end of memory
*        Y=start of pattern
*        D=size of pattern
*        CASEMTCH (a global variable in COMPARE) =0 if A<>a, -1 if A=a

* EXIT: X=address of match if found, unchanged if no match
*       CC zero set if match, clear for no-match
*       A,B,U,Y preserved


 nam Pattern Search
 ttl Assembler Library Module


 psect PTSEARCH,0,0,0,0,0

* set up stack frame for variables

 csect

pattend rmb 2 end of pattern in memory
memend  rmb 2 realend-pattern size
patsize rmb 2 saved <D>
memstrt rmb 2 saved <X>
patstrt rmb 2 saved <Y>
realend rmb 2 saved <U>

 endsect

PTSEARCH:
 pshs d,x,y,u
 leas -4,s room for temps
 tfr u,d end of memory to check
 subd patsize,s end-pattern size
 std memend,s where we stop looking
 ldd patstrt,s
 addd patsize,s
 std pattend,s

* loop here looking for a match of the first characters

inmatch
 cmpx memend,s raeched end of memory
 bhs nomatch
 lda ,x+ get char from memory
 ldb ,y compare to pattern
 lbsr COMPARE compare them
 bne inmatch keep looking for inital match

* see if rest of pattern matches

more
 tfr x,u save pointer
 leay 1,y already matched that one

more1
 cmpy pattend,s all chars matched, go home happy
 beq match
 lda ,x+
 ldb ,y+
 lbsr COMPARE
 beq more1 keep matching
 tfr u,x match fails, backup and do more
 ldy patstrt,s start of pattern
 bra inmatch


nomatch
 lda #1 clear zero
 bra exit

match
 leau -1,u start of match
 stu memstrt,s where pattern starts
 clra set zero flag=found

exit
 leas 4,s clean stack
 puls d,x,y,u,pc

 endsect