Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ZIBRNSPC

ZIBRNSPC.m

Go to the documentation of this file.
  1. ZIBRNSPC ; IHS/ADC/GTH - NAMESPACE PREVIOUSLY WRITTEN ROUTINES ; [ 10/29/2002 7:42 AM ]
  1. ;;3.0;IHS/VA UTILITIES;**9**;FEB 07, 1997
  1. ; XB*3*9 IHS/SET/GTH XB*3*9 10/29/2002 Cache' mods.
  1. ;
  1. INIT ;
  1. KILL (%)
  1. D ^XBKVAR
  1. S DTIME=300
  1. KILL %,DISYS,%H,X,^UTILITY($J),^TMP("ZIBRNSPC",$J)
  1. S IOP=$I
  1. D ^%ZIS
  1. START ;
  1. W "Routine Namespace Converter",!
  1. S ZIBRQUIT=0
  1. D SETUP
  1. G:ZIBRQUIT EXIT
  1. ;S ZIBRRTN="";IHS/SET/GTH XB*3*9 10/29/2002
  1. S ZIBRRTN=0 ;IHS/SET/GTH XB*3*9 10/29/2002
  1. F ZIBRQ=0:0 S ZIBRRTN=$O(^UTILITY($J,ZIBRRTN)) Q:ZIBRRTN="" W !!,"-- ",ZIBRRTN," --",!! D RLOAD,RFIX,RSAVE,RNDX
  1. EXIT ;
  1. W !!,"Done.",!
  1. KILL ^UTILITY($J),^TMP("ZIBRNSPC",$J),DUOUT,DTOUT,IOP
  1. KILL ZIBRANS,ZIBRCAND,ZIBRCH,ZIBRCMDT,ZIBRCPOS,ZIBRDEV,ZIBRFLI,ZIBRI,ZIBRJ,ZIBRL,ZIBRLINE,ZIBROBJ,ZIBROUTP,ZIBRPART,ZIBRPLEV,ZIBRPN,ZIBRPRFX,ZIBRQ,ZIBRQUIT,ZIBRRTN,ZIBRT,ZIBRV,ZIBRW,ZIBRXC
  1. Q
  1. ;
  1. SETUP ; INITIALIZE UTILITY
  1. F ZIBRT="EXC","PEXC" F ZIBRI=0:1 S ZIBRL=$T(@ZIBRT+ZIBRI),ZIBRL=$P(ZIBRL,";;",2,255) Q:ZIBRL="" F ZIBRJ=1:1 S ZIBRW=$P(ZIBRL,"^",ZIBRJ) Q:ZIBRW="" S ^TMP("ZIBRNSPC",$J,ZIBRT,ZIBRW)=""
  1. PLOOP ;
  1. R "Package prefix (1-5 characters): ",ZIBRPRFX:DTIME
  1. S:'$T ZIBRPRFX="^"
  1. I "^"'[ZIBRPRFX I $L(ZIBRPRFX)>5!(ZIBRPRFX'?1.5U) W *7," -- Invalid prefix",! G PLOOP
  1. W !
  1. I "^"[ZIBRPRFX S ZIBRQUIT=1 Q
  1. W !,"Enter any variables to be treated as external references --",!,"not to be namespaced -- in the form NAME1,NAME2,...",!
  1. F ZIBRQ=0:0 R " Externals: ",ZIBRL:DTIME,! S:'$T ZIBRL="^" Q:"^"[ZIBRL D:ZIBRL["?" SHEXT I ZIBRL]"" F ZIBRI=1:1 S ZIBRW=$P(ZIBRL,",",ZIBRI) Q:ZIBRW="" S ^TMP("ZIBRNSPC",$J,"EXC",ZIBRW)="" W " ",ZIBRW,!
  1. I ZIBRL["^" S ZIBRQUIT=1 Q
  1. X ^%ZOSF("RSEL")
  1. I $O(^UTILITY($J,""))="" S ZIBRQUIT=1
  1. Q
  1. ;
  1. SHEXT ;
  1. W !?2,"Currently defined externals:",!
  1. S ZIBRW=""
  1. F ZIBRQ=0:0 S W=$O(^TMP("ZIBRNSPC",$J,"EXC",ZIBRW)) Q:ZIBRW="" W ?3,ZIBRW,!
  1. W !
  1. S ZIBRL=""
  1. Q
  1. ;
  1. EXC ;;X^Y^DIE^DIC^DT^U^DUZ^DTIME^ZTSK^ZTDESC^ZTSAVE^ZTLOAD^ZTRTN^ZTIO^ZTDTH
  1. ;;
  1. PEXC ;;IO^D^XB^Z
  1. ;;
  1. ;
  1. RLOAD ; LOAD ROUTINE INTO GLOBAL
  1. W "Beginning routine load ... "
  1. KILL ^TMP("ZIBRNSPC",$J,"T"),^("K")
  1. S ZIBRXC=$E($T(RLOADX),10,255)
  1. X ZIBRXC
  1. W " completed.",!
  1. Q
  1. ;
  1. RLOADX ;;S ^TMP("ZIBRNSPC",$J,"T",0)=ZIBRRTN ZL @ZIBRRTN F ZIBRI=1:1 S ZIBRL=$T(+ZIBRI) Q:ZIBRL="" S ^(ZIBRI)=ZIBRL
  1. ;
  1. RSAVE ; SAVE GLOBAL TEXT AS ROUTINE
  1. W "Beginning routine save ... "
  1. S ZIBRXC=$P($T(RSAVEX),"RSAVEX ",2)
  1. X ZIBRXC
  1. W " completed.",!
  1. Q
  1. ;
  1. ; S ZIBRRTN=^TMP("ZIBRNSPC",$J,"T",0) X "ZR X ""F ZIBRI=1:1 Q:'$D(^(ZIBRI)) ZI ^(ZIBRI)"" ZS @ZIBRRTN" ; IHS/SET/GTH XB*3*9 10/29/2002
  1. RSAVEX S ZIBRRTN=^TMP("ZIBRNSPC",$J,"T",0) ZR X "F ZIBRI=1:1 Q:'$D(^(ZIBRI)) ZI ^(ZIBRI)" ZS @ZIBRRTN
  1. ;
  1. RNDX ; PRINT INDEX OF ROUTINE CONVERSION
  1. KILL %ZIS,IOP
  1. S %ZIS("A")="Enter device for auxiliary listing of variable changes",%ZIS("B")=""
  1. D ^%ZIS
  1. S ZIBRDEV=$S($D(DTOUT)!$D(DUOUT):"^",IO=IO(0):0,1:IO)
  1. Q:ZIBRDEV["^"
  1. D RNDXP
  1. I ZIBRDEV U ZIBRDEV D RNDXP D ^%ZISC
  1. Q
  1. ;
  1. RNDXP ;
  1. S ZIBRV=" "
  1. F ZIBRI=0:1 S:ZIBRI=4 ZIBRI=0 W:ZIBRI=0 ! S ZIBRV=$O(^TMP("ZIBRNSPC",$J,"V",ZIBRV)) Q:ZIBRV="" W ?(19*ZIBRI),$J(ZIBRV,8),">",^(ZIBRV)
  1. W !
  1. Q
  1. ;
  1. RFIX ; FIX ROUTINE LINES STORED IN GLOBAL
  1. F ZIBRFLI=1:1 Q:'$D(^TMP("ZIBRNSPC",$J,"T",ZIBRFLI)) S ZIBRLINE=^(ZIBRFLI) D LSCAN S ^TMP("ZIBRNSPC",$J,"T",ZIBRFLI)=ZIBROUTP
  1. W "Line modification completed.",!
  1. Q
  1. ;
  1. LSCAN ; SCAN LINE AND REPLACE VARIABLES
  1. S ZIBRCPOS=$F(ZIBRLINE," ")-1,ZIBRCH=" ",ZIBROUTP=$E(ZIBRLINE,1,ZIBRCPOS-1)
  1. F ZIBRQ=0:0 Q:ZIBRCH="" D COPY1,CMD
  1. Q
  1. ;
  1. CMD ;
  1. I ZIBRCH=";" S ZIBROUTP=ZIBROUTP_$E(ZIBRLINE,ZIBRCPOS,255),ZIBRCPOS=$L(ZIBRLINE)+1,ZIBRCH="" Q
  1. S ZIBRCMDT=ZIBRCH
  1. F ZIBRQ=0:0 Q:": "[ZIBRCH D COPY1
  1. D:ZIBRCH=":" EXPR
  1. Q:ZIBRCH=""
  1. D COPY1
  1. I ZIBRCH'=" " D ARGS
  1. Q
  1. ;
  1. COPY1 ;
  1. S ZIBROUTP=ZIBROUTP_ZIBRCH
  1. D ADVPOS
  1. Q
  1. ;
  1. ADDOBJ ;
  1. S ZIBROBJ=ZIBROBJ_ZIBRCH
  1. D ADVPOS
  1. Q
  1. ;
  1. ADVPOS ;
  1. S ZIBRCPOS=ZIBRCPOS+1,ZIBRCH=$E(ZIBRLINE,ZIBRCPOS)
  1. Q
  1. ;
  1. EXPR ;
  1. F ZIBRQ=0:0 Q:" "[ZIBRCH D COPYOBJ
  1. Q
  1. ;
  1. COPYOBJ ; COPY AN OBJECT, CHECKING FOR VARIABLES
  1. I ZIBRCH="""" D QSTR Q
  1. I ZIBRCH'?1AN,"%^$"'[ZIBRCH D COPY1 Q
  1. S ZIBROBJ=""
  1. F ZIBRQ=0:0 D ADDOBJ Q:ZIBRCH'?1AN
  1. D:$E(ZIBROBJ)?1A TSTOBJ
  1. S ZIBROUTP=ZIBROUTP_ZIBROBJ
  1. Q
  1. ;
  1. QSTR ; COPY QUOTED STRING (INCLUDED DOUBLED QUOTES)
  1. F ZIBRQ=0:0 D COPY1 Q:""""[ZIBRCH
  1. D COPY1
  1. G:ZIBRCH="""" QSTR
  1. Q
  1. ;
  1. ARGS ; COPY ARGUMENTS -- 'DO' AND 'GO' SPECIAL CASES
  1. I "GD"'[ZIBRCMDT D EXPR Q
  1. F ZIBRQ=0:0 Q:" "[ZIBRCH D DGARG D:ZIBRCH=":" CPYTCOM
  1. Q
  1. ;
  1. DGARG ; PROCESS DO/GO ARGUMENTS
  1. I ZIBRCH="@" D CPYTCOM Q
  1. F ZIBRQ=0:0 Q:",: "[ZIBRCH D COPY1
  1. D:ZIBRCH="," COPY1
  1. Q
  1. ;
  1. CPYTCOM ; COPIES OBJECTS THRU ZERO-LEVEL COMMA
  1. S ZIBRPLEV=0
  1. F ZIBRQ=0:0 D CPYTKN Q:" "[ZIBRCH Q:ZIBRCH=","&(ZIBRPLEV=0)
  1. D:ZIBRCH="," COPY1
  1. Q
  1. ;
  1. CPYTKN ; COPIES A TOKEN, MODIFYING PARENTHESIS LEVEL
  1. I ZIBRCH="(" S ZIBRPLEV=ZIBRPLEV+1 D COPY1 Q
  1. I ZIBRCH=")" S ZIBRPLEV=ZIBRPLEV-1 D COPY1 Q
  1. D COPYOBJ
  1. Q
  1. ;
  1. TSTOBJ ; CONDITIONALLY REPLACES A VARIABLE NAME
  1. Q:$E(ZIBROBJ,1,$L(ZIBRPRFX))=ZIBRPRFX
  1. Q:$D(^TMP("ZIBRNSPC",$J,"EXC",ZIBROBJ))
  1. I $D(^TMP("ZIBRNSPC",$J,"V",ZIBROBJ)) S ZIBROBJ=^(ZIBROBJ) Q
  1. D CHKPART
  1. I ZIBRPART D VERPART Q:'ZIBRPART
  1. S ZIBRCAND=ZIBRPRFX_ZIBROBJ
  1. D VERCAND
  1. S:ZIBRCAND="^" ZIBRCAND=ZIBROBJ
  1. S ^TMP("ZIBRNSPC",$J,"V",ZIBROBJ)=ZIBRCAND
  1. S ^TMP("ZIBRNSPC",$J,"NV",ZIBRCAND)=ZIBROBJ
  1. S ZIBROBJ=ZIBRCAND
  1. Q
  1. ;
  1. CHKPART ; VERIFY MATCH WITH EXCLUSION PARTIAL NAME LIST
  1. S ZIBRPART=0,ZIBRPN=""
  1. F ZIBRQ=0:0 S ZIBRPN=$O(^TMP("ZIBRNSPC",$J,"PEXC",ZIBRPN)) Q:ZIBRPN="" I $E(ZIBROBJ,1,$L(ZIBRPN))=ZIBRPN S ZIBRPART=1 Q
  1. Q
  1. ;
  1. VERPART ; MANAGE PARTIAL MATCH
  1. W "'",ZIBROBJ,"' begins with '",ZIBRPN,"'",!
  1. R "Do you wish to treat it as an external reference? YES// ",ZIBRANS:DTIME,!
  1. S:'$T ZIBRANS="Y"
  1. S ZIBRANS=$E(ZIBRANS_"Y")
  1. I ZIBRANS="?" W " Usage: ",ZIBRLINE,! G VERPART
  1. S:ZIBRANS?1L ZIBRANS=$C($A(ZIBRANS)-32)
  1. S:ZIBRANS="Y" ZIBRPART=0,^TMP("ZIBRNSPC",$J,"EXC",ZIBROBJ)=""
  1. Q
  1. ;
  1. VERCAND ; MANAGE AUTO CANDIDATE SELECTION
  1. I $L(ZIBRCAND)>8 W "'",ZIBRCAND,"' cannot be used for '",ZIBROBJ,"' due to its length.",! D GETALT G VERCAND
  1. I $D(^TMP("ZIBRNSPC",$J,"NV",ZIBRCAND)),^(ZIBRCAND)'=ZIBROBJ W "'",ZIBRCAND,"' cannot be used for '",ZIBROBJ,"'; used for '",^(ZIBRCAND),"'",! D GETALT G VERCAND
  1. Q
  1. ;
  1. GETALT ; GET ALTERNATE FOR PROPOSED CANDIDATE REPLACEMENT NAME
  1. R "Please supply an alternative: ",ZIBRCAND:DTIME
  1. S:'$T ZIBRCAND="^"
  1. Q:ZIBRCAND="^"
  1. I ZIBRCAND="?" W " Usage: ",ZIBRLINE,! G GETALT
  1. I $E(ZIBRCAND,1,$L(ZIBRPRFX))=ZIBRPRFX W ! Q
  1. W *7," -- does not begin with '",ZIBRPRFX,"'",!
  1. R "Are you sure you want a non-namespaced variable? N// ",ZIBRANS:DTIME,!
  1. S:'$T ZIBRANS="N"
  1. S ZIBRANS=$E(ZIBRANS_"N")
  1. I ZIBRANS?1L S ZIBRANS=$C($A(ZIBRANS)-32)
  1. I ZIBRANS="Y" W ! Q
  1. G GETALT
  1. ;