- AZHLSCU3 ; IHS/ADC/GTH:KEU - UNDEF CHECKER. PROCESS SET/READ/KILL/NEW COMMANDS ;
- ;;5.0;AZHLSC;;JUL 10, 1996
- PEEK S Y=$G(LV(LV,LI+1)) Q
- PEEK2 S Y=$G(LV(LV,LI+2)) Q
- INC2 S LI=LI+1 ;Drop into INC
- INC S LI=LI+1,S=$G(LV(LV,LI)),S1=$G(LV(LV,LI+1)),CH=$E(S) G ERR:$A(S)=10 Q
- DN S LI(LV)=LI,LI(LV,1)=AC,LV=LV+1,LI=LI(LV),AC=NOA
- Q
- UP ;Inc LI as we save to skip the $C(10).
- D PEEK S:$A(Y)=10 LI=LI+1 S LI(LV)=LI,LV=LV-1,LI=LI(LV),AC=LI(LV,1) Q
- PEEKDN S Y=$G(LV(LV+1,LI(LV+1)+1)) Q
- FIND F Y=LI:1:AC Q:L[$G(LV(LV,Y))
- ERR S (S,S1,CH)="" Q
- Q
- S S STR=ARG,ARG="",RHS=0 D ^AZHLSCU9
- S2 S GK="" D INC
- Q:S=""
- I CH="," S RHS=0 G S2
- I CH="=" S RHS=1 G S2
- I CH="^" D FL G S2
- I CH="@" S L="," D ASM S:Y'["=" RHS=1 D INC,ARG^AZHLSCU2 G S2
- I CH="(" D MULT G S2
- D FL
- G S2
- MULT D INC S NOA=S
- D DN S AC=AC+LI F Q:AC'>LI S GK="*" D INC,ARG^AZHLSCU2
- D UP Q
- FL S:'RHS GK="*" D ARG^AZHLSCU2
- Q
- KL ;Process KILL
- S STR=ARG,ARG(1)=ARG,ARG="" D ^AZHLSCU9
- A D INC Q:S="" G A:CH="," S LOC="L" D @$S(CH="@":"KL1",CH="^":"KL2",CH="(":"KL4",1:"KL3") G A
- KL1 D INC,ARG^AZHLSCU2 Q
- KL2 S GK="!"
- G ARG^AZHLSCU2
- KL3 I "^DT^DTIME^DUZ^IOST^IOM^IOS^"[("^"_S_"^") S ERR(1)=S
- I "IO"=S D:S1="(" PEEKDN S ERR(1)=S_$S(S1["(":S1_Y_")",1:"")
- KL5 S GK="!" D ARG^AZHLSCU2 Q ;KILL SUBS
- Q
- KL4 S NOA=S1 D DN,ARGS^AZHLSCU2,UP,INC2 Q
- NE ;NEW
- S STR=ARG D ^AZHLSCU9
- N2 D INC Q:S="" G N2:CH="," S GK="~" D ARG^AZHLSCU2 G N2
- ;
- RD S STR=ARG D ^AZHLSCU9 S ARG=""
- RD1 D INC Q:S=""
- ;I (CH="!")!(CH=",")!(CH=Q)!(CH="#") G RD1
- I '((CH="%")!(CH?1A)!(CH="*")) D RD3 G RD1
- S L="," D ASM
- D RD2 G RD1
- RD2 Q:","[CH
- I "#:"[CH D INC,ARG^AZHLSCU2,INC G RD2
- I (CH="%")!(CH?1A) S LOC="L",GK="*" D ARG^AZHLSCU2,INC G RD2
- D INC G RD2
- RD3 Q:","[CH I "!#?"[CH D INC G RD3
- I (CH="%")!(CH?1A)!(CH="@") D ARG^AZHLSCU2,INC G RD3
- Q
- ST ;
- S:'$D(V(LOC,S)) V(LOC,S)="" S:V(LOC,S)'[GK V(LOC,S)=V(LOC,S)_GK,GK="" Q
- Q
- ASM N CH S Y="" F %=LI:1 S CH=$G(LV(LV,%)) Q:L[CH S Y=Y_" "_CH
- Q
- AZHLSCU3 ; IHS/ADC/GTH:KEU - UNDEF CHECKER. PROCESS SET/READ/KILL/NEW COMMANDS ;
- +1 ;;5.0;AZHLSC;;JUL 10, 1996
- PEEK SET Y=$GET(LV(LV,LI+1))
- QUIT
- PEEK2 SET Y=$GET(LV(LV,LI+2))
- QUIT
- INC2 ;Drop into INC
- SET LI=LI+1
- INC SET LI=LI+1
- SET S=$GET(LV(LV,LI))
- SET S1=$GET(LV(LV,LI+1))
- SET CH=$EXTRACT(S)
- IF $ASCII(S)=10
- GOTO ERR
- QUIT
- DN SET LI(LV)=LI
- SET LI(LV,1)=AC
- SET LV=LV+1
- SET LI=LI(LV)
- SET AC=NOA
- +1 QUIT
- UP ;Inc LI as we save to skip the $C(10).
- +1 DO PEEK
- IF $ASCII(Y)=10
- SET LI=LI+1
- SET LI(LV)=LI
- SET LV=LV-1
- SET LI=LI(LV)
- SET AC=LI(LV,1)
- QUIT
- PEEKDN SET Y=$GET(LV(LV+1,LI(LV+1)+1))
- QUIT
- FIND FOR Y=LI:1:AC
- IF L[$GET(LV(LV,Y))
- QUIT
- ERR SET (S,S1,CH)=""
- QUIT
- +1 QUIT
- S SET STR=ARG
- SET ARG=""
- SET RHS=0
- DO ^AZHLSCU9
- S2 SET GK=""
- DO INC
- +1 IF S=""
- QUIT
- +2 IF CH=","
- SET RHS=0
- GOTO S2
- +3 IF CH="="
- SET RHS=1
- GOTO S2
- +4 IF CH="^"
- DO FL
- GOTO S2
- +5 IF CH="@"
- SET L=","
- DO ASM
- IF Y'["="
- SET RHS=1
- DO INC
- DO ARG^AZHLSCU2
- GOTO S2
- +6 IF CH="("
- DO MULT
- GOTO S2
- +7 DO FL
- +8 GOTO S2
- MULT DO INC
- SET NOA=S
- +1 DO DN
- SET AC=AC+LI
- FOR
- IF AC'>LI
- QUIT
- SET GK="*"
- DO INC
- DO ARG^AZHLSCU2
- +2 DO UP
- QUIT
- FL IF 'RHS
- SET GK="*"
- DO ARG^AZHLSCU2
- +1 QUIT
- KL ;Process KILL
- +1 SET STR=ARG
- SET ARG(1)=ARG
- SET ARG=""
- DO ^AZHLSCU9
- A DO INC
- IF S=""
- QUIT
- IF CH=","
- GOTO A
- SET LOC="L"
- DO @$SELECT(CH="@":"KL1",CH="^":"KL2",CH="(":"KL4",1:"KL3")
- GOTO A
- KL1 DO INC
- DO ARG^AZHLSCU2
- QUIT
- KL2 SET GK="!"
- +1 GOTO ARG^AZHLSCU2
- KL3 IF "^DT^DTIME^DUZ^IOST^IOM^IOS^"[("^"_S_"^")
- SET ERR(1)=S
- +1 IF "IO"=S
- IF S1="("
- DO PEEKDN
- SET ERR(1)=S_$SELECT(S1["(":S1_Y_")",1:"")
- KL5 ;KILL SUBS
- SET GK="!"
- DO ARG^AZHLSCU2
- QUIT
- +1 QUIT
- KL4 SET NOA=S1
- DO DN
- DO ARGS^AZHLSCU2
- DO UP
- DO INC2
- QUIT
- NE ;NEW
- +1 SET STR=ARG
- DO ^AZHLSCU9
- N2 DO INC
- IF S=""
- QUIT
- IF CH=","
- GOTO N2
- SET GK="~"
- DO ARG^AZHLSCU2
- GOTO N2
- +1 ;
- RD SET STR=ARG
- DO ^AZHLSCU9
- SET ARG=""
- RD1 DO INC
- IF S=""
- QUIT
- +1 ;I (CH="!")!(CH=",")!(CH=Q)!(CH="#") G RD1
- +2 IF '((CH="%")!(CH?1A)!(CH="*"))
- DO RD3
- GOTO RD1
- +3 SET L=","
- DO ASM
- +4 DO RD2
- GOTO RD1
- RD2 IF ","[CH
- QUIT
- +1 IF "#:"[CH
- DO INC
- DO ARG^AZHLSCU2
- DO INC
- GOTO RD2
- +2 IF (CH="%")!(CH?1A)
- SET LOC="L"
- SET GK="*"
- DO ARG^AZHLSCU2
- DO INC
- GOTO RD2
- +3 DO INC
- GOTO RD2
- RD3 IF ","[CH
- QUIT
- IF "!#?"[CH
- DO INC
- GOTO RD3
- +1 IF (CH="%")!(CH?1A)!(CH="@")
- DO ARG^AZHLSCU2
- DO INC
- GOTO RD3
- +2 QUIT
- ST ;
- +1 IF '$DATA(V(LOC,S))
- SET V(LOC,S)=""
- IF V(LOC,S)'[GK
- SET V(LOC,S)=V(LOC,S)_GK
- SET GK=""
- QUIT
- +2 QUIT
- ASM NEW CH
- SET Y=""
- FOR %=LI:1
- SET CH=$GET(LV(LV,%))
- IF L[CH
- QUIT
- SET Y=Y_" "_CH
- +1 QUIT