| 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 | 
|---|