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

XINDX3.m

Go to the documentation of this file.
  1. XINDX3 ;ISC/REL,GRK,RWF - PROCESS MERGE/SET/READ/KILL/NEW/OPEN COMMANDS ;06/24/08 15:44
  1. ;;7.3;TOOLKIT;**20,27,61,68,110,121,128,132,133,140,149,153**;Apr 25, 1995;Build 3
  1. ; Per VHA Directive 2004-038, this routine should not be modified.
  1. PEEK S Y=$G(LV(LV,LI+1)) Q
  1. PEEK2 S Y=$G(LV(LV,LI+2)) Q
  1. INC2 S LI=LI+1 ;Drop into INC
  1. INC S LI=LI+1,S=$G(LV(LV,LI)),S1=$G(LV(LV,LI+1)),CH=$E(S)
  1. G ERR:$A(S)=10 Q
  1. DN S LI(LV)=LI,LI(LV,1)=AC,LV=LV+1,LI=LI(LV),AC=NOA
  1. Q
  1. UP ;Inc LI as we save to skip the $C(10).
  1. D PEEK S:$A(Y)=10 LI=LI+1 S LI(LV)=LI,LV=LV-1,LI=LI(LV),AC=LI(LV,1) Q
  1. PEEKDN S Y=$G(LV(LV+1,LI(LV+1)+1)) Q
  1. FIND F Y=LI:1:AC Q:L[$G(LV(LV,Y))
  1. ERR D E^XINDX1(43) S (S,S1,CH)="" Q
  1. Q
  1. Q
  1. S ;Set
  1. S STR=ARG,ARG="",RHS=0 D ^XINDX9
  1. S2 S GK="" D INC I S="" D:'RHS E^XINDX1(10) Q
  1. I CH=",","!""#&)*+-,./:;<=?\]_~"[$E(S1),RHS=1 D E^XINDX1(10) G S2 ;patch 121
  1. I CH="," S RHS=0 G S2
  1. I CH="=" S RHS=1 I "!#&)*,/:;<=?\]_~"[$E(S1) D:$E(S1,1,2)'="##" E^XINDX1(10) G S2 ;patch 119
  1. I CH="$",'RHS D D:% E^XINDX1(10) ;Can't be on left side of set.
  1. . S %=1
  1. . I "$E$P$X$Y"[$E(S,1,2) S %=0 Q
  1. . I "$EC$ET$QS"[$E(S,1,3) S %=0 Q
  1. . I "$ZE$ZT"[$E(S,1,3) S %=0 Q ;Pickup in XINDX9
  1. . Q
  1. I CH="^" D FL G S2
  1. I CH="@" S Y=$$ASM(LV,LI,",") S:Y'["=" RHS=1 D INC,ARG^XINDX2 G S2
  1. I CH="(",$D(LV(LV,"OBJ",LI-1)) D ARG^XINDX2 G S2
  1. I CH="(" D MULT G S2
  1. I CH="#",$E(S,1,2)="##" D ARG^XINDX2 G S2 ;Cache Objects
  1. D FL G S2
  1. ;NOA=number of arguments
  1. MULT D INC S NOA=S I S'>0 S ERR=5 G ^XINDX1
  1. D DN S AC=AC+LI F Q:AC'>LI S:'RHS GK="*" D INC,ARG^XINDX2
  1. D UP
  1. Q
  1. FL ;
  1. S:'RHS GK="*" D ARG^XINDX2
  1. Q
  1. VLNF(X) ;Drop into VLN
  1. VLN ;Valid Local Name > Variable
  1. S ERR=0
  1. Q:X?1(1U,1"%").15UN
  1. ;lower/mixed case, can't be namespaced ;p140 ;p153 change case and check
  1. I X?1(1A,1"%").15AN D:($E(RTN,1,2)=$E(X,1,2))!($E(RTN,1,2)=$$CASE^XINDX9($E(X,1,2))) E^XINDX1(57) Q
  1. D E^XINDX1(11) ;Too long or other problem
  1. Q
  1. VGN ;Valid Global Name
  1. S ERR=0 I X'?1(1U,1"%").7UN D E^XINDX1(12)
  1. Q
  1. KL ;Process KILL
  1. S STR=ARG,ARG(1)=ARG,ARG="" D ^XINDX9
  1. A D INC Q:S="" G A:CH="," S LOC="L" D @$S(CH="@":"KL1",CH="^":"KL2",CH="(":"KL4",1:"KL3") G A
  1. KL1 D INC,ARG^XINDX2 Q
  1. KL2 S GK="!"
  1. I S1'="(" S ERR=24 D ^XINDX1
  1. G ARG^XINDX2
  1. KL3 I "^DT^DTIME^DILOCKTM^DUZ^IOST^IOM^U^"[("^"_S_"^") S ERR=39,ERR(1)=S D ^XINDX1 ;p149
  1. I "IO"=S D:S1="(" PEEKDN S ERR=39,ERR(1)=S_$S(S1["(":S1_Y_")",1:"") D:S1'="(" ^XINDX1 I S1="(",("QC"'[$E(Y,2)) D ^XINDX1
  1. KL5 S GK="!" D ARG^XINDX2 Q ;KILL SUBS
  1. Q
  1. KL4 S NOA=S1 D DN,ARGS^XINDX2,UP,INC2 Q
  1. NE ;NEW
  1. S ERR=$S("("[$E(ARG):26,1:0) I ERR G ^XINDX1 ;look for null or (
  1. S STR=ARG D ^XINDX9 K ERTX
  1. N2 D INC Q:S="" G N2:CH=","
  1. ;I CH?1P,("%@()"'[CH)&("$E"'[$E(S,1,2)) D E^XINDX1(11) G N2
  1. ;check for "@", functions, special variables, or %variables
  1. I CH?1P,(CH'=S) D I $G(ERTX)]"" K ERTX G N2
  1. . Q:"@("[CH!(CH="%"&($E(S,2,8)?.1A.E)) ;check what's indirected on next pass or
  1. . ;if not $ET or $ES must use indirection
  1. . I "$"[CH Q:$E(S,1,3)="$ET"!($E(S,1,3)="$ES") I LI>1,(LV(LV,LI-1)="@") Q
  1. . D E^XINDX1(11)
  1. . Q
  1. S GK="~" D ARG^XINDX2
  1. G N2
  1. ;
  1. RD S STR=ARG D ^XINDX9 S ARG=""
  1. RD1 D INC Q:S=""
  1. ;I (CH="!")!(CH=",")!(CH=Q)!(CH="#") G RD1
  1. ;I CH="^" S ERR=11 D ^XINDX1
  1. I '((CH="%")!(CH?1A)!(CH="*")) D RD3 G RD1
  1. S Y=$$ASM(LV,LI,",") I Y'[":" S ERR=33,RDTIME=1 D ^XINDX1
  1. D RD2 G RD1
  1. RD2 Q:","[CH
  1. I "*#"[CH D E^XINDX1(41)
  1. I "#:"[CH D INC,ARG^XINDX2,INC G RD2
  1. I (CH="%")!(CH?1A) S LOC="L",GK="*" D ARG^XINDX2,INC G RD2
  1. D INC G RD2
  1. RD3 Q:","[CH I "!#?"[CH D INC G RD3
  1. I (CH="%")!(CH?1A)!(CH="@") D ARG^XINDX2,INC G RD3
  1. I CH="$" S ERR=21,RDTIME=1 D ^XINDX1
  1. Q
  1. O S STR=ARG,AC=99 D ^XINDX9,INC S ARG="" I S["@" D ARGS^XINDX2 Q
  1. D ARG^XINDX2,INC D D INC,ARGS^XINDX2 Q
  1. . F D INC Q:":"[S
  1. . Q
  1. Q
  1. ERRCP S ERR=5 D ^XINDX1 Q
  1. ST ;
  1. S:'$D(V(LOC,S)) V(LOC,S)="" S:V(LOC,S)'[GK V(LOC,S)=V(LOC,S)_GK,GK="" Q
  1. Q
  1. ASM(WL,SI,L,SEP) ;assemble line Y from LV array
  1. N %,CH,Y S SEP=$G(SEP),Y="" F %=SI:1 S CH=$G(LV(WL,%)) Q:L[CH S Y=Y_SEP_CH
  1. Q Y