- SDUL40 ;ALB/MJK - Screen Malipulation Utilities (cont.) ; 12/1/91
- ;;5.3;Scheduling;**1015**;Aug 13, 1993;Build 21
- ;
- FIND ; -- find text in list
- N START,BEG,SDQUIT,SDULHIT
- S DIR(0)="F^2:50",DIR("A")="Search for" S:$D(SDULFIND) DIR("B")=SDULFIND
- S DIR("?")="Enter from two to fifty characters."
- D ^DIR K DIR I "^"[Y G FINDQ
- S SDULFIND=Y,(BEG,START)=SDULBG,FINISH=SDULCNT
- F D SEARCH(START,FINISH) D D:SDULHIT UPD(SDULHIT,SDULFIND,"") Q:$D(SDQUIT)
- .I 'SDULHIT,BEG=1 D PAUSE^SDUL1 S SDQUIT="" Q
- .I SDULHIT,BEG=1,SDULHIT=SDULCNT D PAUSE^SDUL1 S SDQUIT="" Q
- .I 'SDULHIT!(SDULHIT=SDULCNT),BEG'=1,$$BEG S FINISH=BEG-1,(BEG,START)=1 Q
- .I 'SDULHIT!(SDULHIT=SDULCNT),BEG'=1 S SDQUIT="" Q
- .W ! S DIR(0)="Y",DIR("B")="Yes",DIR("A")="Find Next '"_SDULFIND_"'" D ^DIR K DIR
- .I Y S START=SDULHIT+1 Q
- .S SDQUIT=""
- FINDQ D FINISH^SDUL4 Q
- ;
- BEG() ; -- ask if ok to start from top
- W !!,"<<< End of list >>>"
- S DIR(0)="Y",DIR("A")="Do you want to start at the beginning of the list",DIR("B")="Yes"
- D ^DIR K DIR
- Q Y
- ;
- SEARCH(START,FINISH) ; -- search to end or first hit
- ; input: START := line to start search on
- ; FINISH := line to end search on
- ;
- N Y,X,L,CNT
- S SDULHIT="",CNT=0
- S SDULBCK="" D:SDULCC RESET^SDUL4 W !,"...searching for '"_SDULFIND_"'"
- 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
- I 'SDULHIT W *7,!!,"Text not found." G SEARCHQ
- I SDULCC D
- .I SDULHIT<SDULBG!(SDULHIT>SDULST) S SDULBG=SDULHIT D LST^SDUL4,PAINT^SDUL4
- .D UPD(SDULHIT,SDULFIND,"REV")
- D PGUPD^SDUL4
- I 'SDULCC S SDULBG=SDULHIT D REFRESH^SDUL
- SEARCHQ Q
- ;
- UPD(LINE,TEXT,ATTR) ; -- set/unset video attribute on text
- ; input: LINE := number of line
- ; TEXT := chars to set attribute on
- ; ATTR := attribute to use
- ;
- N ATTRON,ATTROFF,Y,LEN,POS
- I 'SDULCC G UPDQ
- S Y=@SDULAR@(LINE,0),LEN=$L(TEXT),POS=0,(ATTRON,ATTROFF)=""
- I ATTR="REV" S ATTRON=IORVON,ATTROFF=IORVOFF
- 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)
- UPDQ Q
- ;
- SDUL40 ;ALB/MJK - Screen Malipulation Utilities (cont.) ; 12/1/91
- +1 ;;5.3;Scheduling;**1015**;Aug 13, 1993;Build 21
- +2 ;
- FIND ; -- find text in list
- +1 NEW START,BEG,SDQUIT,SDULHIT
- +2 SET DIR(0)="F^2:50"
- SET DIR("A")="Search for"
- IF $DATA(SDULFIND)
- SET DIR("B")=SDULFIND
- +3 SET DIR("?")="Enter from two to fifty characters."
- +4 DO ^DIR
- KILL DIR
- IF "^"[Y
- GOTO FINDQ
- +5 SET SDULFIND=Y
- SET (BEG,START)=SDULBG
- SET FINISH=SDULCNT
- +6 FOR
- DO SEARCH(START,FINISH)
- Begin DoDot:1
- +7 IF 'SDULHIT
- IF BEG=1
- DO PAUSE^SDUL1
- SET SDQUIT=""
- QUIT
- +8 IF SDULHIT
- IF BEG=1
- IF SDULHIT=SDULCNT
- DO PAUSE^SDUL1
- SET SDQUIT=""
- QUIT
- +9 IF 'SDULHIT!(SDULHIT=SDULCNT)
- IF BEG'=1
- IF $$BEG
- SET FINISH=BEG-1
- SET (BEG,START)=1
- QUIT
- +10 IF 'SDULHIT!(SDULHIT=SDULCNT)
- IF BEG'=1
- SET SDQUIT=""
- QUIT
- +11 WRITE !
- SET DIR(0)="Y"
- SET DIR("B")="Yes"
- SET DIR("A")="Find Next '"_SDULFIND_"'"
- DO ^DIR
- KILL DIR
- +12 IF Y
- SET START=SDULHIT+1
- QUIT
- +13 SET SDQUIT=""
- End DoDot:1
- IF SDULHIT
- DO UPD(SDULHIT,SDULFIND,"")
- IF $DATA(SDQUIT)
- QUIT
- FINDQ DO FINISH^SDUL4
- QUIT
- +1 ;
- BEG() ; -- ask if ok to start from top
- +1 WRITE !!,"<<< End of list >>>"
- +2 SET DIR(0)="Y"
- SET DIR("A")="Do you want to start at the beginning of the list"
- SET DIR("B")="Yes"
- +3 DO ^DIR
- KILL DIR
- +4 QUIT Y
- +5 ;
- SEARCH(START,FINISH) ; -- search to end or first hit
- +1 ; input: START := line to start search on
- +2 ; FINISH := line to end search on
- +3 ;
- +4 NEW Y,X,L,CNT
- +5 SET SDULHIT=""
- SET CNT=0
- +6 SET SDULBCK=""
- IF SDULCC
- DO RESET^SDUL4
- WRITE !,"...searching for '"_SDULFIND_"'"
- +7 FOR I=START:1:FINISH
- SET CNT=CNT+1
- IF '(CNT#100)
- WRITE "."
- IF $$UPPER^SDUL1(@SDULAR@(I,0))[$$UPPER^SDUL1(SDULFIND)
- SET SDULHIT=I
- QUIT
- +8 IF 'SDULHIT
- WRITE *7,!!,"Text not found."
- GOTO SEARCHQ
- +9 IF SDULCC
- Begin DoDot:1
- +10 IF SDULHIT<SDULBG!(SDULHIT>SDULST)
- SET SDULBG=SDULHIT
- DO LST^SDUL4
- DO PAINT^SDUL4
- +11 DO UPD(SDULHIT,SDULFIND,"REV")
- End DoDot:1
- +12 DO PGUPD^SDUL4
- +13 IF 'SDULCC
- SET SDULBG=SDULHIT
- DO REFRESH^SDUL
- SEARCHQ QUIT
- +1 ;
- UPD(LINE,TEXT,ATTR) ; -- set/unset video attribute on text
- +1 ; input: LINE := number of line
- +2 ; TEXT := chars to set attribute on
- +3 ; ATTR := attribute to use
- +4 ;
- +5 NEW ATTRON,ATTROFF,Y,LEN,POS
- +6 IF 'SDULCC
- GOTO UPDQ
- +7 SET Y=@SDULAR@(LINE,0)
- SET LEN=$LENGTH(TEXT)
- SET POS=0
- SET (ATTRON,ATTROFF)=""
- +8 IF ATTR="REV"
- SET ATTRON=IORVON
- SET ATTROFF=IORVOFF
- +9 FOR
- SET POS=$FIND($$UPPER^SDUL1(Y),$$UPPER^SDUL1(TEXT),POS)
- IF 'POS
- QUIT
- DO INSTR^SDUL1(ATTRON_$EXTRACT(Y,POS-LEN,POS-1)_ATTROFF,POS-LEN,SDUL("TM")+(LINE-SDULBG),LEN,0)
- UPDQ QUIT
- +1 ;