- %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