XUGOT ; DBA/CJS - COMPARE LOCAL/NATIONAL CHECKSUMS REPORT ;10/20/2006
 ;;8.0;KERNEL;**369**;Jul 10, 1995;Build 27
 Q
LOAD ; -- use MFS to get ROUTINE file from FORUM (background job)
 W !!,">>>This processing will take about thirty minutes. Please wait..."
 D CLEAN
 D ARRAY^XUMF(9.8)
 D INPUT
 Q
 ;----------------------------
CLEAN ; clean all entries in subfile 9.818 if $G(^DIC(9.8,RTNIEN,6))=2 (national tracking)
 N RTNIEN,XUTR S RTNIEN=0
 F  S RTNIEN=$O(^DIC(9.8,RTNIEN)) Q:RTNIEN'>0  D
 . S XUTR=$P($G(^DIC(9.8,RTNIEN,6)),"^")
 . I XUTR="National - report" S XUTR=2
 . I XUTR=2 D CLN(RTNIEN) S $P(^DIC(9.8,RTNIEN,6),"^")=""
 Q
 ;------------------------------
CLN(RTNIEN) ; clean all entries in sub-file #9.818
 N XI S XI=0 F  S XI=$O(^DIC(9.8,RTNIEN,8,XI)) Q:XI'>0  D
 . N DA,DIK S DA(1)=RTNIEN,DA=XI,DIK="^DIC(9.8,"_DA(1)_","_"8," D ^DIK
 Q
 ;------------------------------
INPUT ; input routines' information in Routine file
 N IDX98,ERROR,NAME,HLFS,XXX,YYY,ZZZ,AAA,BBB,CCC,FDA,X,HFLS,NODE,XUSIEN
 S HLFS="^",IDX98=0
 F  S IDX98=$O(^TMP("XUMF ARRAY",$J,IDX98)) Q:'IDX98  D
 .S NODE=$G(^TMP("XUMF ARRAY",$J,IDX98)),NODE=$P(NODE,"^",2,99)
 .S NAME=$P(NODE,HLFS,1)
 . I $L(NAME)>8 Q
 .S XXX=$P(NODE,HLFS,2)
 . I XXX'="National - report" Q
 .S YYY=$P(NODE,HLFS,3)
 .S ZZZ=$P(NODE,HLFS,4)
 . I +$E(ZZZ,2,10)'>0 Q
 .S AAA=$P(NODE,HLFS,5)
 .S BBB=$P(NODE,HLFS,6)
 .S CCC=$P(NODE,HLFS,7)
 .S FDA(1,9.8,"?+1,",.01)=NAME
 .S FDA(1,9.8,"?+1,",1)="R"
 .;S FDA(1,9.8,"?+1,",6)=2
 .S FDA(1,9.8,"?+1,",7.1)=YYY
 .S FDA(1,9.8,"?+1,",7.2)=ZZZ
 .S FDA(1,9.8,"?+1,",7.3)=CCC
 .S FDA(1,9.818,"+2,?+1,",.01)=AAA
 .S FDA(1,9.818,"+2,?+1,",2)=BBB
 .D UPDATE^DIE("","FDA(1)")
 .D SETFLD6(NAME)
 ;
 K ^TMP("XUMF ARRAY",$J)
 Q
 ;
SETFLD6(NAME) ;
 N XUIEN S XUIEN=0
 S XUIEN=$$FIND1^DIC(9.8,"","MX",NAME,"","","ERR")
 I XUIEN'>0 Q
 I $P($G(^DIC(9.8,XUIEN,6)),"^")="" S $P(^DIC(9.8,XUIEN,6),"^")=2
 Q
 ; -------------------- FOR XUGOT1-------------------------------
PACK(RTN,SL) ; get package name
 N XUS,XUS1,XUS2 S (XUS,XUS1,XUS2)=""
 S XUS=$$RT(RTN) I XUS'>0 Q ""
 S XUS2=$P(XUS,"^",2)
 S XUS1=$$SL(SL) I XUS1'="" S XUS2=XUS1
 Q XUS2_"*"_+$P(XUS,"^",3)_"*"
 ;
XUN4(XUS) ;
 N XUN4,XUA,XUB,XUC
 I $G(XUS)="" Q ""
 S XUN4=+$P(XUS,"*",2) ;Last Version number from the last patch name
 I XUN4>0 Q XUN4
 S XUA=$L(XUS)
 F XUB=1:1:XUA S XUN4=+$E(XUS,XUB,XUA) I XUN4>0 Q
 Q XUN4
NPL2(IEN) ; get Package name from Patch multiple
 I '$D(^DIC(9.8,IEN,8,0)) Q ""
 N XUIEN,XUPK,XUPK1,XUPK2 S (XUPK2,XUPK1,XUPK)="",XUIEN=0
 F  S XUIEN=$O(^DIC(9.8,IEN,8,XUIEN)) Q:XUIEN'>0  D
 . S XUA=$G(^DIC(9.8,IEN,8,XUIEN,0)),XUPK2=$P(XUA,"^"),XUPK=$P(XUPK2,"*"),XUPK2=$P(XUPK2,"*",2)
 . I XUPK'="",$D(^DIC(9.4,"C",XUPK)) S XUPK1=XUPK_"*"_XUPK2
 Q XUPK1
 ;
LSLPN(SL) ; return package name from the second line (piece 3rd of the second line)
 Q $$TRIM^XLFSTR($P(SL,";",4))
 ;
SL(SL) ; get Prefix_Package from the second line
 N PCK,XUST,XUIEN,Y,X
 S (PCK,XUIEN)="",XUST=$$LSLPN(SL)
 S X=XUST X ^%ZOSF("UPPERCASE") I Y'="" S XUIEN=$O(^DIC(9.4,"B",Y,0))
 I XUIEN S PCK=$P($G(^DIC(9.4,XUIEN,0)),"^",2)
 Q PCK
 ;
 ;-----------------------CHECK PACKAGE NAME AND VERSION---------------------------
RT(RTN) ; get Package and Version base on routine name
 I $G(RTN)="" Q ""
 N XUST,VERSION,XUIEN,XUI,PCK,PCKNAME,XUQUIT S (PCK,PCKNAME,XUST,VERSION)="",XUIEN=""
 F XUI=4,3,2 I $D(^DIC(9.4,"C",$E(RTN,1,XUI))) D  Q:XUIEN>0
 . S XUIEN=$O(^DIC(9.4,"C",$E(RTN,1,XUI),0)) ;IEN FOR PACKAGE
 . I XUIEN="" S XUIEN=-1 Q  ;no package found (yet)
 . I $D(^DIC(9.4,XUIEN,0)) S XUST=$G(^DIC(9.4,XUIEN,0)),VERSION=$G(^DIC(9.4,XUIEN,"VERSION")),PCKNAME=$P(XUST,"^",1),PCK=$P(XUST,"^",2)
 Q XUIEN_"^"_PCK_"^"_VERSION_"^"_PCKNAME
 ;
GETSL(RTN) ;
 N XUSL
 N DIF,XCNP K ^TMP($J,369)
 S DIF="^TMP($J,369,",XCNP=0 X ^%ZOSF("LOAD")
 Q $G(^TMP($J,369,2,0))
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HXUGOT   3888     printed  Sep 23, 2025@19:45:41                                                                                                                                                                                                       Page 2
XUGOT     ; DBA/CJS - COMPARE LOCAL/NATIONAL CHECKSUMS REPORT ;10/20/2006
 +1       ;;8.0;KERNEL;**369**;Jul 10, 1995;Build 27
 +2        QUIT 
LOAD      ; -- use MFS to get ROUTINE file from FORUM (background job)
 +1        WRITE !!,">>>This processing will take about thirty minutes. Please wait..."
 +2        DO CLEAN
 +3        DO ARRAY^XUMF(9.8)
 +4        DO INPUT
 +5        QUIT 
 +6       ;----------------------------
CLEAN     ; clean all entries in subfile 9.818 if $G(^DIC(9.8,RTNIEN,6))=2 (national tracking)
 +1        NEW RTNIEN,XUTR
           SET RTNIEN=0
 +2        FOR 
               SET RTNIEN=$ORDER(^DIC(9.8,RTNIEN))
               if RTNIEN'>0
                   QUIT 
               Begin DoDot:1
 +3                SET XUTR=$PIECE($GET(^DIC(9.8,RTNIEN,6)),"^")
 +4                IF XUTR="National - report"
                       SET XUTR=2
 +5                IF XUTR=2
                       DO CLN(RTNIEN)
                       SET $PIECE(^DIC(9.8,RTNIEN,6),"^")=""
               End DoDot:1
 +6        QUIT 
 +7       ;------------------------------
CLN(RTNIEN) ; clean all entries in sub-file #9.818
 +1        NEW XI
           SET XI=0
           FOR 
               SET XI=$ORDER(^DIC(9.8,RTNIEN,8,XI))
               if XI'>0
                   QUIT 
               Begin DoDot:1
 +2                NEW DA,DIK
                   SET DA(1)=RTNIEN
                   SET DA=XI
                   SET DIK="^DIC(9.8,"_DA(1)_","_"8,"
                   DO ^DIK
               End DoDot:1
 +3        QUIT 
 +4       ;------------------------------
INPUT     ; input routines' information in Routine file
 +1        NEW IDX98,ERROR,NAME,HLFS,XXX,YYY,ZZZ,AAA,BBB,CCC,FDA,X,HFLS,NODE,XUSIEN
 +2        SET HLFS="^"
           SET IDX98=0
 +3        FOR 
               SET IDX98=$ORDER(^TMP("XUMF ARRAY",$JOB,IDX98))
               if 'IDX98
                   QUIT 
               Begin DoDot:1
 +4                SET NODE=$GET(^TMP("XUMF ARRAY",$JOB,IDX98))
                   SET NODE=$PIECE(NODE,"^",2,99)
 +5                SET NAME=$PIECE(NODE,HLFS,1)
 +6                IF $LENGTH(NAME)>8
                       QUIT 
 +7                SET XXX=$PIECE(NODE,HLFS,2)
 +8                IF XXX'="National - report"
                       QUIT 
 +9                SET YYY=$PIECE(NODE,HLFS,3)
 +10               SET ZZZ=$PIECE(NODE,HLFS,4)
 +11               IF +$EXTRACT(ZZZ,2,10)'>0
                       QUIT 
 +12               SET AAA=$PIECE(NODE,HLFS,5)
 +13               SET BBB=$PIECE(NODE,HLFS,6)
 +14               SET CCC=$PIECE(NODE,HLFS,7)
 +15               SET FDA(1,9.8,"?+1,",.01)=NAME
 +16               SET FDA(1,9.8,"?+1,",1)="R"
 +17      ;S FDA(1,9.8,"?+1,",6)=2
 +18               SET FDA(1,9.8,"?+1,",7.1)=YYY
 +19               SET FDA(1,9.8,"?+1,",7.2)=ZZZ
 +20               SET FDA(1,9.8,"?+1,",7.3)=CCC
 +21               SET FDA(1,9.818,"+2,?+1,",.01)=AAA
 +22               SET FDA(1,9.818,"+2,?+1,",2)=BBB
 +23               DO UPDATE^DIE("","FDA(1)")
 +24               DO SETFLD6(NAME)
               End DoDot:1
 +25      ;
 +26       KILL ^TMP("XUMF ARRAY",$JOB)
 +27       QUIT 
 +28      ;
SETFLD6(NAME) ;
 +1        NEW XUIEN
           SET XUIEN=0
 +2        SET XUIEN=$$FIND1^DIC(9.8,"","MX",NAME,"","","ERR")
 +3        IF XUIEN'>0
               QUIT 
 +4        IF $PIECE($GET(^DIC(9.8,XUIEN,6)),"^")=""
               SET $PIECE(^DIC(9.8,XUIEN,6),"^")=2
 +5        QUIT 
 +6       ; -------------------- FOR XUGOT1-------------------------------
PACK(RTN,SL) ; get package name
 +1        NEW XUS,XUS1,XUS2
           SET (XUS,XUS1,XUS2)=""
 +2        SET XUS=$$RT(RTN)
           IF XUS'>0
               QUIT ""
 +3        SET XUS2=$PIECE(XUS,"^",2)
 +4        SET XUS1=$$SL(SL)
           IF XUS1'=""
               SET XUS2=XUS1
 +5        QUIT XUS2_"*"_+$PIECE(XUS,"^",3)_"*"
 +6       ;
XUN4(XUS) ;
 +1        NEW XUN4,XUA,XUB,XUC
 +2        IF $GET(XUS)=""
               QUIT ""
 +3       ;Last Version number from the last patch name
           SET XUN4=+$PIECE(XUS,"*",2)
 +4        IF XUN4>0
               QUIT XUN4
 +5        SET XUA=$LENGTH(XUS)
 +6        FOR XUB=1:1:XUA
               SET XUN4=+$EXTRACT(XUS,XUB,XUA)
               IF XUN4>0
                   QUIT 
 +7        QUIT XUN4
NPL2(IEN) ; get Package name from Patch multiple
 +1        IF '$DATA(^DIC(9.8,IEN,8,0))
               QUIT ""
 +2        NEW XUIEN,XUPK,XUPK1,XUPK2
           SET (XUPK2,XUPK1,XUPK)=""
           SET XUIEN=0
 +3        FOR 
               SET XUIEN=$ORDER(^DIC(9.8,IEN,8,XUIEN))
               if XUIEN'>0
                   QUIT 
               Begin DoDot:1
 +4                SET XUA=$GET(^DIC(9.8,IEN,8,XUIEN,0))
                   SET XUPK2=$PIECE(XUA,"^")
                   SET XUPK=$PIECE(XUPK2,"*")
                   SET XUPK2=$PIECE(XUPK2,"*",2)
 +5                IF XUPK'=""
                       IF $DATA(^DIC(9.4,"C",XUPK))
                           SET XUPK1=XUPK_"*"_XUPK2
               End DoDot:1
 +6        QUIT XUPK1
 +7       ;
LSLPN(SL) ; return package name from the second line (piece 3rd of the second line)
 +1        QUIT $$TRIM^XLFSTR($PIECE(SL,";",4))
 +2       ;
SL(SL)    ; get Prefix_Package from the second line
 +1        NEW PCK,XUST,XUIEN,Y,X
 +2        SET (PCK,XUIEN)=""
           SET XUST=$$LSLPN(SL)
 +3        SET X=XUST
           XECUTE ^%ZOSF("UPPERCASE")
           IF Y'=""
               SET XUIEN=$ORDER(^DIC(9.4,"B",Y,0))
 +4        IF XUIEN
               SET PCK=$PIECE($GET(^DIC(9.4,XUIEN,0)),"^",2)
 +5        QUIT PCK
 +6       ;
 +7       ;-----------------------CHECK PACKAGE NAME AND VERSION---------------------------
RT(RTN)   ; get Package and Version base on routine name
 +1        IF $GET(RTN)=""
               QUIT ""
 +2        NEW XUST,VERSION,XUIEN,XUI,PCK,PCKNAME,XUQUIT
           SET (PCK,PCKNAME,XUST,VERSION)=""
           SET XUIEN=""
 +3        FOR XUI=4,3,2
               IF $DATA(^DIC(9.4,"C",$EXTRACT(RTN,1,XUI)))
                   Begin DoDot:1
 +4       ;IEN FOR PACKAGE
                       SET XUIEN=$ORDER(^DIC(9.4,"C",$EXTRACT(RTN,1,XUI),0))
 +5       ;no package found (yet)
                       IF XUIEN=""
                           SET XUIEN=-1
                           QUIT 
 +6                    IF $DATA(^DIC(9.4,XUIEN,0))
                           SET XUST=$GET(^DIC(9.4,XUIEN,0))
                           SET VERSION=$GET(^DIC(9.4,XUIEN,"VERSION"))
                           SET PCKNAME=$PIECE(XUST,"^",1)
                           SET PCK=$PIECE(XUST,"^",2)
                   End DoDot:1
                   if XUIEN>0
                       QUIT 
 +7        QUIT XUIEN_"^"_PCK_"^"_VERSION_"^"_PCKNAME
 +8       ;
GETSL(RTN) ;
 +1        NEW XUSL
 +2        NEW DIF,XCNP
           KILL ^TMP($JOB,369)
 +3        SET DIF="^TMP($J,369,"
           SET XCNP=0
           XECUTE ^%ZOSF("LOAD")
 +4        QUIT $GET(^TMP($JOB,369,2,0))