Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/CLINICAL_REMINDERS-PXRM/PXRMEXCS.m

    r613 r623  
    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         ;
     1PXRMEXCS ; SLC/PKR - Routines to compute checksums. ;12/21/2004
     2 ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
     3 ;====================================================
     4FILE(FILENUM,IEN) ;Return checksum for entry IEN in file FILENUM.
     5 N CS,LC,REF,ROOT,TARGET
     6 D FILE^DID(FILENUM,"","GLOBAL NAME","TARGET")
     7 S ROOT=$$CREF^DILF(TARGET("GLOBAL NAME"))
     8 K ^TMP($J,"PXRMEXCS")
     9 M ^TMP($J,"PXRMEXCS")=@ROOT@(IEN)
     10 S REF="^TMP($J,""PXRMEXCS"")"
     11 S REF=$NA(@REF)
     12 S (CS,LC)=0
     13 F  S REF=$Q(@REF) Q:REF'["PXRMEXCS"  S LC=LC+1,CS=CS+$$LINECS(LC,@REF)
     14 K ^TMP($J,"PXRMEXCS")
     15 Q CS
     16 ;
     17 ;====================================================
     18HFCS(PATH,FILENAME) ;Return checksum for host file.
     19 N CS,GBL,GBLZISH,SUCCESS
     20 K ^TMP($J,"PXRMHFCS")
     21 S GBL="^TMP($J,""PXRMHFCS"")"
     22 S GBLZISH="^TMP($J,""PXRMHFCS"",1)"
     23 S GBLZISH=$NA(@GBLZISH)
     24 S SUCCESS=$$FTG^%ZISH(PATH,FILENAME,GBLZISH,3)
     25 S CS=$S(SUCCESS:$$HFCSGBL(GBL),1:-1)
     26 K ^TMP($J,"PXRMHFCS")
     27 Q CS
     28 ;
     29 ;====================================================
     30HFCSGBL(GBL) ;Return checksum for host file loaded into global GBL.
     31 N CS,IND,LINE
     32 S (CS,IND)=0
     33 F  S IND=$O(@GBL@(IND)) Q:+IND=0  S LINE=@GBL@(IND),CS=CS+$$LINECS(IND,LINE)
     34 Q CS
     35 ;
     36 ;====================================================
     37LINECS(LINENUM,STRING) ;Return checksum of line number LINEUM whose contents
     38 ;is STRING.
     39 N CS,IND,LEN
     40 S CS=0
     41 S LEN=$L(STRING)
     42 F IND=1:1:LEN S CS=CS+($A(STRING,IND)*(LINENUM+IND))
     43 Q CS
     44 ;
     45 ;====================================================
     46MMCS(XMZ) ;Return checksum for MailMan message ien XMZ.
     47 N CS,IND,LINE,NLINES
     48 S NLINES=+$P($G(^XMB(3.9,XMZ,2,0)),U,3)
     49 S CS=0
     50 F IND=1:1:NLINES S LINE=$G(^XMB(3.9,XMZ,2,IND,0)),CS=CS+$$LINECS(IND,LINE)
     51 Q CS
     52 ;
     53 ;====================================================
     54ROUTINE(RA) ;Return checksum for a routine loaded in array RA. RA has the
     55 ;form created by ^%ZOSF("LOAD") i.e, RA(1,0) ... RA(N,0).
     56 N CS,IND,LINE
     57 S (CS,IND)=0
     58 F  S IND=$O(RA(IND)) Q:+IND=0  S CS=CS+$$LINECS(IND,RA(IND,0))
     59 Q CS
     60 ;
     61 ;====================================================
     62RTN(ROUTINE) ;Return checksum for a routine ROUTINE.
     63 N CS,DIF,RA,X,XCNP
     64 S XCNP=0
     65 S DIF="RA("
     66 S X=ROUTINE
     67 ;Make sure the routine exists.
     68 X ^%ZOSF("TEST")
     69 I $T D
     70 . X ^%ZOSF("LOAD")
     71 . S CS=$$ROUTINE(.RA)
     72 E  S CS=-1
     73 Q CS
     74 ;
Note: See TracChangeset for help on using the changeset viewer.