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

AUKD.m

Go to the documentation of this file.
  1. AUKD ; KILLS DICs and GLOBALS [ 08/17/88 4:55 PM ]
  1. ;
  1. NOTES ; This routine deletes FileMan dictionaries, and optionally their
  1. ; globals, TEMPLATES and AUTHORITIES, by a range of dictionary
  1. ; numbers, or if called from another routine, by a predefined
  1. ; set of dictionaries. The assumptions made by this routine
  1. ; are that ^UTILITY, ^DIC, and ^DD are not UCI TRANSLATED.
  1. ; Any other globals may be translated, but the KILLs will
  1. ; take place in the current UCI only.
  1. ;
  1. ; This routine can be called from another routine by setting the
  1. ; variables AUKDLO, AUKDHI, AUKDDEL, AUKDTMP and then D EN1^AUKD,
  1. ; or by creating the array ^UTILITY("AUDSET",$J) and then D EN2^AUKD.
  1. ;
  1. ; The array ^UTILITY("AUDSET",$J) is subscripted by the file numbers
  1. ; and has a value of 'v1^v2' where v1 applies to the data global,
  1. ; and v2 applies to the TEMPLATES attached to the file. The
  1. ; allowable values of v1 and v2 are 'S' for save, 'D' for delete,
  1. ; 'A' for ask.
  1. ;
  1. ; This routine will execute ^AURESID to delete any residual entries
  1. ; in ^DD if dictionaries are deleted by a range of numbers.
  1. ;
  1. BEGIN S DUZ(0)="@",U="^"
  1. W !!,"This program deletes FileMan dictionaries, and optionally their"
  1. W !,"globals, TEMPLATES and AUTHORITIES, by a range of dictionary numbers.",!!
  1. ;
  1. LO R !,"Enter first dictionary number to be deleted: ",AUKDLO G:AUKDLO'=+AUKDLO EOJ
  1. HI W !,"Enter last dictionary number to be deleted: ",AUKDLO,"//" R AUKDHI S:AUKDHI="" AUKDHI=AUKDLO G:AUKDHI'=+AUKDHI!(AUKDHI<AUKDLO) EOJ
  1. DEL R !!,"Data globals? [D]elete, [A]sk, [S]ave S//",AUKDDEL G:"DAS"'[AUKDDEL DEL
  1. S:AUKDDEL="" AUKDDEL="S"
  1. ;
  1. TMP W !!,"TEMPLATES and AUTHORITIES? [D]elete, [A]sk, [S]ave "_AUKDDEL_"//" R AUKDTMP G:"DAS"'[AUKDTMP TMP
  1. S:AUKDTMP="" AUKDTMP=AUKDDEL
  1. ;
  1. EN1 ;
  1. I '$D(AUKDLO)!('$D(AUKDHI)) W !!,"AUKDLO and/or AUKDHI does not exist!" G EOJ
  1. S DUZ(0)="@",U="^"
  1. S:'$D(AUKDDEL) AUKDDEL="A"
  1. S:AUKDDEL="K" AUKDDEL="S" ;***** BACKWARD COMPATABLE *****
  1. I "DAS"'[AUKDDEL W !!,"Invalid AUKDDEL --->",AUKDDEL,"<---" G EOJ
  1. S:'$D(AUKDTMP) AUKDTMP="A"
  1. S:AUKDTMP="K" AUKDTMP="S" ;***** UPWARD COMPATABLE *****
  1. I "DAS"'[AUKDTMP W !!,"Invalid AUDKTMP --->",AUKDTMP,"<---" G EOJ
  1. S AUDSLO=AUKDLO,AUDSHI=AUKDHI D EN1^%AUDSET
  1. S AUKDFILE=(AUKDLO-.00000001) F AUKDL=0:0 S AUKDFILE=$O(^DD(AUKDFILE)) Q:AUKDFILE>AUKDHI!(AUKDFILE'=+AUKDFILE) I '$D(^UTILITY("AUDSET",$J,AUKDFILE)) D CHECKDD
  1. I '$D(^UTILITY("AUDSET",$J)) W !!,"No dictionaries were selected." G EOJ
  1. S AUKDFILE=0 F AUKDL=0:0 S AUKDFILE=$O(^UTILITY("AUDSET",$J,AUKDFILE)) Q:AUKDFILE="" S ^(AUKDFILE)=AUKDDEL_U_AUKDTMP
  1. G EN2
  1. ;
  1. CHECKDD ; CHECK ^DD FOR DANGLING ENTRIES
  1. Q:$D(^DD(AUKDFILE,0,"UP"))
  1. W "." S ^UTILITY("AUDSET",$J,AUKDFILE)=""
  1. Q
  1. ;
  1. EN2 ;
  1. I '$D(^UTILITY("AUDSET",$J)) W !!,"^UTILITY(""AUDSET"",$J) is not defined!" G EOJ
  1. I $O(^UTILITY("AUDSET",$J,""))<2 W !!,"*** Don't mess with files less than 2!! ***",*7 K AUKDLO,AUKDHI G EOJ
  1. S DUZ(0)="@",U="^"
  1. S (AUKDFILE,AUKDFLG)=0 F AUKDL=0:0 S AUKDFILE=$O(^UTILITY("AUDSET",$J,AUKDFILE)) Q:AUKDFILE="" S AUKDX=^(AUKDFILE) D CHKVAL
  1. I AUKDFLG W !!,"One or more invalid GLOBAL^TEMPLATE disposition values encountered!" G EOJ
  1. K AUKDDEL,AUKDERR,AUKDFLG,AUKDTMP,AUKDX
  1. D ^%AUKD2
  1. S AUKDFLG=0 D CONFIRM
  1. G:AUKDFLG EOJ
  1. K AUKDASK,AUKDFLG,AUKDX,AUKDY
  1. D ^%AUKD3
  1. W !!,"Resetting ^DIC(0) <WAIT>" S (AUKDC,AUKDFILE)=0,AUKDLAST="" F AUKDL=0:0 S AUKDFILE=$O(^DIC(AUKDFILE)) Q:AUKDFILE'=+AUKDFILE S AUKDC=AUKDC+1,AUKDLAST=AUKDFILE
  1. S $P(^DIC(0),U,3)=AUKDLAST,$P(^DIC(0),U,4)=AUKDC
  1. G EOJ
  1. ;
  1. CHKVAL ; CHECK G^T VALUES
  1. S AUKDERR=0
  1. I AUKDX'?1U1"^"1U S AUKDERR=1
  1. ;***** "K" TO "S" ADDED TO FOLLOWING LINE FOR UPWARD COMPABILITY *****
  1. I 'AUKDERR S AUKDDEL=$P(AUKDX,U,1),AUKDTMP=$P(AUKDX,U,2) S:AUKDDEL="K" AUKDDEL="S" S:AUKDTMP="K" AUKDTMP="S" S:"ADS"'[AUKDDEL AUKDERR=1 S:"ADS"'[AUKDTMP AUKDERR=1
  1. I AUKDERR S AUKDFLG=1 W !,"Invalid value ",AUKDFILE,"=",AUKDX
  1. Q
  1. ;
  1. CONFIRM ; SHOW AND ASK
  1. I '$D(^UTILITY("AUDSET",$J)) S AUKDFLG=1 Q
  1. W !!," NUMBER",?14,"NAME",?45,"G^T",?50,"DATA GLOBAL",!
  1. S (AUKDFILE,AUKDASK)=0 F AUKDL=0:0 S AUKDFILE=$O(^UTILITY("AUDSET",$J,AUKDFILE)) Q:AUKDFILE="" S AUKDX=^(AUKDFILE) S:$E(AUKDX,1,3)["A" AUKDASK=1 D LIST
  1. W !!,"The above list of dictionaries will be deleted in UCI ",AUKDUCI,". Data"
  1. W !,"globals, TEMPLATES and AUTHORITIES, will be kept, deleted, or asked depending"
  1. W !,"on flag. '?' in G position indicates invalid data global."
  1. W !!,"[S]ave, [D]elete, [A]sk. Globals to be deleted are also marked"
  1. W !," by '*' in position 1."
  1. R !!,"[C]ontinue, [S]top, [M]odify? C//",AUKDX S:AUKDX="^" AUKDX="S"
  1. I $E(AUKDX)="S" S AUKDFLG=1 Q
  1. I $E(AUKDX)="M" D MODIFY G CONFIRM
  1. Q:'AUKDASK
  1. W ! S AUKDFILE="" F AUKDL=0:0 S AUKDFILE=$O(^UTILITY("AUDSET",$J,AUKDFILE)) Q:AUKDFILE="" S AUKDX=^(AUKDFILE) D:$E(AUKDX,1,3)["A" ASK
  1. G CONFIRM
  1. ;
  1. LIST ; LIST FILE INFO
  1. W !,$S($P(AUKDX,U,1)="D":"*",1:" "),AUKDFILE,?14,$E($P(^DIC(AUKDFILE,0),U,1),1,30),?45,$E(AUKDX,1,3),?50,$S($P(AUKDX,U,3)="":"<NONE>",1:$P(AUKDX,U,3))
  1. Q
  1. ;
  1. MODIFY ;
  1. R !!,"Which file? ",AUKDFILE I '$D(^UTILITY("AUDSET",$J,AUKDFILE)) W *7 G MODIFY
  1. R !," Delete file from list of files to be deleted (Y/N) N//",AUKDY
  1. I $E(AUKDY)="Y" K ^UTILITY("AUDSET",$J,AUKDFILE) Q
  1. S $P(^UTILITY("AUDSET",$J,AUKDFILE),U,2)="A",$P(^(AUKDFILE),U,1)=$S($P(^(AUKDFILE),U,1)="?":"?",1:"A")
  1. W ! S AUKDX=^(AUKDFILE) D ASK
  1. Q
  1. ;
  1. ASK ;
  1. G:$P(AUKDX,U,1)'="A" ASK2
  1. W !,"Do you want to delete the data global for ",AUKDFILE," ",$P(^DIC(AUKDFILE,0),U,1)," (Y/N) N//" R AUKDY
  1. I $E(AUKDY)="Y" S $P(^UTILITY("AUDSET",$J,AUKDFILE),U,1)="D"
  1. E S $P(^UTILITY("AUDSET",$J,AUKDFILE),U,1)="S"
  1. ASK2 Q:$P(AUKDX,U,2)'="A"
  1. W !,"Do you want to delete the TEMPLATES and AUTHORITIES for ",AUKDFILE," ",$P(^DIC(AUKDFILE,0),U,1)," (Y/N) N//" R AUKDY
  1. I $E(AUKDY)="Y" S $P(^UTILITY("AUDSET",$J,AUKDFILE),U,2)="D"
  1. E S $P(^UTILITY("AUDSET",$J,AUKDFILE),U,2)="S"
  1. Q
  1. ;
  1. EOJ ;
  1. I $D(AUKDLO),$D(AUKDHI),AUKDLO=+AUKDLO,AUKDHI=+AUKDHI,AUKDHI>AUKDLO S AURLO=AUKDLO,AURHI=AUKDHI D EN1^AURESID
  1. I $D(^UTILITY("AUKD",$J)) W !,"Restoring saved ^DD nodes. <WAIT>" S FROM="^UTILITY(""AUKD"",$J,",TO="^DD(" D ^%AUGXFR
  1. K ^UTILITY("AUDSET",$J),^UTILITY("AUKD",$J)
  1. K AUKDASK,AUKDC,AUKDDEL,AUKDERR,AUKDFILE,AUKDFLD,AUKDFLG,AUKDG,AUKDHI,AUKDL,AUKDLAST,AUKDLO,AUKDNDIC,AUKDTMP,AUKDUCI,AUKDX,AUKDY
  1. K FROM,TO
  1. W !!,"DONE",!!
  1. Q