| 1 | DICA2 ;SEA/TOAD-VA FileMan: Updater, Pre-Processor Part 2 ;8:12 AM  10 Jun 1998
 | 
|---|
| 2 |  ;;22.0;VA FileMan;;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | IEN(DIFILE,DIEN,DIDA,DIRULE,DIOK) ;
 | 
|---|
| 6 |  ; ENTRY POINT--return whether the IEN String is valid
 | 
|---|
| 7 |  ; proc, DIEN passed by value
 | 
|---|
| 8 |  I $G(DIFILE("C"))'=DIFILE D PARENTS^DIDU1(.DIFILE,DIRULE)
 | 
|---|
| 9 |  I $E(DIEN,$L(DIEN))'="," D ERR^DICA3(304,"",DIEN) Q
 | 
|---|
| 10 |  I DIFILE("L")+1'=$L(DIEN,",") D ERR^DICA3(205,"",DIEN,"",DIFILE) Q
 | 
|---|
| 11 |  I $E(DIEN)=","!(DIEN[",,") D ERR^DICA3(307,"",DIEN) Q
 | 
|---|
| 12 |  K @DIRULE@("TEMP")
 | 
|---|
| 13 | PIECES ;
 | 
|---|
| 14 |  K DIDA N DICRSR,DIOUT S DIOUT=0 F DICRSR=1:1 D  Q:DIOUT!$G(DIERR)
 | 
|---|
| 15 |  . N DIPIECE S DIPIECE=$P(DIEN,",",DICRSR)
 | 
|---|
| 16 |  . N DIRIGHT S DIRIGHT=$P(DIEN,",",DICRSR+1,99999)
 | 
|---|
| 17 |  . I DIPIECE="" S DIOUT=1,DIOK=1 Q
 | 
|---|
| 18 |  . D PIECE(.DIFILE,DIFDA,DIRULE,DICRSR,DIPIECE,.DIDA,DIRIGHT,.DIOK)
 | 
|---|
| 19 |  . I $G(DIERR) S DIOK=0 Q
 | 
|---|
| 20 |  . I 'DIOK D ERR^DICA3($S(DIOK=0:308,1:310),"",DIEN) Q
 | 
|---|
| 21 |  . Q
 | 
|---|
| 22 |  I $G(DIERR) Q
 | 
|---|
| 23 | ALLGOOD ;
 | 
|---|
| 24 |  M @DIRULE@("SEQ")=@DIRULE@("TEMP")
 | 
|---|
| 25 |  N DIN S DIN="S DIFILE="_DIFILE_",DIENTRY="""_DIEN_""""
 | 
|---|
| 26 |  S @DIRULE@("ORDER",@DIRULE@("OP"),DIFILE("L"),DIFILE,@DIRULE@("NUM"))=DIN
 | 
|---|
| 27 |  Q
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | PIECE(DIFILE,DIFDA,DIRULE,DICRSR,DIPIECE,DIDA,DIRIGHT,DIOK) ;
 | 
|---|
| 30 |  ; IEN--return whether a piece of the IEN String is valid
 | 
|---|
| 31 |  ; proc, DIF, DIOK, & DIRULE passed by ref
 | 
|---|
| 32 |  N DICHECK,DIF,DIPREFIX,DIR,DISEQ
 | 
|---|
| 33 |  S DIF=DIFILE(DICRSR)
 | 
|---|
| 34 |  I DIPIECE'["+",DIRIGHT["+" S DIOK=0 Q
 | 
|---|
| 35 | FILING I +DIPIECE=DIPIECE,$E(DIPIECE)'="+" D  Q
 | 
|---|
| 36 |  . S DIOK=DIPIECE>0 I 'DIOK Q
 | 
|---|
| 37 |  . S DIOK=DIRIGHT'["+"&(DIRIGHT'["?") I 'DIOK Q
 | 
|---|
| 38 |  . S DIR=$G(@DIRULE@("ROOT",DIF,","_DIRIGHT))
 | 
|---|
| 39 |  . I DIR="" D
 | 
|---|
| 40 |  . . S DIR=$$ROOT^DIQGU(DIF,","_DIRIGHT,1,1)
 | 
|---|
| 41 |  . . S @DIRULE@("ROOT",DIF,","_DIRIGHT)=DIR
 | 
|---|
| 42 |  . S DIOK=$P($G(@DIR@(DIPIECE,0)),U)'=""
 | 
|---|
| 43 |  . I 'DIOK D ERR^DICA3(601,DIFILE,DIPIECE_","_DIRIGHT) Q
 | 
|---|
| 44 |  . I DICRSR=1 S DIDA=DIPIECE
 | 
|---|
| 45 |  . E  S DIDA(DICRSR-1)=DIPIECE
 | 
|---|
| 46 |  . I DICRSR'=1 Q
 | 
|---|
| 47 |  . S @DIRULE@("OP")=4
 | 
|---|
| 48 |  . S @DIRULE@("NUM")=DIPIECE
 | 
|---|
| 49 | PREFIX S DIPREFIX=$E(DIPIECE,1,2) I DIPREFIX'="?+" S DIPREFIX=$E(DIPREFIX)
 | 
|---|
| 50 |  I DIPREFIX'="+",DIPREFIX'="?",DIPREFIX'="?+" S DIOK=0 Q
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 | GOODPC I $P(DIPIECE,DIPREFIX,2,9999)?1N.N S DIOK=1 D  Q
 | 
|---|
| 53 |  . S DISEQ=$P(DIPIECE,DIPREFIX,2,999)
 | 
|---|
| 54 |  . I +DISEQ'=DISEQ S DIOK=0 Q
 | 
|---|
| 55 | FIRSTPC . I DICRSR=1 D
 | 
|---|
| 56 |  . . S @DIRULE@("OP")=$S(DIPREFIX="?":1,DIPREFIX="?+":2,1:3)
 | 
|---|
| 57 |  . . S @DIRULE@("NUM")=DISEQ
 | 
|---|
| 58 | WHEREPC . S DICHECK=""
 | 
|---|
| 59 |  . I $D(@DIRULE@("SEQ",DISEQ)) S DICHECK=$NA(@DIRULE@("SEQ"))
 | 
|---|
| 60 |  . E  I $D(@DIRULE@("TEMP",DISEQ)) S DICHECK=$NA(@DIRULE@("TEMP"))
 | 
|---|
| 61 | ILLEGAL . I DICHECK'="" D  I 'DIOK Q
 | 
|---|
| 62 |  . . I $O(@DICHECK@(DISEQ,""))'=DIPREFIX S DIOK="C" Q
 | 
|---|
| 63 |  . . I $O(@DICHECK@(DISEQ,DIPREFIX,""))'=DIF S DIOK="C" Q
 | 
|---|
| 64 |  . . I $G(@DICHECK@(DISEQ,DIPREFIX,DIF))'=DIRIGHT S DIOK="C" Q
 | 
|---|
| 65 |  . I DICHECK="",'$D(@DIFDA@(DIF,DIPIECE_","_DIRIGHT)) S DIOK="C" Q
 | 
|---|
| 66 | LEARN . S @DIRULE@("TEMP",DISEQ,DIPREFIX,DIF)=DIRIGHT
 | 
|---|
| 67 |  . I DICRSR=1 S DIDA=DIPREFIX
 | 
|---|
| 68 |  . E  S DIDA(DICRSR-1)=DIPREFIX
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 | BADPIEC S DIOK=0 Q
 | 
|---|