| [613] | 1 | SDUL40 ;ALB/MJK - Screen Malipulation Utilities (cont.) ; 12/1/91
 | 
|---|
 | 2 |  ;;5.3;Scheduling;;Aug 13, 1993
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 | FIND ; -- find text in list
 | 
|---|
 | 5 |  N START,BEG,SDQUIT,SDULHIT
 | 
|---|
 | 6 |  S DIR(0)="F^2:50",DIR("A")="Search for" S:$D(SDULFIND) DIR("B")=SDULFIND
 | 
|---|
 | 7 |  S DIR("?")="Enter from two to fifty characters."
 | 
|---|
 | 8 |  D ^DIR K DIR I "^"[Y G FINDQ
 | 
|---|
 | 9 |  S SDULFIND=Y,(BEG,START)=SDULBG,FINISH=SDULCNT
 | 
|---|
 | 10 |  F  D SEARCH(START,FINISH) D  D:SDULHIT UPD(SDULHIT,SDULFIND,"") Q:$D(SDQUIT)
 | 
|---|
 | 11 |  .I 'SDULHIT,BEG=1 D PAUSE^SDUL1 S SDQUIT="" Q
 | 
|---|
 | 12 |  .I SDULHIT,BEG=1,SDULHIT=SDULCNT D PAUSE^SDUL1 S SDQUIT="" Q
 | 
|---|
 | 13 |  .I 'SDULHIT!(SDULHIT=SDULCNT),BEG'=1,$$BEG S FINISH=BEG-1,(BEG,START)=1 Q
 | 
|---|
 | 14 |  .I 'SDULHIT!(SDULHIT=SDULCNT),BEG'=1 S SDQUIT="" Q
 | 
|---|
 | 15 |  .W ! S DIR(0)="Y",DIR("B")="Yes",DIR("A")="Find Next '"_SDULFIND_"'" D ^DIR K DIR
 | 
|---|
 | 16 |  .I Y S START=SDULHIT+1 Q
 | 
|---|
 | 17 |  .S SDQUIT=""
 | 
|---|
 | 18 | FINDQ D FINISH^SDUL4 Q
 | 
|---|
 | 19 |  ;
 | 
|---|
 | 20 | BEG() ; -- ask if ok to start from top
 | 
|---|
 | 21 |  W !!,"<<< End of list >>>"
 | 
|---|
 | 22 |  S DIR(0)="Y",DIR("A")="Do you want to start at the beginning of the list",DIR("B")="Yes"
 | 
|---|
 | 23 |  D ^DIR K DIR
 | 
|---|
 | 24 |  Q Y
 | 
|---|
 | 25 |  ;
 | 
|---|
 | 26 | SEARCH(START,FINISH) ; -- search to end or first hit
 | 
|---|
 | 27 |  ; input:  START := line to start search on
 | 
|---|
 | 28 |  ;        FINISH := line to end search on
 | 
|---|
 | 29 |  ;
 | 
|---|
 | 30 |  N Y,X,L,CNT
 | 
|---|
 | 31 |  S SDULHIT="",CNT=0
 | 
|---|
 | 32 |  S SDULBCK="" D:SDULCC RESET^SDUL4 W !,"...searching for '"_SDULFIND_"'"
 | 
|---|
 | 33 |  F I=START:1:FINISH S CNT=CNT+1 W:'(CNT#100) "." I $$UPPER^SDUL1(@SDULAR@(I,0))[$$UPPER^SDUL1(SDULFIND) S SDULHIT=I Q
 | 
|---|
 | 34 |  I 'SDULHIT W *7,!!,"Text not found." G SEARCHQ
 | 
|---|
 | 35 |  I SDULCC D
 | 
|---|
 | 36 |  .I SDULHIT<SDULBG!(SDULHIT>SDULST) S SDULBG=SDULHIT D LST^SDUL4,PAINT^SDUL4
 | 
|---|
 | 37 |  .D UPD(SDULHIT,SDULFIND,"REV")
 | 
|---|
 | 38 |  D PGUPD^SDUL4
 | 
|---|
 | 39 |  I 'SDULCC S SDULBG=SDULHIT D REFRESH^SDUL
 | 
|---|
 | 40 | SEARCHQ Q
 | 
|---|
 | 41 |  ;
 | 
|---|
 | 42 | UPD(LINE,TEXT,ATTR) ; -- set/unset video attribute on text
 | 
|---|
 | 43 |  ;  input:    LINE := number of line
 | 
|---|
 | 44 |  ;            TEXT := chars to set attribute on
 | 
|---|
 | 45 |  ;            ATTR := attribute to use
 | 
|---|
 | 46 |  ;
 | 
|---|
 | 47 |  N ATTRON,ATTROFF,Y,LEN,POS
 | 
|---|
 | 48 |  I 'SDULCC G UPDQ
 | 
|---|
 | 49 |  S Y=@SDULAR@(LINE,0),LEN=$L(TEXT),POS=0,(ATTRON,ATTROFF)=""
 | 
|---|
 | 50 |  I ATTR="REV" S ATTRON=IORVON,ATTROFF=IORVOFF
 | 
|---|
 | 51 |  F  S POS=$F($$UPPER^SDUL1(Y),$$UPPER^SDUL1(TEXT),POS) Q:'POS  D INSTR^SDUL1(ATTRON_$E(Y,POS-LEN,POS-1)_ATTROFF,POS-LEN,SDUL("TM")+(LINE-SDULBG),LEN,0)
 | 
|---|
 | 52 | UPDQ Q
 | 
|---|
 | 53 |  ;
 | 
|---|