%AUFIXPT ; FIX ALL "PT" NODES [ 07/29/87 9:19 AM ]
;
; This routine fixes all "PT" nodes for files 1 through the
; highest file number in the current UCI.
;
W !!,"This routine insures the ""PT"" node of each FileMan file is correct.",!
W !!,"Now checking false positives.",!
S U="^"
S AUFFILE=.99999999 F AUFL=0:0 S AUFFILE=$O(^DD(AUFFILE)) Q:AUFFILE'=+AUFFILE I $D(^DD(AUFFILE,0,"PT")) W !,AUFFILE D FPOS
W !!,"Now checking false negatives.",!
D FNEG
K AUFFILE,AUFL
W !!,"DONE",!
Q
;
FPOS ; CHECK FOR FALSE POSITIVES
S AUFPFILE="" F AUFL=0:0 S AUFPFILE=$O(^DD(AUFFILE,0,"PT",AUFPFILE)) Q:AUFPFILE="" S AUFPFLD="" F AUFL=0:0 S AUFPFLD=$O(^DD(AUFFILE,0,"PT",AUFPFILE,AUFPFLD)) Q:AUFPFLD="" D CHKIT
K AUFPFILE,AUFPFLD,AUFX
Q
;
CHKIT ;
W "."
I '$D(^DD(AUFPFILE)) W "|" K ^DD(AUFFILE,0,"PT",AUFPFILE) Q
I '$D(^DD(AUFPFILE,AUFPFLD)) W "|" K ^DD(AUFFILE,0,"PT",AUFPFILE,AUFPFLD) Q
S AUFX=$P(^DD(AUFPFILE,AUFPFLD,0),U,2)
I AUFX["P",AUFX[AUFFILE Q
I AUFX["V",$D(^DD(AUFPFILE,AUFPFLD,"V","B",AUFFILE)) Q
W "|" K ^DD(AUFFILE,0,"PT",AUFPFILE,AUFPFLD)
Q
;
FNEG ; CHECK FOR FALSE NEGATIVES
S AUFFILE=.99999999 F AUFL=0:0 S AUFFILE=$O(^DD(AUFFILE)) Q:AUFFILE'=+AUFFILE W !,AUFFILE S AUFFLD=0 F AUFL=0:0 S AUFFLD=$O(^DD(AUFFILE,AUFFLD)) Q:AUFFLD'=+AUFFLD D:$D(^(AUFFLD,0))#2 PTRCHK
K AUFFILE,AUFFLD,AUFX,AUFI
Q
;
PTRCHK ;
S AUFX=$P(^(0),U,2)
I AUFX["V" D PTRCHK2 Q
Q:AUFX'["P"
F AUFI=1:1:$L(AUFX)+1 Q:$E(AUFX,AUFI)?1N
Q:AUFI>$L(AUFX)
S AUFX=$E(AUFX,AUFI,999),AUFX=+AUFX
Q:'AUFX
Q:AUFX<1 ;*** DOES NOT MESS WITH FILE NUMBERS < 1 ***
W "."
Q:'$D(^DIC(AUFX))
Q:'$D(^DD(AUFX,0))
I '$D(^DD(AUFX,0,"PT",AUFFILE,AUFFLD)) W "|" S ^(AUFFLD)=""
Q
;
PTRCHK2 ; VARIABLE POINTER CHECK
S AUFX="" F AUFL=0:0 S AUFX=$O(^DD(AUFFILE,AUFFLD,"V","B",AUFX)) Q:AUFX="" I '$D(^DD(AUFX,0,"PT",AUFFILE,AUFFLD)) W "|" S ^(AUFFLD)=""
Q
%AUFIXPT ; FIX ALL "PT" NODES [ 07/29/87 9:19 AM ]
+1 ;
+2 ; This routine fixes all "PT" nodes for files 1 through the
+3 ; highest file number in the current UCI.
+4 ;
+5 WRITE !!,"This routine insures the ""PT"" node of each FileMan file is correct.",!
+6 WRITE !!,"Now checking false positives.",!
+7 SET U="^"
+8 SET AUFFILE=.99999999
FOR AUFL=0:0
SET AUFFILE=$ORDER(^DD(AUFFILE))
IF AUFFILE'=+AUFFILE
QUIT
IF $DATA(^DD(AUFFILE,0,"PT"))
WRITE !,AUFFILE
DO FPOS
+9 WRITE !!,"Now checking false negatives.",!
+10 DO FNEG
+11 KILL AUFFILE,AUFL
+12 WRITE !!,"DONE",!
+13 QUIT
+14 ;
FPOS ; CHECK FOR FALSE POSITIVES
+1 SET AUFPFILE=""
FOR AUFL=0:0
SET AUFPFILE=$ORDER(^DD(AUFFILE,0,"PT",AUFPFILE))
IF AUFPFILE=""
QUIT
SET AUFPFLD=""
FOR AUFL=0:0
SET AUFPFLD=$ORDER(^DD(AUFFILE,0,"PT",AUFPFILE,AUFPFLD))
IF AUFPFLD=""
QUIT
DO CHKIT
+2 KILL AUFPFILE,AUFPFLD,AUFX
+3 QUIT
+4 ;
CHKIT ;
+1 WRITE "."
+2 IF '$DATA(^DD(AUFPFILE))
WRITE "|"
KILL ^DD(AUFFILE,0,"PT",AUFPFILE)
QUIT
+3 IF '$DATA(^DD(AUFPFILE,AUFPFLD))
WRITE "|"
KILL ^DD(AUFFILE,0,"PT",AUFPFILE,AUFPFLD)
QUIT
+4 SET AUFX=$PIECE(^DD(AUFPFILE,AUFPFLD,0),U,2)
+5 IF AUFX["P"
IF AUFX[AUFFILE
QUIT
+6 IF AUFX["V"
IF $DATA(^DD(AUFPFILE,AUFPFLD,"V","B",AUFFILE))
QUIT
+7 WRITE "|"
KILL ^DD(AUFFILE,0,"PT",AUFPFILE,AUFPFLD)
+8 QUIT
+9 ;
FNEG ; CHECK FOR FALSE NEGATIVES
+1 SET AUFFILE=.99999999
FOR AUFL=0:0
SET AUFFILE=$ORDER(^DD(AUFFILE))
IF AUFFILE'=+AUFFILE
QUIT
WRITE !,AUFFILE
SET AUFFLD=0
FOR AUFL=0:0
SET AUFFLD=$ORDER(^DD(AUFFILE,AUFFLD))
IF AUFFLD'=+AUFFLD
QUIT
IF $DATA(^(AUFFLD,0))#2
DO PTRCHK
+2 KILL AUFFILE,AUFFLD,AUFX,AUFI
+3 QUIT
+4 ;
PTRCHK ;
+1 SET AUFX=$PIECE(^(0),U,2)
+2 IF AUFX["V"
DO PTRCHK2
QUIT
+3 IF AUFX'["P"
QUIT
+4 FOR AUFI=1:1:$LENGTH(AUFX)+1
IF $EXTRACT(AUFX,AUFI)?1N
QUIT
+5 IF AUFI>$LENGTH(AUFX)
QUIT
+6 SET AUFX=$EXTRACT(AUFX,AUFI,999)
SET AUFX=+AUFX
+7 IF 'AUFX
QUIT
+8 ;*** DOES NOT MESS WITH FILE NUMBERS < 1 ***
IF AUFX<1
QUIT
+9 WRITE "."
+10 IF '$DATA(^DIC(AUFX))
QUIT
+11 IF '$DATA(^DD(AUFX,0))
QUIT
+12 IF '$DATA(^DD(AUFX,0,"PT",AUFFILE,AUFFLD))
WRITE "|"
SET ^(AUFFLD)=""
+13 QUIT
+14 ;
PTRCHK2 ; VARIABLE POINTER CHECK
+1 SET AUFX=""
FOR AUFL=0:0
SET AUFX=$ORDER(^DD(AUFFILE,AUFFLD,"V","B",AUFX))
IF AUFX=""
QUIT
IF '$DATA(^DD(AUFX,0,"PT",AUFFILE,AUFFLD))
WRITE "|"
SET ^(AUFFLD)=""
+2 QUIT