[613] | 1 | ARJTDIM3 ;SFISC/JFW,GFT,TOAD-FileMan: M Syntax Checker, Commands ;7/19/02 16:29
|
---|
| 2 | ;;1.0T5;ZZD ANALYSIS TOOL;;Jul 20, 2000
|
---|
| 3 | ;
|
---|
| 4 | DG ; DO and GET (D^ARJTDIM and G^ARJTDIM)
|
---|
| 5 | G GC^ARJTDIM:%ARG=""!%ERR D PARS G ER:%ERR
|
---|
| 6 | S %L=":" D PARS1 G ER:%ERR
|
---|
| 7 | I %C=%L G ER:%A1="" S %=%A1 D ^ARJTDIM1
|
---|
| 8 | I $E(%A)="&" D ; although disallowed, capture external reference
|
---|
| 9 | . N REF S REF=$E(%A,1,$F(%A,"(")-2)
|
---|
| 10 | . I REF="" S REF=$E(%A,1,$F(%A,",")-2)
|
---|
| 11 | . I REF="" S REF=%A
|
---|
| 12 | . I REF[".",$P(REF,".",2)'="" S REF=$P(REF,".",2)
|
---|
| 13 | . D DSM("&",REF,FIND,.FOUND)
|
---|
| 14 | I %A["@^" S %=%A D ^ARJTDIM1 G DG
|
---|
| 15 | I %A["(",$E(%A)'="@",$E($P(%A,"^",2))'="@" D G ER:%ERR
|
---|
| 16 | . I %COM'="D" S %ERR=1 Q
|
---|
| 17 | . S %=%A
|
---|
| 18 | . I %'?.E1"(".E1")" S %ERR=1 Q
|
---|
| 19 | . S %C=$P(%,"("),%C1=$P(%C,"^",2,999),%I=$F(%,"(")-1
|
---|
| 20 | . I %C=""!(%C?.E1"^") S %ERR=1 Q
|
---|
| 21 | . I %C1]"",%C1'?1U.7AN,%C1'?1"%".7AN S %ERR=1 Q
|
---|
| 22 | . S %C=$P(%C,"^") I %C]"",%C'?1U.7AN,%C'?1"%".7AN,%C'?1.8N S %ERR=1 Q
|
---|
| 23 | . Q:$E(%,%I,%I+1)="()"
|
---|
| 24 | . S (%(-1,2),%(-1,3))=0,%N=1,%(0,0)="P^",(%(0,1),%(0,2),%(0,3))=0
|
---|
| 25 | . D GG^ARJTDIM1
|
---|
| 26 | E D LABEL(0)
|
---|
| 27 | G DG
|
---|
| 28 | ;
|
---|
| 29 | LABEL(OFFSET) ; labelref, entryref, and $TEXT argument (DG and TEXT^ARJTDIM1)
|
---|
| 30 | S %L="^" D PARS1 Q:%ERR ; split the argument at the ^
|
---|
| 31 | I %C=%L D Q:%ERR ; if the arg starts with ^
|
---|
| 32 | . I $E(%A1)="%",$E(%A1,2)'="Z","^%DT^%DTC^%RCR^%XUCI^"'[(U_%A1_U) D
|
---|
| 33 | . . D DSM(,%A1,FIND,.FOUND)
|
---|
| 34 | . S:%A1=""!($E(%A1)="^") %ERR=1 ; ^ alone or ^^anything are bad
|
---|
| 35 | . S %=%A1 D VV ; validate the name
|
---|
| 36 | . D ^ARJTDIM1 ; handle parameter list?
|
---|
| 37 | S %=%A D VV:%'=+%&'OFFSET
|
---|
| 38 | D ^ARJTDIM1
|
---|
| 39 | Q
|
---|
| 40 | ;
|
---|
| 41 | KL ; KILL, LOCK, and NEW (K^ARJTDIM and LK)
|
---|
| 42 | D PARS G ER:%ERR
|
---|
| 43 | I %A="",%C="," G ER
|
---|
| 44 | I %A?1"^"1UP.UN,%COM'="L" G ER
|
---|
| 45 | I %A?1"(".E1")" D G KL
|
---|
| 46 | . S %ARG("E")=$L(%ARG)
|
---|
| 47 | . S %A=$E(%A,2,$L(%A)-1) S %ARG=%A_$S(%ARG]"":","_%ARG,1:"")
|
---|
| 48 | S %=%A I %COM="L","+-"[$E(%A) S $E(%A)=""
|
---|
| 49 | I %COM="N",'$$LNAME(%) G ER
|
---|
| 50 | I %COM="K",$D(%ARG("E")),'$$LNAME(%) G ER
|
---|
| 51 | I $D(%ARG("E")),$L(%ARG)'>%ARG("E") K %ARG("E")
|
---|
| 52 | D VV,^ARJTDIM1 G GC^ARJTDIM:%ARG=""!%ERR
|
---|
| 53 | G KL
|
---|
| 54 | ;
|
---|
| 55 | LK ; LOCK (L^ARJTDIM)
|
---|
| 56 | S %A=%ARG,%L=":" S:"+-"[$E(%A) %A=$E(%A,2,999) D PARS1
|
---|
| 57 | I %C=%L G ER:%A1="" S %=%A1 D ^ARJTDIM1
|
---|
| 58 | S %ARG=%A G GC^ARJTDIM:%A="",KL
|
---|
| 59 | ;
|
---|
| 60 | HN ; HANG (H^ARJTDIM)
|
---|
| 61 | S %=%ARG D ^ARJTDIM1 G GC^ARJTDIM
|
---|
| 62 | ;
|
---|
| 63 | OP ; OPEN and USE (O^ARJTDIM and U^ARJTDIM)
|
---|
| 64 | G GC^ARJTDIM:%ARG=""!%ERR
|
---|
| 65 | D PARS G ER:%ERR!(%C=","&(%A=""))
|
---|
| 66 | G US:%COM="U"
|
---|
| 67 | ;
|
---|
| 68 | S %L=":" D PARS1
|
---|
| 69 | S %A2=%A,%A=%A1 S:%C=%L&(%A="") %ERR=1 D PARS1 G ER:%ERR!(%C=%L&(%A1=""))
|
---|
| 70 | ;
|
---|
| 71 | F %L="%A1","%A2" S %=@%L D ^ARJTDIM1 G OP:%ERR
|
---|
| 72 | G OP
|
---|
| 73 | ;
|
---|
| 74 | US S %L=":" D PARS1 G ER:%C=%L&(%A1="")
|
---|
| 75 | I %A'="IO",%A'="IO(0)" D DSM(,"USE",FIND,.FOUND)
|
---|
| 76 | S %=%A D ^ARJTDIM1
|
---|
| 77 | S %A=%A1 D PARS1 G ER:%C]""
|
---|
| 78 | G OP
|
---|
| 79 | ;
|
---|
| 80 | FR ; FOR (F^ARJTDIM)
|
---|
| 81 | S %L="=",%A=%ARG D PARS1 G ER:%ERR!(%A1="")!(%A="") S %ARG=%A1
|
---|
| 82 | S %=%A G ER:%A?1"^".E D VV,^ARJTDIM1 G ER:%ERR
|
---|
| 83 | FR1 G GC^ARJTDIM:%ARG=""!%ERR D PARS
|
---|
| 84 | S %L=":" F %A=%A,%A1 D PARS1 G ER:%ERR!(%A=""&(%C=%L)) S %=%A D ^ARJTDIM1
|
---|
| 85 | I %A1]"" S %=%A1 D ^ARJTDIM1
|
---|
| 86 | G FR1
|
---|
| 87 | ;
|
---|
| 88 | ; this chunk, called usually at PARS, parses & extract the next argument
|
---|
| 89 | ; In/Output:
|
---|
| 90 | ; %ARG = command argument buffer
|
---|
| 91 | ; %C = current character
|
---|
| 92 | ; %ERR = 1 if there's an error
|
---|
| 93 | ; %I = current character position
|
---|
| 94 | ; Output:
|
---|
| 95 | ; %A = next argument
|
---|
| 96 | ; Called by: DG, KL, OP, FR1
|
---|
| 97 | ;
|
---|
| 98 | S (%A,%C)="" Q:%ERR S (%ERR,%I)=0 ; entry
|
---|
| 99 | F D Q:","[%C!%ERR ; main loop: advance to next top-level ","
|
---|
| 100 | . D %INC
|
---|
| 101 | . I %C="""" D Q:%ERR ; skip over strlit
|
---|
| 102 | . . F D %INC Q:%C="""" I %C="" S %ERR=1 Q
|
---|
| 103 | . I %C="(" D Q:%ERR ; skip over ()s
|
---|
| 104 | . . N %P S %P=1
|
---|
| 105 | . . N %J F %J=0:0 D Q:'%P!%ERR
|
---|
| 106 | . . . D %INC
|
---|
| 107 | . . . I %C="""" D Q:%ERR ; skip over strlit
|
---|
| 108 | . . . . F D %INC Q:%C="""" I %C="" S %ERR=1 Q ; work on this
|
---|
| 109 | . . . S %P=%P+$S(%C="(":1,%C=")":-1,1:0) Q:'%P
|
---|
| 110 | . . . I %C="" S %ERR=1
|
---|
| 111 | I '%ERR D
|
---|
| 112 | . S %A=$E(%ARG,1,%I-1)
|
---|
| 113 | . S %ARG=$E(%ARG,%I+1,999)
|
---|
| 114 | Q
|
---|
| 115 | ;
|
---|
| 116 | PARS S (%A,%C)="" Q:%ERR S (%ERR,%I)=0 ; entry
|
---|
| 117 | INC D %INC D QT:%C="""",PARAN:%C="(" Q:%ERR G OUT:","[%C,INC ; main loop
|
---|
| 118 | QT D %INC Q:%C="""" G QT:%C]"" S %ERR=1 Q ; skip over strlit
|
---|
| 119 | PARAN S %P=1 F %J=0:0 D Q:'%P!%ERR ; skip over ()s
|
---|
| 120 | . D %INC D QT:%C=""""
|
---|
| 121 | . S %P=%P+$S(%C="(":1,%C=")":-1,1:0) Q:'%P
|
---|
| 122 | . I %C="" S %ERR=1
|
---|
| 123 | Q
|
---|
| 124 | OUT S %A=$E(%ARG,1,%I-1),%ARG=$E(%ARG,%I+1,999) Q ; set output & quit
|
---|
| 125 | %INC S %I=%I+1,%C=$E(%ARG,%I) Q ; advance 1 character
|
---|
| 126 | ;
|
---|
| 127 | ;
|
---|
| 128 | PARS1 S (%A1,%C)="" Q:%ERR S (%ERR,%I)=0
|
---|
| 129 | INCR D %INC1 D QT1:%C="""",PARAN1:%C="(" Q:%ERR=1 G OUT1:%L[%C,INCR
|
---|
| 130 | OUT1 S %A1=$E(%A,%I+1,999),%A=$E(%A,1,%I-1) Q
|
---|
| 131 | QT1 D %INC1 Q:%C="""" G QT1:%C]"" S %ERR=1 Q
|
---|
| 132 | PARAN1 S %P=1 F %J=0:0 D %INC1 D QT1:%C="""" S %P=%P+$S(%C="(":1,%C=")":-1,1:0) Q:'%P I %C="" S %ERR=1 Q
|
---|
| 133 | Q
|
---|
| 134 | %INC1 S %I=%I+1,%C=$E(%A,%I) Q
|
---|
| 135 | ;
|
---|
| 136 | ;
|
---|
| 137 | VV ; variable, label, or routine name (LABEL, KL, and FR)
|
---|
| 138 | I '%ERR,%]"",%'["@",%'?1U.UN,%'?1U.UN1"(".E1")",%'?1"%".UN1"(".E1")",%'?1"%".UN,%'?1"^"1U.UN1"(".E1")",%'?1"^%".UN1"(".E1")",%'?1"^(".E1")",%'?1"^"1U.UN S %ERR=1
|
---|
| 139 | S:%["?@" %ERR=1 Q
|
---|
| 140 | ;
|
---|
| 141 | LNAME(%) ; lname (KL)
|
---|
| 142 | I %?1A.7UN!(%?1"%".7UN) Q 1
|
---|
| 143 | I %?1"@".E Q 1
|
---|
| 144 | Q 0
|
---|
| 145 | ;
|
---|
| 146 | ADD(ELEMENT,FOUND) ; record element found
|
---|
| 147 | ; Input: ELEMENT = code for element found, e.g., "F".
|
---|
| 148 | ; Output: .FOUND(ELEMENT) = increment # times found
|
---|
| 149 | S FOUND(ELEMENT)=$G(FOUND(ELEMENT))+1
|
---|
| 150 | Q ; end of DSM
|
---|
| 151 | ;
|
---|
| 152 | DSM(ABBREV,ELEMENT,FIND,FOUND) ; record DSM-specific element found
|
---|
| 153 | ; Input:
|
---|
| 154 | ; ABBREV = code for element found, e.g., "V"
|
---|
| 155 | ; ELEMENT = name of element found, e.g., "VIEW".
|
---|
| 156 | ; Output:
|
---|
| 157 | ; .FOUND(ABBREV) = increment # times found
|
---|
| 158 | ; .FOUND("DSM",ELEMENT) = ditto
|
---|
| 159 | I $G(ABBREV)'="" D ADD(ABBREV,.FOUND)
|
---|
| 160 | I FIND["DSM" D
|
---|
| 161 | . S FOUND=1
|
---|
| 162 | . S FOUND("DSM",ELEMENT)=$G(FOUND("DSM",ELEMENT))+1
|
---|
| 163 | Q ; end of DSM
|
---|
| 164 | ;
|
---|
| 165 | ER G ER^ARJTDIM
|
---|