ESPDUP ;ALBANY/CJM - DELETES DUPLICATE ENTRIES IN MASTER NAME INDEX FILE;8/92
 ;;1.0;POLICE & SECURITY;**17**;Mar 31, 1994
 ;
EN ;Allows duplicate names to be deleted from the Master Name Index file.
 ;The user is required to select the name which is the 'good' one.
 ;
 N NAME
 S (NAME("DELETE"),NAME("KEEP"))=""
 W !!,"Which name do you want to delete from the Master Name Index?"
 S NAME("DELETE")=$$SELECT
 Q:'NAME("DELETE")
 ;
 W !!,"** PLEASE NOTE **"
 W !,"Entries in the Master Name Index file are referenced from many other files."
 W !,"Before you are allowed to delete a duplicate entry you must first indicate"
 W !,"the correct entry to keep so that all references in all files can be changed"
 W !,"to the correct entry."
 W !!,"Which entry do you want to keep?",!
 ;
 F  D  Q:(NAME("DELETE")'=NAME("KEEP"))
 .S NAME("KEEP")=$$SELECT
 .I NAME("DELETE")=NAME("KEEP") W !,"You must select a different entry!",!
 Q:'NAME("KEEP")
 ;
 D:$$RUSURE(NAME("DELETE"),NAME("KEEP"))
 .;
 .;first update all the xrefs, replacing NAME("DELETE") with NAME("KEEP")
 .D REPLACE(NAME("DELETE"),NAME("KEEP"))
 .;
 .;next delete the duplicate entry
 .D DELETE(NAME("DELETE"))
 .W !!,"DONE",!!
 Q
 ;
SELECT() ;
 ;asks user to select from file 910
 ;returns ptr to file 910, the Master Name Index
 ;
 N Y,DINUM,DIC,X,DTIME,DLAYGO
 S DIC=910,DIC(0)="AEFMQ"
 S DIC("A")="Select a name: "
 D ^DIC
 I (Y=-1)!$D(DTOUT)!$D(DUOUT) Q 0
 Q +Y
 ;
REPLACE(OLD,NEW) ;
 ;replaces all pointers to file 910 = OLD with NEW
 ;
 N REF,COUNT,REC,SUBREC
 S COUNT=1
 F  S REF=$P($T(REFS+COUNT),";;",2) Q:(REF="")  D
 .S COUNT=COUNT+1
 .S REF("FILE")=$P(REF,"^"),REF("XREF")=$P(REF,"^",2),REF("SUB")=$P(REF,"^",3),REF("FIELD")=$P(REF,"^",4)
 .Q:REF("FILE")=""
 .Q:REF("XREF")=""
 .Q:REF("FIELD")=""
 .;
 .S REC=0 F  S REC=$O(^ESP(REF("FILE"),REF("XREF"),OLD,REC)) Q:'REC  D
 ..I REF("SUB")="" D
 ...D EDIT(REF("FILE"),REC,REF("FIELD"),NEW)
 ..E  S SUBREC=0 F  S SUBREC=$O(^ESP(REF("FILE"),REF("XREF"),OLD,REC,SUBREC)) Q:'SUBREC  D EDIT(REF("FILE"),REC,REF("FIELD"),NEW,REF("SUB"),SUBREC)
 Q
 ;
DELETE(OLD) ;
 N DIK,DA
 S DIK="^ESP(910,",DA=OLD
 D ^DIK
 W !,"DELETED",!
 Q
 ;
RUSURE(OLD,NEW) ;
 ;
 N DIR,DA,X,Y
 S DIR(0)="Y"
 S DIR("B")="NO"
 S DIR("A")="Replace "_$P($G(^ESP(910,OLD,0)),"^")_" with "_$P($G(^ESP(910,NEW,0)),"^")_" and then delete"
 W !
 D ^DIR
 Q Y
 ;
EDIT(FILE,REC,FIELD,VALUE,SUB,SUBREC) ;
 N DIE,DA,DR
 S DIE="^ESP("_FILE_","
 S DR=FIELD_"////"_VALUE
 I $G(SUB)="" D
 .S DA=REC
 .D ^DIE
 E  D
 .Q:'SUBREC
 .S DIE=DIE_REC_","_SUB_","
 .S DA(1)=REC
 .S DA=SUBREC
 .D ^DIE
 Q
 ;
 ;
REFS ;;<file #><xref><subscript if in multiple><field #>
 ;;910.2^D^^.03
 ;;910.2^I^^4.05
 ;;910.2^J^^5.01
 ;;910.2^V^^6.01
 ;;910.2^BI^^6.02
 ;;910.2^W^^6.03
 ;;910.2^P^^6.04
 ;;910.2^G^^6.05
 ;;910.8^C^1^.04
 ;;910.8^D^5^.03
 ;;912^D^20^.02
 ;;912^E^30^.02
 ;;912^G^40^.02
 ;;912^I^50^.02
 ;;912^J^80^.11
 ;;913^B^^.01
 ;;914^E^^.09
 ;;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HESPDUP   3025     printed  Sep 23, 2025@20:05:59                                                                                                                                                                                                      Page 2
ESPDUP    ;ALBANY/CJM - DELETES DUPLICATE ENTRIES IN MASTER NAME INDEX FILE;8/92
 +1       ;;1.0;POLICE & SECURITY;**17**;Mar 31, 1994
 +2       ;
EN        ;Allows duplicate names to be deleted from the Master Name Index file.
 +1       ;The user is required to select the name which is the 'good' one.
 +2       ;
 +3        NEW NAME
 +4        SET (NAME("DELETE"),NAME("KEEP"))=""
 +5        WRITE !!,"Which name do you want to delete from the Master Name Index?"
 +6        SET NAME("DELETE")=$$SELECT
 +7        if 'NAME("DELETE")
               QUIT 
 +8       ;
 +9        WRITE !!,"** PLEASE NOTE **"
 +10       WRITE !,"Entries in the Master Name Index file are referenced from many other files."
 +11       WRITE !,"Before you are allowed to delete a duplicate entry you must first indicate"
 +12       WRITE !,"the correct entry to keep so that all references in all files can be changed"
 +13       WRITE !,"to the correct entry."
 +14       WRITE !!,"Which entry do you want to keep?",!
 +15      ;
 +16       FOR 
               Begin DoDot:1
 +17               SET NAME("KEEP")=$$SELECT
 +18               IF NAME("DELETE")=NAME("KEEP")
                       WRITE !,"You must select a different entry!",!
               End DoDot:1
               if (NAME("DELETE")'=NAME("KEEP"))
                   QUIT 
 +19       if 'NAME("KEEP")
               QUIT 
 +20      ;
 +21       if $$RUSURE(NAME("DELETE"),NAME("KEEP"))
               Begin DoDot:1
 +22      ;
 +23      ;first update all the xrefs, replacing NAME("DELETE") with NAME("KEEP")
 +24               DO REPLACE(NAME("DELETE"),NAME("KEEP"))
 +25      ;
 +26      ;next delete the duplicate entry
 +27               DO DELETE(NAME("DELETE"))
 +28               WRITE !!,"DONE",!!
               End DoDot:1
 +29       QUIT 
 +30      ;
SELECT()  ;
 +1       ;asks user to select from file 910
 +2       ;returns ptr to file 910, the Master Name Index
 +3       ;
 +4        NEW Y,DINUM,DIC,X,DTIME,DLAYGO
 +5        SET DIC=910
           SET DIC(0)="AEFMQ"
 +6        SET DIC("A")="Select a name: "
 +7        DO ^DIC
 +8        IF (Y=-1)!$DATA(DTOUT)!$DATA(DUOUT)
               QUIT 0
 +9        QUIT +Y
 +10      ;
REPLACE(OLD,NEW) ;
 +1       ;replaces all pointers to file 910 = OLD with NEW
 +2       ;
 +3        NEW REF,COUNT,REC,SUBREC
 +4        SET COUNT=1
 +5        FOR 
               SET REF=$PIECE($TEXT(REFS+COUNT),";;",2)
               if (REF="")
                   QUIT 
               Begin DoDot:1
 +6                SET COUNT=COUNT+1
 +7                SET REF("FILE")=$PIECE(REF,"^")
                   SET REF("XREF")=$PIECE(REF,"^",2)
                   SET REF("SUB")=$PIECE(REF,"^",3)
                   SET REF("FIELD")=$PIECE(REF,"^",4)
 +8                if REF("FILE")=""
                       QUIT 
 +9                if REF("XREF")=""
                       QUIT 
 +10               if REF("FIELD")=""
                       QUIT 
 +11      ;
 +12               SET REC=0
                   FOR 
                       SET REC=$ORDER(^ESP(REF("FILE"),REF("XREF"),OLD,REC))
                       if 'REC
                           QUIT 
                       Begin DoDot:2
 +13                       IF REF("SUB")=""
                               Begin DoDot:3
 +14                               DO EDIT(REF("FILE"),REC,REF("FIELD"),NEW)
                               End DoDot:3
 +15                      IF '$TEST
                               SET SUBREC=0
                               FOR 
                                   SET SUBREC=$ORDER(^ESP(REF("FILE"),REF("XREF"),OLD,REC,SUBREC))
                                   if 'SUBREC
                                       QUIT 
                                   DO EDIT(REF("FILE"),REC,REF("FIELD"),NEW,REF("SUB"),SUBREC)
                       End DoDot:2
               End DoDot:1
 +16       QUIT 
 +17      ;
DELETE(OLD) ;
 +1        NEW DIK,DA
 +2        SET DIK="^ESP(910,"
           SET DA=OLD
 +3        DO ^DIK
 +4        WRITE !,"DELETED",!
 +5        QUIT 
 +6       ;
RUSURE(OLD,NEW) ;
 +1       ;
 +2        NEW DIR,DA,X,Y
 +3        SET DIR(0)="Y"
 +4        SET DIR("B")="NO"
 +5        SET DIR("A")="Replace "_$PIECE($GET(^ESP(910,OLD,0)),"^")_" with "_$PIECE($GET(^ESP(910,NEW,0)),"^")_" and then delete"
 +6        WRITE !
 +7        DO ^DIR
 +8        QUIT Y
 +9       ;
EDIT(FILE,REC,FIELD,VALUE,SUB,SUBREC) ;
 +1        NEW DIE,DA,DR
 +2        SET DIE="^ESP("_FILE_","
 +3        SET DR=FIELD_"////"_VALUE
 +4        IF $GET(SUB)=""
               Begin DoDot:1
 +5                SET DA=REC
 +6                DO ^DIE
               End DoDot:1
 +7       IF '$TEST
               Begin DoDot:1
 +8                if 'SUBREC
                       QUIT 
 +9                SET DIE=DIE_REC_","_SUB_","
 +10               SET DA(1)=REC
 +11               SET DA=SUBREC
 +12               DO ^DIE
               End DoDot:1
 +13       QUIT 
 +14      ;
 +15      ;
REFS      ;;<file #><xref><subscript if in multiple><field #>
 +1       ;;910.2^D^^.03
 +2       ;;910.2^I^^4.05
 +3       ;;910.2^J^^5.01
 +4       ;;910.2^V^^6.01
 +5       ;;910.2^BI^^6.02
 +6       ;;910.2^W^^6.03
 +7       ;;910.2^P^^6.04
 +8       ;;910.2^G^^6.05
 +9       ;;910.8^C^1^.04
 +10      ;;910.8^D^5^.03
 +11      ;;912^D^20^.02
 +12      ;;912^E^30^.02
 +13      ;;912^G^40^.02
 +14      ;;912^I^50^.02
 +15      ;;912^J^80^.11
 +16      ;;913^B^^.01
 +17      ;;914^E^^.09
 +18      ;;