Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: DIR3

DIR3.m

Go to the documentation of this file.
  1. DIR3 ;SFISC/DCM,RDS-READER-MAID (PROCESS RANGE/LIST) ;6/28/2009
  1. ;;22.0;VA FileMan;**30,164**;Mar 30, 1999;Build 21
  1. ;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;12364;2913754;3396;
  1. ;
  1. L ; LIST OR RANGE
  1. N %I,%I1,%I2,%BA,%X,%C,%1,%2,%3,%4,%
  1. K ^TMP($J,"DIR")
  1. S Y(0)="",%C=0,%I1=1,%I2=2,%BA=$S($D(DIR("S")):DIR("S"),1:"I 1")
  1. F %I=1:1 S %X=$P(X,",",%I) Q:%E!'$L($P(X,",",%I,999)) D
  1. . I %X'?.".".N.".".N."-".N.".".N S %E=4 Q
  1. . I $E(%X)="-" S %E=3 Q
  1. . I $L($P(%X,"."))>24 S %E=1 Q
  1. . I '%B3,$L($P(+%X,".",2)) S %E=2
  1. I '%E D @$S(%A["C"&'$D(DIR("S")):"LC",%A["C"&$D(DIR("S")):"LL",1:"LL")
  1. I '%E,Y(%C)="" S %E=4
  1. I $G(%E),'%N D
  1. . S %W=$P($T(@(%E)),";;",2)
  1. . I %W[";",%E=1 S %W=$P(%W,";")_+%B1_$P(%W,";",2)_" "_%B2
  1. . I %W[";",%E=2 S %W=$P(%W,";")_+%B3_$P(%W,";",2)_$S(%B3>1:"s",1:"")
  1. I $G(%E) K Y S Y="" Q ; Prevent Erroneous Data
  1. S Y=Y(0)
  1. Q
  1. ;
  1. LL ; handle uncompressed lists & screened compressed lists
  1. I %B3 D LCD
  1. F %I=1:1 S %X=$P(X,",",%I) Q:%E!'$L($P(X,",",%I,999)) D L0
  1. Q:%E
  1. I %A["C" D LIST
  1. Q
  1. L0 N %J
  1. D LCK
  1. Q:%E I %X?.N!(%X?1N.".".N) S %J=+%X G L1
  1. I %B3 D Q
  1. . S %J=+%X D L1 S $P(%X,"-")=%X+%I1
  1. . F %J=+%X:%I1:$P(%X,"-",2) D L1
  1. F %J=$P(%X,"-"):1:$P(%X,"-",2) D L1
  1. Q
  1. L1 I %A["C" D Q
  1. . S Y=%J X %BA Q:'$T
  1. . S (%1,%2)=%J
  1. . D LC1
  1. I $L(Y(%C)_%J)>220 S %C=%C+1,Y(%C)=""
  1. F %=0:1:%C I ","_Y(%)_","[(","_%J_",") S %=-1 Q
  1. I %'<0 S Y=%J X %BA S:$T Y(%C)=Y(%C)_%J_","
  1. Q
  1. ;
  1. ; check one list element
  1. ;%A = $P#1 "^" of DIR(0)
  1. ;%B = $P#2 "^" of DIR(0)
  1. ;%B1 = $P#1 ":" Low Value
  1. ;%B2 = $P#2 ":" High Value
  1. ;%B3 = $P#3 ":" Number of Decimals; Null If Undefined
  1. ;%X = Range Entered, i.e. 2-4
  1. ;% = End of Range Entered i.e. 4
  1. LCK I %X["-" D Q
  1. . N % S %=$P(%X,"-",2) I '% S %E=4 Q
  1. . I %A'["I",%<+%X S %E=4 Q
  1. . I %A["I",%<+%X N %3 S %3=%,%=+%X,$P(%X,"-",2)=%,$P(%X,"-")=%3
  1. . I %<%B1!(+%X>%B2) S %E=1 Q
  1. . I +%X<%B1 S %E=1 Q
  1. . I +%>%B2 S %E=1 Q
  1. . I $L($P(+%X,".",2))>%B3!($L($P(+%,".",2))>%B3) S %E=2 Q
  1. I +%X<%B1!(+%X>%B2) S %E=1 Q
  1. I %B3,$L($P(+%X,".",2))>%B3 S %E=2 Q
  1. Q
  1. ;
  1. LCD ; determine increment size for ranges (handle decimals)
  1. S %1="." I %B3>1 F %=1:1:%B3-1 S %1=%1_"0"
  1. S %I2=%1_2,%I1=%1_1
  1. Q
  1. ;
  1. LC ; handle unscreened compressed lists (no DIR("S"))
  1. ; LC to LIST checks the user's list in X, building ^TMP($J,"DIR")
  1. I %B3 D LCD
  1. F %=1:1:$L(X,",") S %1=$P(X,",",%) D LC0 Q:%E
  1. Q:'$D(^TMP($J,"DIR"))
  1. LIST ; transfer output list from ^TMP($J,"DIR") to Y
  1. S %1="",Y(%C)="" D
  1. . F S %1=$O(^TMP($J,"DIR",%1)) Q:%1="" D
  1. . . S:$D(^(%1))=1 Y(%C)=Y(%C)_%1_","
  1. . . S:$L(Y(%C))>220 %C=%C+1,Y(%C)=""
  1. . . I $D(^(%1))=10 S Y(%C)=Y(%C)_$O(^TMP($J,"DIR",%1,""))_"-"_%1_","
  1. I Y(%C)="" D Q:%E
  1. . I %C=0 S %E=4
  1. . E K Y(%C) S %C=%C-1
  1. K ^TMP($J,"DIR")
  1. Q
  1. LC0 ; check one list element, calls LC1 to put it in ^TMP($J,"DIR")
  1. S %E=0,%X=%1 D LCK Q:%E S (%1,%2)=%X
  1. I %1["-" S %1=+%1,%2=+$P(%2,"-",2)
  1. S %1=+%1,%2=+%2
  1. D LC1
  1. Q
  1. LC1 ; modify ^TMP($J,"DIR") to incorporate a list element, handle overlap
  1. S %3=$O(^TMP($J,"DIR",%1-%I2)) I %3]"",%3<%2 D
  1. . I $D(^(%3))=1,%1-%I1=%3 S %1=%3
  1. . I $D(^(%3))>9 S %4=$O(^(%3,"")) I %4<%1 S %1=%4
  1. S %3=$O(^TMP($J,"DIR",%2-$S(%B3:%I1,1:1))) I %3]"" D
  1. . I $D(^(%3))=1,%2+%I1=%3 S %2=%3
  1. . I $D(^(%3))>9 S %4=$O(^(%3,"")) S:%4'>(%2+%I1) %2=%3 S:%4<%1 %1=%4
  1. S %3=%1-%I1 F S %3=$O(^TMP($J,"DIR",%3)) Q:%3=""!(%3>%2) K ^(%3)
  1. I %1'=%2 S ^TMP($J,"DIR",%2,%1)=""
  1. E S ^TMP($J,"DIR",%1)=""
  1. Q
  1. ;
  1. 1 ;;Response should be no less than ; and no greater than
  1. 2 ;;Response must be no more than ; decimal digit
  1. 3 ;;Response must be a positive number
  1. 4 ;;Invalid number or range