| [613] | 1 | VALM40 ;ALB/MJK - Screen Malipulation Utilities (cont.) ;01/31/2001  14:45
 | 
|---|
 | 2 |  ;;1.0;List Manager;**6**;Aug 13, 1993
 | 
|---|
 | 3 | FIND ; -- find text in list
 | 
|---|
 | 4 |  N START,BEG,VALMOUT,VALMHIT,X,Y,DIR,DIRUT
 | 
|---|
 | 5 |  S DIR(0)="F^2:50",DIR("A")="Search for" S:$D(VALMFIND) DIR("B")=VALMFIND
 | 
|---|
 | 6 |  S DIR("?")="Enter from two to fifty characters."
 | 
|---|
 | 7 |  D ^DIR I $D(DIRUT) D FINISH^VALM4 Q
 | 
|---|
 | 8 |  S VALMFIND=Y,(BEG,START)=VALMBG,FINISH=VALMCNT
 | 
|---|
 | 9 |  F  D SEARCH(START,FINISH) D  D:VALMHIT SELECT^VALM10(VALMHIT,0) Q:$D(VALMOUT)
 | 
|---|
 | 10 |  . I 'VALMHIT,BEG=1 D WAIT^VALM1 S VALMOUT="" Q
 | 
|---|
 | 11 |  . I VALMHIT,BEG=1,VALMHIT=VALMCNT D WAIT^VALM1 S VALMOUT="" Q
 | 
|---|
 | 12 |  . I 'VALMHIT!(VALMHIT=VALMCNT),BEG'=1 D  Q
 | 
|---|
 | 13 |  . . I '$$BEG S VALMOUT="" Q
 | 
|---|
 | 14 |  . . S FINISH=BEG-1,(BEG,START)=1
 | 
|---|
 | 15 |  . N DIR,X,Y,DIRUT
 | 
|---|
 | 16 |  . W ! S DIR(0)="Y",DIR("B")="Yes",DIR("A")="Find Next '"_VALMFIND_"'"
 | 
|---|
 | 17 |  . D ^DIR I 'Y S VALMOUT="" Q
 | 
|---|
 | 18 |  . S START=VALMHIT+1
 | 
|---|
 | 19 |  D FINISH^VALM4
 | 
|---|
 | 20 |  Q
 | 
|---|
 | 21 | BEG() ; -- ask if ok to start from top
 | 
|---|
 | 22 |  W !!,"<<< End of list >>>"
 | 
|---|
 | 23 |  N DIR,X,Y,DIRUT
 | 
|---|
 | 24 |  S DIR(0)="Y",DIR("A")="Do you want to start at the beginning of the list",DIR("B")="Yes"
 | 
|---|
 | 25 |  D ^DIR
 | 
|---|
 | 26 |  Q Y
 | 
|---|
 | 27 | SEARCH(START,FINISH) ; -- search to end or first hit
 | 
|---|
 | 28 |  ; input:  START := line to start search on
 | 
|---|
 | 29 |  ;        FINISH := line to end search on
 | 
|---|
 | 30 |  N Y,X,L,CNT
 | 
|---|
 | 31 |  S VALMHIT="",CNT=0
 | 
|---|
 | 32 |  S VALMBCK="" D:VALMCC RESET^VALM4 W !,"...searching for '"_VALMFIND_"'"
 | 
|---|
 | 33 |  F I=START:1:FINISH S CNT=CNT+1 W:'(CNT#100) "." I $$UP^XLFSTR(@VALMAR@(I,0))[$$UP^XLFSTR(VALMFIND) S VALMHIT=I Q
 | 
|---|
 | 34 |  I 'VALMHIT W $C(7),!!,"Text not found." Q
 | 
|---|
 | 35 |  I VALMCC D
 | 
|---|
 | 36 |  . I VALMHIT<VALMBG!(VALMHIT>VALMLST) S VALMBG=VALMHIT D LST^VALM4,PAINT^VALM4
 | 
|---|
 | 37 |  . D UPD(VALMHIT,VALMFIND)
 | 
|---|
 | 38 |  D PGUPD^VALM4
 | 
|---|
 | 39 |  I 'VALMCC S VALMBG=VALMHIT D REFRESH^VALM
 | 
|---|
 | 40 |  Q
 | 
|---|
 | 41 | UPD(LINE,TEXT) ; -- set/unset video attribute on text
 | 
|---|
 | 42 |  ;  input:    LINE := number of line
 | 
|---|
 | 43 |  ;            TEXT := chars to set attribute on
 | 
|---|
 | 44 |  N LEN,POS,FIRST
 | 
|---|
 | 45 |  D SELECT^VALM10(.LINE,1)
 | 
|---|
 | 46 |  I 'VALMCC Q
 | 
|---|
 | 47 |  S Y=@VALMAR@(LINE,0),LEN=$L(TEXT),POS=0,FIRST=""
 | 
|---|
 | 48 |  F  S POS=$F($$UP^XLFSTR(Y),$$UP^XLFSTR(TEXT),POS) Q:'POS  D
 | 
|---|
 | 49 |  . S:'FIRST FIRST=POS-LEN
 | 
|---|
 | 50 |  . D CNTRL^VALM10(.LINE,POS-LEN,.LEN,.IORVON,IORVOFF_IOINHI)
 | 
|---|
 | 51 |  I FIRST D
 | 
|---|
 | 52 |  . I FIRST'>VALM("FIXED") Q
 | 
|---|
 | 53 |  . I FIRST<VALMLFT D LEFT("^^^="_(VALMLFT-FIRST)) Q
 | 
|---|
 | 54 |  . I FIRST'>((VALMWD-VALM("FIXED"))+VALMLFT) Q
 | 
|---|
 | 55 |  . D RIGHT("^^^="_(FIRST-VALMLFT))
 | 
|---|
 | 56 |  D WRITE^VALM10(.LINE)
 | 
|---|
 | 57 |  Q
 | 
|---|
 | 58 | UP ; -- display last screen (UP)
 | 
|---|
 | 59 |  D START^VALM4
 | 
|---|
 | 60 |  N Y S Y=VALMBG-1 I Y<1 W $C(7) D FINISH^VALM4 Q
 | 
|---|
 | 61 |  S VALMBG=Y D LST^VALM4
 | 
|---|
 | 62 |  I VALMCC S DY=VALM("TM")-1 D SCROLL^VALM4,IOIL^VALM4(0,.DY),WRITE^VALM4(VALMBG,0,1,.DY),PLUS^VALM4,RESET^VALM4
 | 
|---|
 | 63 |  D PGUPD^VALM4
 | 
|---|
 | 64 |  D FINISH^VALM4
 | 
|---|
 | 65 |  Q
 | 
|---|
 | 66 | DOWN ; -- display next line (DN)
 | 
|---|
 | 67 |  D START^VALM4
 | 
|---|
 | 68 |  N Y S Y=VALMLST+1 I Y>VALMCNT W $C(7) D FINISH^VALM4 Q
 | 
|---|
 | 69 |  S VALMBG=VALMBG+1,VALMLST=Y
 | 
|---|
 | 70 |  I VALMCC S DY=VALM("BM")-1 D SCROLL^VALM4,IOXY^VALM4(0,.DY),WRITE^VALM4(VALMLST,1,1,.DY),PLUS^VALM4,RESET^VALM4
 | 
|---|
 | 71 |  D PGUPD^VALM4
 | 
|---|
 | 72 |  D FINISH^VALM4
 | 
|---|
 | 73 |  Q
 | 
|---|
 | 74 | RIGHT(VALMNOD) ; -- move view to right
 | 
|---|
 | 75 |  D START^VALM4
 | 
|---|
 | 76 |  N MOVE,RM
 | 
|---|
 | 77 |  S MOVE=$P($P(VALMNOD,U,4),"=",3),RM=VALM("RM")-VALMWD+VALM("FIXED")
 | 
|---|
 | 78 |  I VALMLFT=RM W $C(7) D FINISH^VALM4 Q
 | 
|---|
 | 79 |  I MOVE?1">".E D
 | 
|---|
 | 80 |  . S VALMLFT=RM
 | 
|---|
 | 81 |  E  D
 | 
|---|
 | 82 |  . S MOVE=$S(MOVE:+MOVE,1:VALMWD-VALM("FIXED"))
 | 
|---|
 | 83 |  . I (VALMLFT+MOVE)>RM S VALMLFT=RM Q
 | 
|---|
 | 84 |  . S VALMLFT=VALMLFT+MOVE
 | 
|---|
 | 85 |  I VALMCC S:VALMWD'<$L($G(VALMHDR(VALM("TM")-3))) VALMBCK="P" D REFRESH^VALM
 | 
|---|
 | 86 |  D FINISH^VALM4
 | 
|---|
 | 87 |  Q
 | 
|---|
 | 88 | LEFT(VALMNOD) ; -- move view to left
 | 
|---|
 | 89 |  D START^VALM4
 | 
|---|
 | 90 |  N MOVE,LM
 | 
|---|
 | 91 |  S MOVE=$P($P(VALMNOD,U,4),"=",3),LM=VALM("FIXED")+1
 | 
|---|
 | 92 |  I VALMLFT=LM W $C(7) D FINISH^VALM4 Q
 | 
|---|
 | 93 |  I MOVE?1"<".E D
 | 
|---|
 | 94 |  . S VALMLFT=LM
 | 
|---|
 | 95 |  E  D
 | 
|---|
 | 96 |  . S MOVE=$S(MOVE:+MOVE,1:VALMWD-VALM("FIXED"))
 | 
|---|
 | 97 |  . S:(VALMLFT-MOVE)<LM MOVE=VALMLFT-VALM("FIXED")-1
 | 
|---|
 | 98 |  . S VALMLFT=VALMLFT-MOVE
 | 
|---|
 | 99 |  I VALMCC S:VALMWD'<$L($G(VALMHDR(VALM("TM")-3))) VALMBCK="P" D REFRESH^VALM
 | 
|---|
 | 100 |  D FINISH^VALM4
 | 
|---|
 | 101 |  Q
 | 
|---|
 | 102 | GOTO ; -- go to page #
 | 
|---|
 | 103 |  N Y,PAGE,LINE
 | 
|---|
 | 104 |  S PAGE=$$PAGE^VALM4(VALMCNT,VALM("LINES"))
 | 
|---|
 | 105 |  I PAGE=1 S VALMSG="This list only contains 1 page." G GOTOQ
 | 
|---|
 | 106 |  S Y=+$P($P(XQORNOD(0),U,4),"=",3)
 | 
|---|
 | 107 |  I Y D  I $G(VALMSG)]"" G GOTOQ
 | 
|---|
 | 108 |  . I Y>PAGE S VALMSG="Too large. Page #"_Y_" does not exist." Q
 | 
|---|
 | 109 |  . I Y<1 S VALMSG="Negative page numbers do not exist." Q
 | 
|---|
 | 110 |  . S PAGE=Y
 | 
|---|
 | 111 |  I 'Y D
 | 
|---|
 | 112 |  . N DIR,X,Y,DIRUT
 | 
|---|
 | 113 |  . S DIR(0)="NA^1:"_PAGE,DIR("A")="Go to Page (1-"_PAGE_"): "
 | 
|---|
 | 114 |  . W ! D ^DIR S PAGE=+Y
 | 
|---|
 | 115 |  I PAGE D
 | 
|---|
 | 116 |  . S LINE=((PAGE-1)*VALM("LINES"))+1
 | 
|---|
 | 117 |  . I LINE=VALMBG S VALMSG="Your selection is the current screen." Q
 | 
|---|
 | 118 |  . I LINE'=VALMBG S VALMBG=LINE D:VALMCC LST^VALM4,PAINT^VALM4 D PGUPD^VALM4
 | 
|---|
 | 119 | GOTOQ I $G(VALMSG)]"" S VALMSG=$C(7)_VALMSG
 | 
|---|
 | 120 |  D FINISH^VALM4
 | 
|---|
 | 121 |  Q
 | 
|---|