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

XQ3.m

Go to the documentation of this file.
  1. XQ3 ;LL/THM,SF/GJL,SEA/JLI - CLEANUP DANGLING POINTERS IN OPTION OR HELP FRAME FILES ;12/08/09
  1. ;;8.0;KERNEL;**80,501,538**;Jul 10, 1995;Build 2
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. Q
  1. ENASK ;Ask to fix up dirty OPTION/HELP FRAME File
  1. N IX,XUT,J,K,XQFL,X
  1. I '$D(%) W !,$C(7),"ENTRY MUST BE WITH THE VARIABLE '%' SET TO INDICATE DESIRED FILE.",$C(7),! Q
  1. S XQFL=$S(%=1:"OPTION",%=2:"PROTOCOL",1:"HELP FRAME")
  1. W !,"Do you want to remove any 'Dangling Pointers' from your ",XQFL," File? Y// " R X:$S($D(DTIME):DTIME,1:300) I '$T Q
  1. W ! I X="" S X="Y"
  1. I X["?" G SYNTAX
  1. I X["^" S X="^" Q
  1. STRIP I X'="",X'?1A.E S X=$E(X,2,256) G STRIP
  1. S X=$E(X,1) I X="" G SYNTAX
  1. I "Nn"[X S X="N" Q
  1. I "Yy"[X W !,"PLEASE WAIT while I check this out . . . " G REMOVE
  1. SYNTAX W ! I X'["?" W ?11,"I'm sorry, but I don't understand your answer. Please"
  1. W !,"Enter: YES (or press the RETURN key) if you want me to remove from"
  1. W !,?11,"your ",XQFL," File any pointers left over from incompletely"
  1. W !,?11,"deleted ",XQFL,". If such pointers do exist and are not"
  1. W !,?11,"removed, the ",XQFL," File (i.e. the menus) could become"
  1. W !,?11,"messed up by an INIT."
  1. W !!,"Enter: NO or ^ to continue on without effecting the ",XQFL," File."
  1. W ! G ENASK
  1. REMOVE D:%=1 OPFIX D:%=2 PFIX D:'% HFFIX W !,"Your ",XQFL," File is OK " I 'XUT W "(no bad pointers)."
  1. E W "now (",XUT," pointer" W:XUT>1 "s" W " fixed)."
  1. W ! S X="Y"
  1. Q
  1. OPFIX ;Kill any dangling pointers in the OPTION File (#19)
  1. N %,IX,J,XQ3
  1. S (IX,XUT)=0 ;XUT=Total Deletions
  1. F S IX=$O(^DIC(19,IX)) Q:'IX W:'(IX#100) ". " S (XQ3,J)=0 D L2 ;Loop through Options
  1. D NPF
  1. Q
  1. L2 ;One Option
  1. I '$D(^DIC(19,IX,10,0)) Q ;Not a Menu
  1. K ^DIC(19,IX,10,"B") ;Rebuild "B" X-ref
  1. F S J=$O(^DIC(19,IX,10,J)) Q:'J D ITEM ;Loop through menu items
  1. S (K,J)=0 F S J=$O(^DIC(19,IX,10,J)) Q:J'>0 S K=J ;K=Last item
  1. S J=^DIC(19,IX,10,0),^(0)=$P(J,"^",1,2)_"^"_K_"^"_XQ3 ;fix counters
  1. Q
  1. ;
  1. ITEM ;One Menu item
  1. N DA,DIK
  1. S K=+^DIC(19,IX,10,J,0)
  1. I $D(^DIC(19,K,0)) S XQ3=XQ3+1,^DIC(19,IX,10,"B",K,J)="" Q ;Y=No. of items
  1. W !,"Option ",$P(^DIC(19,IX,0),U,1)," points to missing option ",K
  1. ;S XUT=XUT+1 K ^DIC(19,IX,10,J) ;Kill invalid menu item
  1. S XUT=XUT+1,DIK="^DIC(19,DA(1),10,",DA=J,DA(1)=IX D ^DIK ;Trigger Menu-rebuild
  1. Q
  1. ;
  1. NPF ;Fix the New Person File Option Pointers
  1. N IX,I2,J,P,DIK,DIE,DR,DA,XUT
  1. S (XUT,IX)=0
  1. F S IX=$O(^VA(200,IX)) Q:'IX D
  1. . S P=+$G(^VA(200,IX,201))
  1. . I P,'$D(^DIC(19,P,0)) D
  1. . . W !,"User: ",$P(^VA(200,IX,0),U),", Primary Menu points to missing option ",P
  1. . . S XUT=XUT+1,DIE="^VA(200,",DA=IX,DR="201///@" D ^DIE
  1. . . Q
  1. . S I2=0
  1. . F S I2=$O(^VA(200,IX,203,I2)) Q:'I2 D
  1. . . S P=+$G(^VA(200,IX,203,I2,0))
  1. . . I P,'$D(^DIC(19,P,0)) D
  1. . . . W !,"User: ",$P(^VA(200,IX,0),U),", Secondary Menu points to missing option ",P
  1. . . . S XUT=XUT+1,DIK="^VA(200,DA(1),203,",DA=I2,DA(1)=IX D ^DIK
  1. . . . Q
  1. . . Q
  1. . S I2=0
  1. . F S I2=$O(^VA(200,IX,19.5,I2)) Q:'I2 D
  1. . . S P=+$G(^VA(200,IX,19.5,I2,0))
  1. . . I P,'$D(^DIC(19,P,0)) D
  1. . . . W !,"User: ",$P(^VA(200,IX,0),U),", Delegated option points to missing option ",P
  1. . . . S XUT=XUT+1,DIK="^VA(200,DA(1),19.5,",DA=I2,DA(1)=IX D ^DIK
  1. . . . Q
  1. . . Q
  1. . Q
  1. I XUT W !,"Menu pointers fixed."
  1. Q
  1. HFFIX ; Fix dangling pointers on help frame file
  1. N %
  1. S (XUT,IX)=0 F S IX=$O(^DIC(9.2,IX)) Q:IX'>0 I $D(^(IX,2)) D HF1,HF2,HF3
  1. Q
  1. HF1 S (Y,J)=0 F S J=$O(^DIC(9.2,IX,2,J)) Q:J'>0 I $D(^(J,0)) S K=$P(^(0),U,2),Y=Y+1 I $L(K),'$D(^DIC(9.2,K)) S Y=Y-1,XUT=XUT+1 K ^DIC(9.2,IX,2,J,0)
  1. Q
  1. HF2 S (K,J)=0 F S J=$O(^DIC(9.2,IX,2,J)) Q:J'>0 S K=J
  1. S J=^DIC(9.2,IX,2,0),^(0)=$P(J,U,1,2)_U_K_U_Y
  1. Q
  1. HF3 S K=":" F S K=$O(^DIC(9.2,IX,2,K)) Q:K="" S J=-1 F S J=$O(^DIC(9.2,IX,2,K,J)) Q:J="" D HF4
  1. Q
  1. HF4 S JJ=0 F S JJ=$O(^DIC(9.2,IX,2,K,J,JJ)) Q:JJ'>0 I '$D(^DIC(9.2,IX,2,JJ,0)) K ^DIC(9.2,IX,2,K,J,JJ)
  1. Q
  1. PFIX ;Kill any dangling pointers in the PROTOCOL File (#101)
  1. N %
  1. S (IX,XUT)=0 ;XUT=Total Deletions
  1. P1 S IX=$O(^ORD(101,IX)) I IX>0 S (Y,J)=0 G P2 ;Loop through protocols
  1. Q
  1. P2 S J=$O(^ORD(101,IX,10,J)) I J>0 G PITEM ;Loop through items
  1. I '$D(^ORD(101,IX,10,0)) G P1
  1. S (K,J)=0 F L=1:1 S J=$O(^ORD(101,IX,10,J)) Q:J'>0 S K=J ;K=Last item
  1. S J=^ORD(101,IX,10,0),^(0)=$P(J,"^",1,2)_"^"_K_"^"_Y ;fix counters
  1. G PXREFS
  1. PITEM S K=+^ORD(101,IX,10,J,0) I $D(^ORD(101,K,0)) S Y=Y+1 G P2 ;Y=No. of items
  1. W !,"Protocol ",$P(^ORD(101,IX,0),U,1)," points to missing protocol ",K
  1. ;S XUT=XUT+1 K ^ORD(101,IX,10,J) ;Kill invalid menu item
  1. S XUT=XUT+1,DIK="^ORD(101,IX,10,",DA=J,DA(1)=IX D ^DIK ;Delete invalid menu item
  1. G P2
  1. PXREFS S K=":"
  1. P3 S K=$O(^ORD(101,IX,10,K)) I K="" G P1 ;Loop through cross references
  1. S L=-1
  1. P4 S L=$O(^ORD(101,IX,10,K,L)) I L="" G P3
  1. S J=0
  1. P5 S J=$O(^ORD(101,IX,10,K,L,J)) I J'>0 G P4
  1. I '$D(^ORD(101,IX,10,J,0)) G PKILLXR ;kill xref to invalid item
  1. P6 S M=^ORD(101,IX,10,J,0) I (M=L)!(M[L_"^") G P5
  1. PKILLXR K ^ORD(101,IX,10,K,L,J) I $O(^ORD(101,IX,10,K,L,-1))="" K ^ORD(101,IX,10,K,L)
  1. G P5