File:  [Coherent Logic Development] / freem / contrib / %ursea.m
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Sun Jan 19 02:04:04 2025 UTC (2 months, 1 week ago) by snw
Branches: MAIN, CoherentLogicDevelopment
CVS tags: v0-62-3, v0-62-2, v0-62-1, v0-62-0, start, HEAD
FreeM

%ursea ; FreeM Routine Search - version 0.5.0.1
 ; Jon Diamond - 1993-03-31
 ; 
 n error,device,search,replace,cnt
 s error=$$init^%uxxxx,device=""
 ; 
 s error=$$writen^%uxxxx($t(+1)_"  "_$$^%uxdat) 
 k @%uwork
%rsel s error=$$rsel^%urxxx(%uwork) q:error<0
 i $o(@%uwork@(""))="" s error=$$writep^%uxxxx("No Routines selected") q
 ; 
%device i device'="" s error=$$close^%ufxxx(device) i error<0 g %exit1
 s error=$$select^%ufxxx(.device)
 i error<0 g %rsel
 ; 
 k search,replace
 s cnt=0
%search s error=$$readn^%uxxxx("Search for ",.search)
 i error<0 g %device
 s error=$$readn^%uxxxx("Replace with ",.replace) 
 i error<0 g %search
 ; 
 s cnt=cnt+1,search(cnt)=search i replace'="" s replace(cnt)=replace
 g %search
 ; 
%go s error=$$go(device,%uwork,.search,.replace) i error<0 s a=$$error^%uxxxx(error) g %exit
 s error=$$writep^%uxxxx("Routines modified - "_+error)
 s error=$$writep^%uxxxx("Finished")
 ; 
%exit s error=$$close^%ufxxx(device) i error<0 ; ??? if error
%exit1 k @%uwork
 q
 ; 
 ; Executable entry point
 ; Needs modifying to allow a selection mask (major changes!)
go(device,select,search,replace)
 n a,c,cnt,error,f,mod,new,old,r,s
 s error=$$write^%ufxxx(device,"Routine Search/Replace "_$$^%uxdat()) q:error<0
 f r=1:1 q:'$d(search(r))  s error=$$write^%ufxxx(device,search(r)) q:error<0  s error=$$write^%ufxxx(device,"  >>> "_$g(replace(r))) q:error<0
 s a=99999,cnt=0
 f  s a=$o(@select@(a)) q:a=""  d  q:error<0
 . s error=$$write^%ufxxx(device,a) q:error<0
 . s mod=0 k new
 . f c=1:1 s (new,old)=$t(@("+"_c_"^"_a)) q:new=""  d  q:error<0
 . . f r=1:1 q:'$d(search(r))  s s=search(r) i new[s d
 . . . s f=$f(new,s),new=$e(new,1,f-$l(s)-1)_$g(replace(r))_$e(new,f,$l(new))
 . . s new(c)=new
 . . i new=old q
 . . s error=$$write^%ufxxx(device,c_"^"_a_$j("",30-$l(c)-$l(a))_" "_old) q:error<0
 . . i $o(replace("")) s error=$$write^%ufxxx(device,$j("",31)_new) q:error<0
 . . s error=$$write^%ufxxx(device,"")
 . . s mod=1,new(c)=new
 . q:error<0
 . i mod d
 . . s error=$$save^%urxxx(a,.new)
 . . i error<0 s error=$$write^%uxxxx(device,"*** Error in saving routine ***") q
 . . s error=$$write^%ufxxx(device,""),cnt=cnt+1 q:error<0
 i error<0 q error
 q cnt_",go^%ursea"
 ; 
 ; 
 ; Alternative entry point with Open/Close included
search(device,select,search,replace)
 n error
 s error=$$open^%ufxxx(device) q:error<0
 s error=$$go(device,select,.search,.replace) q:error<0
 s error=$$close^%ufxxx(device) q:error<0
 q "0,search^%ursea"


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>