XINDEX.m 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. XINDEX ;ISC/REL,GFT,GRK,RWF - INDEX & CROSS-REFERENCE ;08/04/08 13:19
  2. ;;7.3;TOOLKIT;**20,27,48,61,66,68,110,121,128**;Apr 25, 1995;Build 1
  3. ; Per VHA Directive 2004-038, this routine should not be modified.
  4. G ^XINDX6
  5. SEP F I=1:1 S CH=$E(LIN,I) D QUOTE:CH=Q Q:" "[CH
  6. S ARG=$E(LIN,1,I-1) S:CH=" " I=I+1 S LIN=$E(LIN,I,999) Q
  7. QUOTE F I=I+1:1 S CH=$E(LIN,I) Q:CH=""!(CH=Q)
  8. Q:CH]"" S ERR=6 G ^XINDX1
  9. ALIVE ;enter here from taskman
  10. D SETUP^XINDX7 ;Get ready to process
  11. A2 S RTN=$O(^UTILITY($J,RTN)) G ^XINDX5:RTN=""
  12. S INDLC=(RTN?1"|"1.4L.NP) D LOAD:'INDLC
  13. I $D(ZTQUEUED),$$S^%ZTLOAD S RTN="~",IND("QUIT")=1,ZTSTOP=1 G A2
  14. I 'INDDS,INDLC W !!?10,"Data Dictionaries",! S INDDS=1
  15. D BEG
  16. G A2
  17. ;
  18. LOAD S X=RTN,XCNP=0,DIF="^UTILITY("_$J_",1,RTN,0," X ^%ZOSF("TEST") Q:'$T X ^%ZOSF("LOAD") S ^UTILITY($J,1,RTN,0,0)=XCNP-1
  19. I $D(^UTILITY($J,1,RTN,0,0)) S ^UTILITY($J,1,RTN,"RSUM")="B"_$$SUMB^XPDRSUM($NA(^UTILITY($J,1,RTN,0)))
  20. Q
  21. BEG ;
  22. S %=INDLC*5 W:$X+10+%>IOM ! W RTN,$J("",10+%-$L(RTN))
  23. S (IND("DO"),IND("SZT"),IND("SZC"),LABO)=0,LC=$G(^UTILITY($J,1,RTN,0,0))
  24. I LC="" W !,">>>Routine '",RTN,"' not found <<<",! Q
  25. S TXT="",LAB=$P(^UTILITY($J,1,RTN,0,1,0)," ") I RTN'=$P(LAB,"(") D E^XINDX1(17)
  26. I 'INDLC,LAB["(" D E^XINDX1(55) S LAB=$P(LAB,"(")
  27. ;if M routine(not compiled template or DD) and has more than 2 lines, check lines 1 & 2
  28. I 'INDLC,LC>2 D
  29. . N LABO S LABO=1
  30. . S LIN=$G(^UTILITY($J,1,RTN,0,1,0)),TXT=1
  31. . ;check 1st line (site/dev - ) patch 128
  32. . I $P(LIN,";",2,4)'?.E1"/".E.1"-".E D E^XINDX1(62)
  33. . S LIN=$G(^UTILITY($J,1,RTN,0,2,0)),TXT=2
  34. . ;check 2nd line (;;nn.nn[TV]nn;package;.anything)
  35. . I $P(LIN,";",3,99)'?1.2N1"."1.2N.1(1"T",1"V").2N1";"1A.AP1";".E D E^XINDX1(44) ;patch 121
  36. . I $L(INP(11)) X INP(11) ;Version number check
  37. . I $L(INP(12)) X INP(12) ;Patch number check
  38. B5 F TXT=1:1:LC S LIN=^UTILITY($J,1,RTN,0,TXT,0),LN=$L(LIN),IND("SZT")=IND("SZT")+LN+2 D LN,ST ;Process Line
  39. S LAB="",LABO=0,TXT=0,^UTILITY($J,1,RTN,0)=IND("SZT")_"^"_LC_"^"_IND("SZC")
  40. I IND("SZT")>INP("MAX"),'INDLC S ERR=35,ERR(1)=IND("SZT") D ^XINDX1
  41. I IND("SZT")-IND("SZC")>INP("CMAX"),'INDLC S ERR=58,ERR(1)=IND("SZT")-IND("SZC") D ^XINDX1
  42. D POSTRTN
  43. Q
  44. ;Proccess one line, LN = Length, LIN = Line.
  45. LN K V S (ARG,GRB,IND("COM"),IND("DOL"),IND("F"))="",X=$P(LIN," ")
  46. I '$L(X) S LABO=LABO+1 G CD
  47. S (IND("COM"),LAB)=$P(X,"("),ARG=$P($P(X,"(",2),")"),LABO=0,IND("PP")=X?1.8E1"(".E1")"
  48. D:$L(ARG) NE^XINDX3 ;Process formal parameters as New list.
  49. I 'INDLC,'$$VT^XINDX2(LAB) D E^XINDX1($S(LAB=$$CASE^XINDX52(LAB):37,1:55)) ;Check for bad labels
  50. I $D(^UTILITY($J,1,RTN,"T",LAB)) D E^XINDX1(15) G CD ;DUP label
  51. S ^UTILITY($J,1,RTN,"T",LAB)=""
  52. CD I LN>245 D:'(LN=246&($E(RTN,1,3)="|dd")) E^XINDX1(19) ;patch 119
  53. D:LIN'?1.ANP E^XINDX1(18)
  54. S LIN=$P(LIN," ",2,999),IND("LCC")=1
  55. I LIN="" D E^XINDX1(42) Q ;Blank line ;p110
  56. S I=0 ;Watch the scope of I, counts dots
  57. I " ."[$E(LIN) D S X=$L($E(LIN,1,I),".")-1,LIN=$E(LIN,I,999)
  58. . F I=1:1:245 Q:". "'[$E(LIN,I)
  59. . Q
  60. ;check dots against Do level IND("DO"), IND("DOL")=dot level
  61. D:'I&$G(IND("DO1")) E^XINDX1(51) S IND("DO1")=0 S:'I IND("DO")=0
  62. I I D:X>IND("DO") E^XINDX1(51) S (IND("DO"),IND("DOL"))=X
  63. ;Count Comment lines, skip ;; lines
  64. I $E(LIN)=";",$E(LIN,2)'=";" S IND("SZC")=IND("SZC")+$L(LIN) ;p110
  65. ;Process commands on line.
  66. EE I LIN="" D ^XINDX2 Q
  67. S COM=$E(LIN),GK="",ARG=""
  68. I COM=";" S LIN="" G EE ;p110
  69. I COM=" " S ERR=$S(LIN?1." ":13,1:0),LIN=$S(ERR:"",1:$E(LIN,2,999)) D:ERR ^XINDX1 G EE
  70. D SEP
  71. S CM=$P(ARG,":",1),POST=$P(ARG,":",2,999),IND("COM")=IND("COM")_$C(9)_COM,ERR=48
  72. D:ARG[":"&(POST']"") ^XINDX1 S:POST]"" GRB=GRB_$C(9)_POST,IND("COM")=IND("COM")_":"
  73. ;SAC now allows lowercase commands
  74. I CM?.E1L.E S CM=$$CASE^XINDX52(CM),COM=$E(CM) ;I IND("LCC") S IND("LCC")=0 D E^XINDX1(47)
  75. I CM="" D E^XINDX1(21) G EE ;Missing command
  76. S CX=$G(IND("CMD",CM)) I CX="" D G:CX="" EE
  77. . I $E(CM)="Z" S CX="^Z" Q ;Proccess Z commands
  78. . D E^XINDX1(1) S LIN="" Q
  79. S CX=$P(CX,"^",2,9)
  80. D SEP I '$L(LIN),CH=" " D E^XINDX1(13) ;trailing space
  81. I ARG="","CGJMORSUWX"[COM S ERR=49 G ^XINDX1
  82. I CX>0 D E^XINDX1(CX) S CX=""
  83. D:$L(CX) @CX S:ARG'="" GRB=GRB_$C(9)_ARG G EE
  84. B S ERR=25 G ^XINDX1
  85. C S ERR=29 G ^XINDX1
  86. D G DG1^XINDX4
  87. E Q:ARG="" S ERR=7 G ^XINDX1
  88. F G:ARG]"" FR^XINDX4 S IND("F")=1 Q
  89. G G DG^XINDX4
  90. H Q:ARG'="" S ERR=32 G ^XINDX1
  91. J S ERR=36,ARG="" G ^XINDX1
  92. K S ERR=$S(ARG?1"(".E:22,ARG?." ":23,1:0) D:ERR ^XINDX1
  93. G KL^XINDX3
  94. L G LO^XINDX4
  95. M G S^XINDX3
  96. N G NE^XINDX3
  97. O S ERR=34 D ^XINDX1,O^XINDX3 Q
  98. Q Q:ARG="" G Q^XINDX4
  99. R S RDTIME=0 G RD^XINDX3
  100. S G S^XINDX3
  101. TR Q ;What to process. p110
  102. U S ARG=$P(ARG,":") Q
  103. V S ARG="",ERR=20 G ^XINDX1
  104. W G WR^XINDX4
  105. X G XE^XINDX4
  106. Z S ERR=2 D ^XINDX1 G ZC^XINDX4
  107. ;
  108. ;Save off items from line.
  109. ST S R=LAB_$S(LABO:"+"_LABO,1:"")
  110. ;Local variable, Global, Marked Items, Naked global, Internal ref, eXternal ref., Tag ref.
  111. S LOC="" F S LOC=$O(V(LOC)),S="" Q:LOC="" F S S=$O(V(LOC,S)) Q:S="" D SET
  112. S ^UTILITY($J,1,RTN,"COM",TXT)=IND("COM")
  113. Q
  114. ;
  115. SET I V(LOC,S)]"" F %="!","~" I V(LOC,S)[%,$G(^UTILITY($J,1,RTN,LOC,S))'[% S ^(S)=$G(^(S))_%
  116. S %=0
  117. SE2 S ARG=$G(^UTILITY($J,1,RTN,LOC,S,%)) I $L(ARG)>230 S %=%+1 G SE2
  118. S ^UTILITY($J,1,RTN,LOC,S,%)=ARG_R_V(LOC,S)_","
  119. Q
  120. ;
  121. POSTRTN ;Do more overall checking
  122. N V,E,T,T1,T2
  123. S T="" ;Check for missing Labels
  124. F S T=$O(^UTILITY($J,1,RTN,"I",T)),T2=T Q:T="" S T1=$G(^(T,0)) D
  125. . Q:$E(T2,1,2)="@("
  126. . S:$E(T2,1,2)="$$" T2=$E(T2,3,99)
  127. . I T2]"",'$D(^UTILITY($J,1,RTN,"T",$P(T2,"+",1))) D
  128. . . F I=1:1:$L(T1,",")-1 S LAB=$P(T1,",",I),LABO=+$P(LAB,"+",2),LAB=$P(LAB,"+"),E=14,E(1)=T D E^XINDX1(.E)
  129. . . Q
  130. . Q
  131. S LAB="",LABO=0 ;Check for valid label names
  132. I 'INDLC F S LAB=$O(^UTILITY($J,1,RTN,"T",LAB)) Q:LAB="" D
  133. . I '$$VA^XINDX2(LAB) D E^XINDX1(55) Q
  134. . D:'$$VT^XINDX2(LAB) E^XINDX1(37)
  135. . Q
  136. S LAB="",LABO=0 ;Check for valid variable names.
  137. F S LAB=$O(^UTILITY($J,1,RTN,"L",LAB)) Q:LAB="" D
  138. . D VLNF^XINDX3($P(LAB,"("))
  139. . Q
  140. Q
  141. ;
  142. QUICK ;Quick, Just get a routine an print the results
  143. D QUICK^XINDX6()
  144. Q