| 1 | PXRMEXCS ; SLC/PKR - Routines to compute checksums. ;07/27/2007
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
 | 
|---|
| 3 |  ;====================================================
 | 
|---|
| 4 | CHECKSUM(ATTR,START,END) ;Get the the checksum for a packed reminder
 | 
|---|
| 5 |  ;component and load it into the attribute array.
 | 
|---|
| 6 |  N CS,LINE
 | 
|---|
| 7 |  ;If checksum is in packed component return it otherwise calculate it.
 | 
|---|
| 8 |  I ATTR("FILE NUMBER")=0 D
 | 
|---|
| 9 |  . S LINE=^PXD(811.8,PXRMRIEN,100,START-3,0)
 | 
|---|
| 10 |  . S CS=$$GETTAGV^PXRMEXU3(LINE,"<CHECKSUM>")
 | 
|---|
| 11 |  . I CS="" S CS=$$PRTNCS(PXRMRIEN,START,END)
 | 
|---|
| 12 |  I ATTR("FILE NUMBER")>0 D
 | 
|---|
| 13 |  . S LINE=^PXD(811.8,PXRMRIEN,100,START-2,0)
 | 
|---|
| 14 |  . S CS=$$GETTAGV^PXRMEXU3(LINE,"<CHECKSUM>")
 | 
|---|
| 15 |  . I CS="" S CS=$$PFDACS(PXRMRIEN,START,END)
 | 
|---|
| 16 |  S ATTR("CHECKSUM")=CS
 | 
|---|
| 17 |  Q
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ;====================================================
 | 
|---|
| 20 | DIQOUTCS(DIQOUT) ;Return checksum for a processed DIQOUT array.
 | 
|---|
| 21 |  N CS,DATA,FIELD,FNUM,IENS,IND,SFN,STRING,TARGET,TEXT,WP
 | 
|---|
| 22 |  S FNUM=$O(DIQOUT(""))
 | 
|---|
| 23 |  D FIELD^DID(FNUM,"EDIT HISTORY","","SPECIFIER","TARGET")
 | 
|---|
| 24 |  S SFN=+$G(TARGET("SPECIFIER"))
 | 
|---|
| 25 |  S (CS,FNUM)=0
 | 
|---|
| 26 |  F  S FNUM=$O(DIQOUT(FNUM)) Q:FNUM=""  D
 | 
|---|
| 27 |  . I FNUM=SFN Q
 | 
|---|
| 28 |  . S IENS=""
 | 
|---|
| 29 |  . F  S IENS=$O(DIQOUT(FNUM,IENS)) Q:IENS=""  D
 | 
|---|
| 30 |  .. S FIELD=0
 | 
|---|
| 31 |  .. F  S FIELD=$O(DIQOUT(FNUM,IENS,FIELD)) Q:FIELD=""  D
 | 
|---|
| 32 |  ... S DATA=DIQOUT(FNUM,IENS,FIELD)
 | 
|---|
| 33 |  ... S TEXT=FNUM_$L(IENS,",")_FIELD_DATA
 | 
|---|
| 34 |  ... S CS=$$CRC32^XLFCRC(TEXT,CS)
 | 
|---|
| 35 |  ... I DATA["WP-start" F IND=1:1:$P(DATA,"~",2) D
 | 
|---|
| 36 |  .... S TEXT=DIQOUT(FNUM,IENS,FIELD,IND)
 | 
|---|
| 37 |  .... S CS=$$CRC32^XLFCRC(TEXT,CS)
 | 
|---|
| 38 |  Q CS
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  ;====================================================
 | 
|---|
| 41 | FILE(FILENUM,IEN) ;Return checksum for entry IEN in file FILENUM.
 | 
|---|
| 42 |  N CS,DIQOUT,IENROOT,MSG
 | 
|---|
| 43 |  D GETS^DIQ(FILENUM,IEN,"**","N","DIQOUT","MSG")
 | 
|---|
| 44 |  ;Remove edit history from all reminder files.
 | 
|---|
| 45 |  D RMEH^PXRMEXPU(FILENUM,.DIQOUT,1)
 | 
|---|
| 46 |  ;Convert the iens to the FDA adding form.
 | 
|---|
| 47 |  D CONTOFDA^PXRMEXPU(.DIQOUT,.IENROOT)
 | 
|---|
| 48 |  S CS=$$DIQOUTCS(.DIQOUT)
 | 
|---|
| 49 |  Q CS
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  ;====================================================
 | 
|---|
| 52 | HFCS(PATH,FILENAME) ;Return checksum for host file.
 | 
|---|
| 53 |  N CS,GBL,GBLZISH,SUCCESS
 | 
|---|
| 54 |  K ^TMP($J,"PXRMHFCS")
 | 
|---|
| 55 |  S GBL="^TMP($J,""PXRMHFCS"")"
 | 
|---|
| 56 |  S GBLZISH="^TMP($J,""PXRMHFCS"",1)"
 | 
|---|
| 57 |  S GBLZISH=$NA(@GBLZISH)
 | 
|---|
| 58 |  S SUCCESS=$$FTG^%ZISH(PATH,FILENAME,GBLZISH,3)
 | 
|---|
| 59 |  S CS=$S(SUCCESS:$$HFCSGBL(GBL),1:-1)
 | 
|---|
| 60 |  K ^TMP($J,"PXRMHFCS")
 | 
|---|
| 61 |  Q CS
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  ;====================================================
 | 
|---|
| 64 | HFCSGBL(GBL) ;Return checksum for host file loaded into global GBL.
 | 
|---|
| 65 |  N CS,IND,LINE
 | 
|---|
| 66 |  S (CS,IND)=0
 | 
|---|
| 67 |  F  S IND=$O(@GBL@(IND)) Q:+IND=0  S LINE=@GBL@(IND),CS=$$CRC32^XLFCRC(LINE,CS)
 | 
|---|
| 68 |  Q CS
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  ;====================================================
 | 
|---|
| 71 | MMCS(XMZ) ;Return checksum for MailMan message ien XMZ.
 | 
|---|
| 72 |  N CS,IND,LINE,NLINES
 | 
|---|
| 73 |  S NLINES=+$P($G(^XMB(3.9,XMZ,2,0)),U,3)
 | 
|---|
| 74 |  S CS=0
 | 
|---|
| 75 |  F IND=1:1:NLINES S LINE=$G(^XMB(3.9,XMZ,2,IND,0)),CS=$$CRC32^XLFCRC(LINE,CS)
 | 
|---|
| 76 |  Q CS
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 |  ;====================================================
 | 
|---|
| 79 | PFDACS(IEN,FDASTART,FDAEND) ;Return checksum for FDA array of packed
 | 
|---|
| 80 |  ;reminder component.
 | 
|---|
| 81 |  N CS,DATA,IENS,IND,JND,FIELD,FNUM,SFN,TARGET,TEMP,TEXT
 | 
|---|
| 82 |  S TEMP=^PXD(811.8,IEN,100,FDASTART,0)
 | 
|---|
| 83 |  S FNUM=$P(TEMP,";",1)
 | 
|---|
| 84 |  D FIELD^DID(FNUM,"EDIT HISTORY","","SPECIFIER","TARGET")
 | 
|---|
| 85 |  S SFN=+$G(TARGET("SPECIFIER"))
 | 
|---|
| 86 |  S CS=0
 | 
|---|
| 87 |  F IND=FDASTART:1:FDAEND D
 | 
|---|
| 88 |  . S TEMP=^PXD(811.8,IEN,100,IND,0)
 | 
|---|
| 89 |  . S DATA=$P(TEMP,"~",2,99)
 | 
|---|
| 90 |  . S TEMP=$P(TEMP,"~",1)
 | 
|---|
| 91 |  . S FNUM=$P(TEMP,";",1)
 | 
|---|
| 92 |  . I FNUM=SFN Q
 | 
|---|
| 93 |  . I FNUM="Exchange Stub" Q
 | 
|---|
| 94 |  . S IENS=$P(TEMP,";",2)
 | 
|---|
| 95 |  . S FIELD=$P(TEMP,";",3)
 | 
|---|
| 96 |  . S TEXT=FNUM_$L(IENS,",")_FIELD_DATA
 | 
|---|
| 97 |  . S CS=$$CRC32^XLFCRC(TEXT,CS)
 | 
|---|
| 98 |  . I DATA["WP-start" F JND=1:1:$P(DATA,"~",2) D
 | 
|---|
| 99 |  .. S IND=IND+1
 | 
|---|
| 100 |  .. S TEXT=^PXD(811.8,IEN,100,IND,0)
 | 
|---|
| 101 |  .. S CS=$$CRC32^XLFCRC(TEXT,CS)
 | 
|---|
| 102 |  Q CS
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  ;====================================================
 | 
|---|
| 105 | ROUTINE(RA) ;Return checksum for a routine loaded in array RA. RA has the
 | 
|---|
| 106 |  ;form created by ^%ZOSF("LOAD") i.e, RA(1,0) ... RA(N,0).
 | 
|---|
| 107 |  N CS,IND,TEXT
 | 
|---|
| 108 |  S (CS,IND)=0
 | 
|---|
| 109 |  ;Get rid of the build number on the second line.
 | 
|---|
| 110 |  S RA(2,0)=$P(RA(2,0),";",1,6)
 | 
|---|
| 111 |  F  S IND=$O(RA(IND)) Q:+IND=0  D
 | 
|---|
| 112 |  . S TEXT=RA(IND,0)
 | 
|---|
| 113 |  . S CS=$$CRC32^XLFCRC(RA(IND,0),CS)
 | 
|---|
| 114 |  Q CS
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  ;====================================================
 | 
|---|
| 117 | RTNCS(ROUTINE) ;Return checksum for a routine ROUTINE.
 | 
|---|
| 118 |  N CS,DIF,RA,X,XCNP
 | 
|---|
| 119 |  S XCNP=0
 | 
|---|
| 120 |  S DIF="RA("
 | 
|---|
| 121 |  S X=ROUTINE
 | 
|---|
| 122 |  ;Make sure the routine exists.
 | 
|---|
| 123 |  X ^%ZOSF("TEST")
 | 
|---|
| 124 |  I $T D
 | 
|---|
| 125 |  . X ^%ZOSF("LOAD")
 | 
|---|
| 126 |  . S CS=$$ROUTINE(.RA)
 | 
|---|
| 127 |  E  S CS=-1
 | 
|---|
| 128 |  Q CS
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 |  ;====================================================
 | 
|---|
| 131 | PRTNCS(IEN,START,END) ;Return checksum for a packed routine.
 | 
|---|
| 132 |  N CS,IND,SL,TEXT
 | 
|---|
| 133 |  S CS=0,SL=START+1
 | 
|---|
| 134 |  F IND=START:1:END D
 | 
|---|
| 135 |  . S TEXT=^PXD(811.8,IEN,100,IND,0)
 | 
|---|
| 136 |  . ;Get rid of the build number on the second line.
 | 
|---|
| 137 |  . I IND=SL S TEXT=$P(TEXT,";",1,6)
 | 
|---|
| 138 |  . S CS=$$CRC32^XLFCRC(TEXT,CS)
 | 
|---|
| 139 |  Q CS
 | 
|---|
| 140 |  ;
 | 
|---|