- DDWC ;SFISC/MKO-CHANGE (REPLACE) ;3:36 PM 5 Jul 1996
- ;;22.0;VA FileMan;;Mar 30, 1999
- ;Per VHA Directive 10-93-142, this routine should not be modified.
- CHG ;Change
- N DDWOPT
- D SETUP^DDWC1
- F D PROC Q:DDWOPT=-1
- D RESTORE^DDWC1
- K DDWCHG(1)
- Q
- ;
- PROC ;Main procedure
- N DDWCOD,DDWT
- ;
- D:$D(DDWMARK) UNMARK^DDW7
- D EN^DIR0(IOTM+DDWMR,14,30,"",$G(DDWFIND),100,"","","AKTW",.DDWT,.DDWCOD)
- I DDWT=""!($P(DDWCOD,U)="TO") S DDWOPT=-1 Q
- S DDWFIND=DDWT,DDWT=$$UC(DDWT)
- ;
- K DDWCHG(1)
- D EN^DIR0(IOTM+DDWMR+1,14,30,"",$G(DDWCHG),100,"","","AKTW",.DDWCHG,.DDWCOD)
- I $P(DDWCOD,U)="TO" S DDWOPT=-1 Q
- S:DDWCHG?1L.E DDWCHG(1)=$$UC($E(DDWCHG))_$E(DDWCHG,2,999)
- ;
- F D OPT Q:DDWOPT]""
- Q
- ;
- OPT ;Prompt for and process option
- W $P(DDGLVID,DDGLDEL,6)
- F D Q:DDWOPT]""
- . D CUP(DDWMR+4,15) W " "_$C(8)
- . R DDWOPT#1:DTIME E S DDWOPT="Q" Q
- . I DDWOPT=U S DDWOPT="Q"
- . I DDWOPT="" S DDWOPT="E" Q
- . I DDWOPT="?" S DDWOPT="H" Q
- . S DDWOPT=$$UC(DDWOPT)
- . I "^F^R^A^Q^"'[(U_DDWOPT_U) W $C(7) S DDWOPT=""
- D CUP(DDWMR+4,15) W $P(DDGLVID,DDGLDEL,10)_" "
- D @DDWOPT
- Q
- ;
- F ;Find next
- D FINDT^DDWF(DDWFIND)
- S DDWOPT=""
- Q
- ;
- R ;Replace
- N DDWE
- I '$D(DDWMARK) D CERR Q
- D RS(.DDWE) Q:$G(DDWE)
- D F
- Q
- ;
- RS(DDWE) ;Change selected text
- N DDWDIF
- S DDWDIF=$L(DDWCHG)-$P(DDWMARK,U,4)+$P(DDWMARK,U,2)-1
- I $L(DDWN)+DDWDIF>245 D Q
- . S DDWE=1,DDWOPT=""
- . D MSG($C(7)_"Unable to change text. Resultant line is too long.")
- ;
- S DDWE=0,DDWED=1
- S $E(DDWN,$P(DDWMARK,U,2),$P(DDWMARK,U,4))=$S($E(DDWN,$P(DDWMARK,U,2))?1U:$G(DDWCHG(1),DDWCHG),1:DDWCHG)
- S DDWL(DDWRW)=DDWN
- D CUP(DDWRW,1) W $P(DDGLCLR,DDGLDEL)_$E(DDWN,1+DDWOFS,IOM+DDWOFS)
- K DDWMARK D IND^DDW7()
- D POS(DDWRW,DDWC+DDWDIF,"R")
- Q
- ;
- A ;Change all
- N DDWE,DDWF,DDWI,DDWND,DDWX
- D MSG^DDW("Changing text ...")
- I $D(DDWMARK) D RS(.DDWE) G:$G(DDWE) AEND
- ;
- S DDWX=$F($$UC(DDWL(DDWRW)),DDWT,DDWC)
- I DDWX D
- . S DDWL(DDWRW)=$$REP(DDWL(DDWRW),DDWFIND,.DDWCHG,DDWX,.DDWE),DDWF=1
- . S:$G(DDWE) DDWE=DDWRW+DDWA_U_DDWE
- ;
- I '$G(DDWE) F DDWI=DDWRW+1:1:DDWMR D Q:$G(DDWE)
- . S DDWX=$F($$UC(DDWL(DDWI)),DDWT)
- . S:DDWX DDWL(DDWI)=$$REP(DDWL(DDWI),DDWFIND,.DDWCHG,DDWX,.DDWE),DDWF=1
- . S:$G(DDWE) DDWE=DDWI+DDWA_U_DDWE
- ;
- I '$G(DDWE) F DDWI=DDWSTB:-1:1 D Q:$G(DDWE)
- . S DDWND=^TMP("DDW1",$J,DDWI)
- . S DDWX=$F($$UC(DDWND),DDWT)
- . S:DDWX ^TMP("DDW1",$J,DDWI)=$$REP(DDWND,DDWFIND,.DDWCHG,DDWX,.DDWE),DDWF=1
- . S:$G(DDWE) DDWE=DDWA+DDWMR+DDWSTB-DDWI+1_U_DDWE
- ;
- I $G(DDWF) D
- . D:$G(DDWE) MSG^DDW($C(7)_"Unable to complete replacement. A resultant line is too long.") H 2
- . F DDWI=1:1:$$MIN(DDWMR,DDWCNT-DDWA) D
- .. D CUP(DDWI,1)
- .. W $P(DDGLCLR,DDGLDEL)_$E(DDWL(DDWI),1+DDWOFS,IOM+DDWOFS)
- . D:$G(DDWE) LINE^DDWG(+DDWE,1),POS(DDWRW,$P(DDWE,U,2),"R")
- E D MSG^DDW("Text not found.") H 2 D FLUSH
- ;
- AEND D MSG^DDW(),CUP(DDWRW,DDWC)
- S DDWOPT=$S($G(DDWE):-1,1:"")
- Q
- ;
- REP(DDWND,DDWFIND,DDWCHG,DDWX,DDWE) ;String replacement of DDWND
- N DDWDIF,DDWFST,DDWSV
- S DDWDIF=$L(DDWCHG)-$L(DDWFIND)
- F D Q:'DDWX!$G(DDWE)
- . S DDWSV=DDWND,DDWFST=DDWX-$L(DDWFIND)
- . I $L(DDWND)+DDWDIF>245 S DDWE=DDWFST Q
- . S $E(DDWND,DDWFST,DDWX-1)=$S($E(DDWND,DDWFST)?1U:$G(DDWCHG(1),DDWCHG),1:DDWCHG)
- . S DDWX=DDWX+DDWDIF
- . S DDWX=$F($$UC(DDWND),DDWFIND,DDWX)
- Q $S($G(DDWE):DDWSV,1:DDWND)
- ;
- E ;Edit Find
- D FLUSH
- Q
- ;
- Q ;Quit option
- D FLUSH
- S DDWOPT=-1
- Q
- ;
- H ;Help
- D MSG("Press the highlighted letter of one of the Options.")
- S DDWOPT=""
- Q
- ;
- CERR ;The Change options are disabled
- D MSG($C(7)_"You must Find the text before you can Change it.")
- S DDWOPT=""
- Q
- ;
- MSG(DDWX) ;
- D CUP(DDWMR+5,1) W $P(DDGLCLR,DDGLDEL)_$G(DDWX) H 2
- D CUP(DDWMR+5,1) W $P(DDGLCLR,DDGLDEL)
- D FLUSH
- Q
- ;
- FLUSH ;Flush read buffer
- N DDWX F R *DDWX:0 E Q
- Q
- ;
- UC(X) ;Return uppercase of X
- Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- ;
- MIN(X,Y) ;
- Q $S(X<Y:X,1:Y)
- ;
- CUP(Y,X) ;Pos cursor
- S DY=IOTM+Y-2,DX=X-1 X IOXY
- Q
- ;
- POS(R,C,F) ;Pos cursor based on char pos C
- N DDWX
- S:$G(C)="E" C=$L($G(DDWL(R)))+1
- S:$G(F)["N" DDWN=$G(DDWL(R))
- S:$G(F)["R" DDWRW=R,DDWC=C
- ;
- S DDWX=C-DDWOFS
- I DDWX>IOM!(DDWX<1) D SHIFT^DDW3(C,.DDWOFS)
- S DY=IOTM+R-2,DX=C-DDWOFS-1 X IOXY
- Q
- DDWC ;SFISC/MKO-CHANGE (REPLACE) ;3:36 PM 5 Jul 1996
- +1 ;;22.0;VA FileMan;;Mar 30, 1999
- +2 ;Per VHA Directive 10-93-142, this routine should not be modified.
- CHG ;Change
- +1 NEW DDWOPT
- +2 DO SETUP^DDWC1
- +3 FOR
- DO PROC
- IF DDWOPT=-1
- QUIT
- +4 DO RESTORE^DDWC1
- +5 KILL DDWCHG(1)
- +6 QUIT
- +7 ;
- PROC ;Main procedure
- +1 NEW DDWCOD,DDWT
- +2 ;
- +3 IF $DATA(DDWMARK)
- DO UNMARK^DDW7
- +4 DO EN^DIR0(IOTM+DDWMR,14,30,"",$GET(DDWFIND),100,"","","AKTW",.DDWT,.DDWCOD)
- +5 IF DDWT=""!($PIECE(DDWCOD,U)="TO")
- SET DDWOPT=-1
- QUIT
- +6 SET DDWFIND=DDWT
- SET DDWT=$$UC(DDWT)
- +7 ;
- +8 KILL DDWCHG(1)
- +9 DO EN^DIR0(IOTM+DDWMR+1,14,30,"",$GET(DDWCHG),100,"","","AKTW",.DDWCHG,.DDWCOD)
- +10 IF $PIECE(DDWCOD,U)="TO"
- SET DDWOPT=-1
- QUIT
- +11 IF DDWCHG?1L.E
- SET DDWCHG(1)=$$UC($EXTRACT(DDWCHG))_$EXTRACT(DDWCHG,2,999)
- +12 ;
- +13 FOR
- DO OPT
- IF DDWOPT]""
- QUIT
- +14 QUIT
- +15 ;
- OPT ;Prompt for and process option
- +1 WRITE $PIECE(DDGLVID,DDGLDEL,6)
- +2 FOR
- Begin DoDot:1
- +3 DO CUP(DDWMR+4,15)
- WRITE " "_$CHAR(8)
- +4 READ DDWOPT#1:DTIME
- IF '$TEST
- SET DDWOPT="Q"
- QUIT
- +5 IF DDWOPT=U
- SET DDWOPT="Q"
- +6 IF DDWOPT=""
- SET DDWOPT="E"
- QUIT
- +7 IF DDWOPT="?"
- SET DDWOPT="H"
- QUIT
- +8 SET DDWOPT=$$UC(DDWOPT)
- +9 IF "^F^R^A^Q^"'[(U_DDWOPT_U)
- WRITE $CHAR(7)
- SET DDWOPT=""
- End DoDot:1
- IF DDWOPT]""
- QUIT
- +10 DO CUP(DDWMR+4,15)
- WRITE $PIECE(DDGLVID,DDGLDEL,10)_" "
- +11 DO @DDWOPT
- +12 QUIT
- +13 ;
- F ;Find next
- +1 DO FINDT^DDWF(DDWFIND)
- +2 SET DDWOPT=""
- +3 QUIT
- +4 ;
- R ;Replace
- +1 NEW DDWE
- +2 IF '$DATA(DDWMARK)
- DO CERR
- QUIT
- +3 DO RS(.DDWE)
- IF $GET(DDWE)
- QUIT
- +4 DO F
- +5 QUIT
- +6 ;
- RS(DDWE) ;Change selected text
- +1 NEW DDWDIF
- +2 SET DDWDIF=$LENGTH(DDWCHG)-$PIECE(DDWMARK,U,4)+$PIECE(DDWMARK,U,2)-1
- +3 IF $LENGTH(DDWN)+DDWDIF>245
- Begin DoDot:1
- +4 SET DDWE=1
- SET DDWOPT=""
- +5 DO MSG($CHAR(7)_"Unable to change text. Resultant line is too long.")
- End DoDot:1
- QUIT
- +6 ;
- +7 SET DDWE=0
- SET DDWED=1
- +8 SET $EXTRACT(DDWN,$PIECE(DDWMARK,U,2),$PIECE(DDWMARK,U,4))=$SELECT($EXTRACT(DDWN,$PIECE(DDWMARK,U,2))?1U:$GET(DDWCHG(1),DDWCHG),1:DDWCHG)
- +9 SET DDWL(DDWRW)=DDWN
- +10 DO CUP(DDWRW,1)
- WRITE $PIECE(DDGLCLR,DDGLDEL)_$EXTRACT(DDWN,1+DDWOFS,IOM+DDWOFS)
- +11 KILL DDWMARK
- DO IND^DDW7()
- +12 DO POS(DDWRW,DDWC+DDWDIF,"R")
- +13 QUIT
- +14 ;
- A ;Change all
- +1 NEW DDWE,DDWF,DDWI,DDWND,DDWX
- +2 DO MSG^DDW("Changing text ...")
- +3 IF $DATA(DDWMARK)
- DO RS(.DDWE)
- IF $GET(DDWE)
- GOTO AEND
- +4 ;
- +5 SET DDWX=$FIND($$UC(DDWL(DDWRW)),DDWT,DDWC)
- +6 IF DDWX
- Begin DoDot:1
- +7 SET DDWL(DDWRW)=$$REP(DDWL(DDWRW),DDWFIND,.DDWCHG,DDWX,.DDWE)
- SET DDWF=1
- +8 IF $GET(DDWE)
- SET DDWE=DDWRW+DDWA_U_DDWE
- End DoDot:1
- +9 ;
- +10 IF '$GET(DDWE)
- FOR DDWI=DDWRW+1:1:DDWMR
- Begin DoDot:1
- +11 SET DDWX=$FIND($$UC(DDWL(DDWI)),DDWT)
- +12 IF DDWX
- SET DDWL(DDWI)=$$REP(DDWL(DDWI),DDWFIND,.DDWCHG,DDWX,.DDWE)
- SET DDWF=1
- +13 IF $GET(DDWE)
- SET DDWE=DDWI+DDWA_U_DDWE
- End DoDot:1
- IF $GET(DDWE)
- QUIT
- +14 ;
- +15 IF '$GET(DDWE)
- FOR DDWI=DDWSTB:-1:1
- Begin DoDot:1
- +16 SET DDWND=^TMP("DDW1",$JOB,DDWI)
- +17 SET DDWX=$FIND($$UC(DDWND),DDWT)
- +18 IF DDWX
- SET ^TMP("DDW1",$JOB,DDWI)=$$REP(DDWND,DDWFIND,.DDWCHG,DDWX,.DDWE)
- SET DDWF=1
- +19 IF $GET(DDWE)
- SET DDWE=DDWA+DDWMR+DDWSTB-DDWI+1_U_DDWE
- End DoDot:1
- IF $GET(DDWE)
- QUIT
- +20 ;
- +21 IF $GET(DDWF)
- Begin DoDot:1
- +22 IF $GET(DDWE)
- DO MSG^DDW($CHAR(7)_"Unable to complete replacement. A resultant line is too long.")
- HANG 2
- +23 FOR DDWI=1:1:$$MIN(DDWMR,DDWCNT-DDWA)
- Begin DoDot:2
- +24 DO CUP(DDWI,1)
- +25 WRITE $PIECE(DDGLCLR,DDGLDEL)_$EXTRACT(DDWL(DDWI),1+DDWOFS,IOM+DDWOFS)
- End DoDot:2
- +26 IF $GET(DDWE)
- DO LINE^DDWG(+DDWE,1)
- DO POS(DDWRW,$PIECE(DDWE,U,2),"R")
- End DoDot:1
- +27 IF '$TEST
- DO MSG^DDW("Text not found.")
- HANG 2
- DO FLUSH
- +28 ;
- AEND DO MSG^DDW()
- DO CUP(DDWRW,DDWC)
- +1 SET DDWOPT=$SELECT($GET(DDWE):-1,1:"")
- +2 QUIT
- +3 ;
- REP(DDWND,DDWFIND,DDWCHG,DDWX,DDWE) ;String replacement of DDWND
- +1 NEW DDWDIF,DDWFST,DDWSV
- +2 SET DDWDIF=$LENGTH(DDWCHG)-$LENGTH(DDWFIND)
- +3 FOR
- Begin DoDot:1
- +4 SET DDWSV=DDWND
- SET DDWFST=DDWX-$LENGTH(DDWFIND)
- +5 IF $LENGTH(DDWND)+DDWDIF>245
- SET DDWE=DDWFST
- QUIT
- +6 SET $EXTRACT(DDWND,DDWFST,DDWX-1)=$SELECT($EXTRACT(DDWND,DDWFST)?1U:$GET(DDWCHG(1),DDWCHG),1:DDWCHG)
- +7 SET DDWX=DDWX+DDWDIF
- +8 SET DDWX=$FIND($$UC(DDWND),DDWFIND,DDWX)
- End DoDot:1
- IF 'DDWX!$GET(DDWE)
- QUIT
- +9 QUIT $SELECT($GET(DDWE):DDWSV,1:DDWND)
- +10 ;
- E ;Edit Find
- +1 DO FLUSH
- +2 QUIT
- +3 ;
- Q ;Quit option
- +1 DO FLUSH
- +2 SET DDWOPT=-1
- +3 QUIT
- +4 ;
- H ;Help
- +1 DO MSG("Press the highlighted letter of one of the Options.")
- +2 SET DDWOPT=""
- +3 QUIT
- +4 ;
- CERR ;The Change options are disabled
- +1 DO MSG($CHAR(7)_"You must Find the text before you can Change it.")
- +2 SET DDWOPT=""
- +3 QUIT
- +4 ;
- MSG(DDWX) ;
- +1 DO CUP(DDWMR+5,1)
- WRITE $PIECE(DDGLCLR,DDGLDEL)_$GET(DDWX)
- HANG 2
- +2 DO CUP(DDWMR+5,1)
- WRITE $PIECE(DDGLCLR,DDGLDEL)
- +3 DO FLUSH
- +4 QUIT
- +5 ;
- FLUSH ;Flush read buffer
- +1 NEW DDWX
- FOR
- READ *DDWX:0
- IF '$TEST
- QUIT
- +2 QUIT
- +3 ;
- UC(X) ;Return uppercase of X
- +1 QUIT $TRANSLATE(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- +2 ;
- MIN(X,Y) ;
- +1 QUIT $SELECT(X<Y:X,1:Y)
- +2 ;
- CUP(Y,X) ;Pos cursor
- +1 SET DY=IOTM+Y-2
- SET DX=X-1
- XECUTE IOXY
- +2 QUIT
- +3 ;
- POS(R,C,F) ;Pos cursor based on char pos C
- +1 NEW DDWX
- +2 IF $GET(C)="E"
- SET C=$LENGTH($GET(DDWL(R)))+1
- +3 IF $GET(F)["N"
- SET DDWN=$GET(DDWL(R))
- +4 IF $GET(F)["R"
- SET DDWRW=R
- SET DDWC=C
- +5 ;
- +6 SET DDWX=C-DDWOFS
- +7 IF DDWX>IOM!(DDWX<1)
- DO SHIFT^DDW3(C,.DDWOFS)
- +8 SET DY=IOTM+R-2
- SET DX=C-DDWOFS-1
- XECUTE IOXY
- +9 QUIT