| 1 | DBAGO ;DUMP GLOBALS IN ZWR FORMAT
|
---|
| 2 | ;dump Cache globals to a file in GTM's ZWR format
|
---|
| 3 | ;mlp 18nov01 New routine
|
---|
| 4 | ;mlp 07jan02 Update to encode some chars > 127; limit $C args to 256.
|
---|
| 5 | ; Use LF instead of ! to end lines.
|
---|
| 6 | ;wb 20Sep02 save each global to a separate file in "/data/" %ZWRSEP
|
---|
| 7 | ;WB 19OCT03 INTEGRATE $$EXIST FROM EXTERNAL ROUTINE
|
---|
| 8 | ;wb 04Jan04 Add output directory query
|
---|
| 9 | ;
|
---|
| 10 | W !!,"DUMPS GLOBALS IN ZWR FORMAT",!!
|
---|
| 11 | ; D OUT^%IS Q:$G(IO)="" ;request output dev
|
---|
| 12 | r !,"Output directory? ",ZOUTDIR
|
---|
| 13 | D ^%SYS.GSET Q:$G(%G)<1 ;request globals to dump
|
---|
| 14 | ;
|
---|
| 15 | ASK R !!,"Comment ? ",COM,! I COM?1"?".E D G ASK
|
---|
| 16 | . W "Enter a comment to save with the file. ",!
|
---|
| 17 | S H=$H,LF=$C(10),QT="""",C255=$C(255),SKIP=$T(SKIP)
|
---|
| 18 | S GN=0 F S GN=$O(^UTILITY("GLO",GN)) Q:GN="" D
|
---|
| 19 | . S GNN="^"_GN
|
---|
| 20 | . s IOP=GN_".zwr",IOPAR="WNS"
|
---|
| 21 | . I SKIP[(";"_GNN_";") w "Skipping ",IOP," - in exclusion set",! Q
|
---|
| 22 | . ;i $$exist(IOP) w "Skipping ",IOP," - already exists",! Q
|
---|
| 23 | . w "Opening ",IOP,!
|
---|
| 24 | . d OPEN^%ZISH("OUTFILE",ZOUTDIR,IOP,"W")
|
---|
| 25 | . I POP W !,"Failed to open" Q
|
---|
| 26 | . U IO
|
---|
| 27 | . W COM,LF
|
---|
| 28 | . W "Cache "_$TR($ZD(H,2)," ","-")_" "_$ZT($P(H,",",2))_" ZWR",LF
|
---|
| 29 | . s cnt=0
|
---|
| 30 | . D WALK(GNN)
|
---|
| 31 | . d CLOSE^%ZISH("OUTFILE")
|
---|
| 32 | W !,"Done.",!
|
---|
| 33 | Q
|
---|
| 34 | ;
|
---|
| 35 | WALK(G) ;walk through global G, convert subscripts and values as necessary, dump out
|
---|
| 36 | Q:'$D(@G) Q:G["(" ; chk if @G defined, and must be a top-level name
|
---|
| 37 | I $D(@G)#2 D ; handle case where top-level node has data
|
---|
| 38 | . S NAME=$NA(@G)
|
---|
| 39 | . S VAL=$$CGV(@G)
|
---|
| 40 | . W NAME_"="_VAL,LF
|
---|
| 41 | F S G=$Q(@G) Q:G="" D ;handle rest of global G
|
---|
| 42 | . S NAME=$NA(@G)
|
---|
| 43 | . S NAME=$$RCC(NAME) D
|
---|
| 44 | . . N P ;Remove initial ""_ or final _""
|
---|
| 45 | . . S P=$F(NAME,"(") I P,$E(NAME,P,P+2)="""""_" S $E(NAME,P,P+2)=""
|
---|
| 46 | . . S P=$L(NAME) S:$E(NAME,P-3,P-1)="_""""" $E(NAME,P-3,P-1)=""
|
---|
| 47 | . S VAL=$$CGV(@G)
|
---|
| 48 | . W NAME_"="_VAL,LF
|
---|
| 49 | . s cnt=cnt+1
|
---|
| 50 | . i cnt#10000=0 u $p w "." u IO
|
---|
| 51 | Q
|
---|
| 52 | ;
|
---|
| 53 | RCC(NA) ;Replace control chars in NA with $C( ). Returns encoded string.
|
---|
| 54 | Q:'$$CCC(NA) NA ;No embedded ctrl chars
|
---|
| 55 | N OUT S OUT="" ;holds output name
|
---|
| 56 | N CC S CC=0 ;count ctrl chars in $C(
|
---|
| 57 | N C ;temp hold each char
|
---|
| 58 | F I=1:1:$L(NA) S C=$E(NA,I) D ;for each char C in NA
|
---|
| 59 | . I C'?1C,C'=C255 D S OUT=OUT_C Q ;not a ctrl char
|
---|
| 60 | . . I CC S OUT=OUT_")_""",CC=0 ;close up $C(... if one is open
|
---|
| 61 | . I CC D
|
---|
| 62 | . . I CC=256 S OUT=OUT_")_$C("_$A(C),CC=0 ;max args in one $C(
|
---|
| 63 | . . E S OUT=OUT_","_$A(C) ;add next ctrl char to $C(
|
---|
| 64 | . E S OUT=OUT_"""_$C("_$A(C)
|
---|
| 65 | . S CC=CC+1
|
---|
| 66 | . Q
|
---|
| 67 | Q OUT
|
---|
| 68 | ;
|
---|
| 69 | CGV(V) ;Convert Global Value.
|
---|
| 70 | ;If no encoding required, then return as quoted string.
|
---|
| 71 | ;Otherwise, return as an expression with $C()'s and strings.
|
---|
| 72 | I $F(V,QT) D ;chk if V contains any Quotes
|
---|
| 73 | . S P=0 ;position pointer into V
|
---|
| 74 | . F S P=$F(V,QT,P) Q:'P D ;find next "
|
---|
| 75 | . . S $E(V,P-1)=QT_QT ;double each "
|
---|
| 76 | . . S P=P+1 ;skip over new "
|
---|
| 77 | I $$CCC(V) D Q V
|
---|
| 78 | . S V=$$RCC(QT_V_QT)
|
---|
| 79 | . S:$E(V,1,3)="""""_" $E(V,1,3)=""
|
---|
| 80 | . S L=$L(V) S:$E(V,L-2,L)="_""""" $E(V,L-2,L)=""
|
---|
| 81 | Q QT_V_QT
|
---|
| 82 | ;
|
---|
| 83 | CCC(S) ;test if S Contains a Control Character or $C(255).
|
---|
| 84 | Q:S?.E1C.E 1
|
---|
| 85 | Q:$F(S,$C(255)) 1
|
---|
| 86 | Q 0
|
---|
| 87 | SKIP ;;^%ZOSF;^CacheTempNodes;^ROUTINE;^TMP;^UTILITY;^XTMP;^XUTL;^mcq;^mterm;^oddDEF;^rINDEX;rINDEXCLASS;^rOBJ;
|
---|
| 88 |
|
---|
| 89 | exist(fn)
|
---|
| 90 | n %
|
---|
| 91 | s %=$zu(140,4,fn)
|
---|
| 92 | q (%=0)
|
---|
| 93 | ;
|
---|