[796] | 1 | TMGITR ;TMG/kst/Array and Files Iterater code ;03/25/06
|
---|
| 2 | ;;1.0;TMG-LIB;**1**;08/12/06
|
---|
| 3 |
|
---|
| 4 | ;"TMG MISCELLANEOUS FUNCTIONS
|
---|
| 5 | ;"Kevin Toppenberg MD
|
---|
| 6 | ;"GNU General Public License (GPL) applies
|
---|
| 7 | ;"8-12-06
|
---|
| 8 |
|
---|
| 9 | ;"=======================================================================
|
---|
| 10 | ;" API -- Public Functions.
|
---|
| 11 | ;"=======================================================================
|
---|
| 12 | ;"firstIndex=$$ItrInit^TMGITR(File,.Iterater,[IENS],[direction],[PriorIndex]) -- set up an iterater for a given fileman file
|
---|
| 13 | ;"nextIndex=$$ItrNext^TMGITR(.Iterater,[.]CurIndex,[direction])
|
---|
| 14 |
|
---|
| 15 | ;"firstfieldValue=$$ItrFInit^TMGITR(File,.Iterater,.Index,[Field],[IENS],[Flags]) -- set up an iterater for a given Fileman file, with FIELD return
|
---|
| 16 | ;"nextFieldValue=$$ItrFNext^TMGITR(.Iterater,[.]CurIndex,.CurField,[direction]) -- return next $order using iterater, returning FIELD
|
---|
| 17 |
|
---|
| 18 | ;"firstIndex=$$ItrAInit^TMGITR(pArray,.Iterater,[direction],[PriorIndex]) -- set up an iterater for a given Array
|
---|
| 19 | ;"nextIndex=$$ItrANext^TMGITR(.Iterater,[.]CurIndex,[direction]) -- return next $order using iterater
|
---|
| 20 |
|
---|
| 21 | ;"PrepProgress^TMGITR(.Iterater,Interval,ByCt,pIndex)
|
---|
| 22 | ;"ProgressDone^TMGITR(.Iterater)
|
---|
| 23 |
|
---|
| 24 | ;"=======================================================================
|
---|
| 25 | ;"PRIVATE API FUNCTIONS
|
---|
| 26 | ;"=======================================================================
|
---|
| 27 | ;"MakeRef(FileNum,IENS) -- make an global reference from a subfile
|
---|
| 28 |
|
---|
| 29 | ;"=======================================================================
|
---|
| 30 | ;"DEPENDENCIES
|
---|
| 31 | ;" DIQ,DILF
|
---|
| 32 | ;"=======================================================================
|
---|
| 33 | ;"=======================================================================
|
---|
| 34 |
|
---|
| 35 | ;"Note: This code has not been tested/debugged with subfiles yet.
|
---|
| 36 |
|
---|
| 37 |
|
---|
| 38 | ItrInit(File,Iterater,IENS,Direction)
|
---|
| 39 | ;"Purpose: To set up an iterater for a given fileman file
|
---|
| 40 | ;"Input: File -- name or number of a Fileman File
|
---|
| 41 | ;" Iterater -- PASS BY REFERENCE, an OUT PARAMETER.
|
---|
| 42 | ;" loaded with a reference that can be used with $order
|
---|
| 43 | ;" e.g. Index=$order(@Iterater@(Index))
|
---|
| 44 | ;" Iterater also stores other info as an array:
|
---|
| 45 | ;" Iterater("FILENUM")=FileNum
|
---|
| 46 | ;" Iterater("IENS"=IENS used to create iterater (if supplied)
|
---|
| 47 | ;" Iterater("COUNT")=number of records
|
---|
| 48 | ;" IENS -- OPTIONAL, if File is a subfile, then must supply
|
---|
| 49 | ;" the IENS to specify its location, e.g.
|
---|
| 50 | ;" IEN,parent-IEN,grandparent-IEN, etc.
|
---|
| 51 | ;" Function will add terminal ',' for user if needed.
|
---|
| 52 | ;" Direction -- the Direction from "" to go for first record (-1 --> get last record)
|
---|
| 53 | ;"Results: IEN of the first record in file, or "" if error
|
---|
| 54 |
|
---|
| 55 | ;"Note: This is designed to work with Fileman files, with numeric
|
---|
| 56 | ;" nodes. It is designed to NOT return alpha nodes (indices)
|
---|
| 57 |
|
---|
| 58 | kill Iterater ;"Clear any prior entries
|
---|
| 59 | set File=$get(File)
|
---|
| 60 | if +File'=File set File=$$GetFileNum^TMGDBAPI(File)
|
---|
| 61 | new Index set Index="" ;"default to error
|
---|
| 62 | set Iterater("FILENUM")=File
|
---|
| 63 | set Iterater("COUNT")=0
|
---|
| 64 | set Iterater("MAX")=0
|
---|
| 65 | if $get(IENS)'="" do
|
---|
| 66 | . if $extract(IENS,$length(IENS))'="," set IENS=IENS_","
|
---|
| 67 | . set Iterater("IENS")=IENS
|
---|
| 68 |
|
---|
| 69 | new ParentFile set ParentFile=+$get(^DD(File,0,"UP"))
|
---|
| 70 | if ParentFile=0 do
|
---|
| 71 | . set Iterater=$get(^DIC(File,0,"GL"))
|
---|
| 72 | . set Iterater=$$CREF^DILF(Iterater)
|
---|
| 73 | else set Iterater=$$MakeRef(File,IENS)
|
---|
| 74 |
|
---|
| 75 | set Direction=$get(Direction,1)
|
---|
| 76 | if Iterater'="" do
|
---|
| 77 | . set Index=$order(@Iterater@(0),Direction)
|
---|
| 78 | . set Iterater("COUNT")=$piece($get(@Iterater@(0)),"^",4)
|
---|
| 79 | . new index set index=":"
|
---|
| 80 | . for set index=$order(@Iterater@(index),-1) quit:(+index>0)!(index="")
|
---|
| 81 | . set Iterater("MAX")=index
|
---|
| 82 |
|
---|
| 83 | IIDone
|
---|
| 84 | quit Index
|
---|
| 85 |
|
---|
| 86 |
|
---|
| 87 | ItrFInit(File,Iterater,Index,Field,IENS,Flags,Direction)
|
---|
| 88 | ;"Purpose: To set up an iterater for a given Fileman file, with FIELD return
|
---|
| 89 | ;"Input: File -- name or number of a Fileman File
|
---|
| 90 | ;" Iterater -- PASS BY REFERENCE, an OUT PARAMETER.
|
---|
| 91 | ;" loaded with a reference that can be used with $order
|
---|
| 92 | ;" e.g. Index=$order(@Iterater@(Index))
|
---|
| 93 | ;" Iterater also stores other info as an array:
|
---|
| 94 | ;" Iterater("FILENUM")=FileNum
|
---|
| 95 | ;" Iterater("FIELD")=Field
|
---|
| 96 | ;" Iterater("FLAGS")=Flags
|
---|
| 97 | ;" Iterater("IENS"=IENS used to create iterater
|
---|
| 98 | ;" Index -- PASS BY REFERENCE, and OUT PARAMETER
|
---|
| 99 | ;" returns the first IEN in the file.
|
---|
| 100 | ;" Field -- optional. Field Name or Number. If supplied,
|
---|
| 101 | ;" value of field will be returned (rather than
|
---|
| 102 | ;" IENS -- optional, if File is a subfile, then must supply
|
---|
| 103 | ;" the IENS to specify its location, e.g.
|
---|
| 104 | ;" NOTE: MUST end in ","
|
---|
| 105 | ;" IEN,parent-IEN,grandparent-IEN, etc.
|
---|
| 106 | ;" Flags -- OPTIONAL -- Determines how value is returned. Same Flags as used
|
---|
| 107 | ;" by GET1^DIQ. "I"=Internal value returned (default is external form)
|
---|
| 108 | ;" Direction -- OPTIONAL -- the Direction from "" to go for first record (-1 --> get last record)
|
---|
| 109 | ;"Results: Value of field for IEN of the first record in file, or "" if error
|
---|
| 110 | new result set result=""
|
---|
| 111 | set IENS=$get(IENS)
|
---|
| 112 | set Index=$$ItrInit(.File,.Iterater,.IENS,.Direction)
|
---|
| 113 | set Field=$get(Field)
|
---|
| 114 | if +Field'=Field set Field=$$GetNumField^TMGDBAPI(.File,Field)
|
---|
| 115 | set Iterater("FIELD")=Field
|
---|
| 116 | set Iterater("FLAGS")=$get(Flags)
|
---|
| 117 | set IENS=Index_","_IENS
|
---|
| 118 | if Index'="" set result=$$GET1^DIQ(File,.IENS,.Field,.Flags)
|
---|
| 119 |
|
---|
| 120 | quit result
|
---|
| 121 |
|
---|
| 122 | ItrAInit(pArray,Iterater,Direction,PriorIndex)
|
---|
| 123 | ;"Purpose: To set up an iterater for a given Array
|
---|
| 124 | ;"Input: Array -- PASS BY NAME, the Array to be iterated.
|
---|
| 125 | ;" Iterater -- PASS BY REFERENCE, an OUT PARAMETER.
|
---|
| 126 | ;" loaded with a reference that can be used with $order
|
---|
| 127 | ;" e.g. Index=$order(@Iterater@(Index))
|
---|
| 128 | ;" Iterater also stores other info as an array:
|
---|
| 129 | ;" Iterater("COUNT")=number of top level nodes in the Array
|
---|
| 130 | ;" Direction -- OPTIONAL -- the Direction from "" (or PriorIndex) to go for first record (-1 --> get last record)
|
---|
| 131 | ;" PriorIndex -- OPTIONAL -- the prior index to start from. Default=""
|
---|
| 132 | ;"Results: first node in the Array, or "" if error
|
---|
| 133 |
|
---|
| 134 | kill Iterater ;"Clear any prior entries
|
---|
| 135 | set Iterater=pArray
|
---|
| 136 | new Index set Index="" ;"default to error
|
---|
| 137 | if $get(pArray)="" goto IAIDone
|
---|
| 138 | set Direction=$get(Direction,1)
|
---|
| 139 | set PriorIndex=$get(PriorIndex,"")
|
---|
| 140 | ;"Will count later, if needed (avoid delay otherwise)
|
---|
| 141 | ;"set Iterater("COUNT")=$$ListCt^TMGMISC(pArray)
|
---|
| 142 | set Iterater("COUNT")=0 ;"override later
|
---|
| 143 | set Iterater("MAX")=$order(@Iterater@(":"),-1)
|
---|
| 144 | set Index=$order(@Iterater@(PriorIndex),Direction)
|
---|
| 145 |
|
---|
| 146 | IAIDone
|
---|
| 147 | quit Index
|
---|
| 148 |
|
---|
| 149 |
|
---|
| 150 | MakeRef(FileNum,IENS)
|
---|
| 151 | ;"Purpose: to make an global reference from a subfile
|
---|
| 152 | ;"Input: FileNum -- must be filenumber
|
---|
| 153 | ;" IENS -- a standard Fileman IENS of subfile. DON'T pass by reference
|
---|
| 154 | ;" Array("SUBFILE","NUMBER")=file number of this sub file.
|
---|
| 155 | ;" Array("SUBFILE","NAME")=file name of this sub file.
|
---|
| 156 | ;" Array("PARENT","NUMBER")=parent file number
|
---|
| 157 | ;" Array("PARENT","NAME")=parent file name
|
---|
| 158 | ;" Array("PARENT","GL")=global reference of parent, in open format<-- only valid if parent isn't also a subfile
|
---|
| 159 | ;" Array("FIELD IN PARENT","NUMBER")=field number of subfile in parent
|
---|
| 160 | ;" Array("FIELD IN PARENT","NAME")=filed name of subfile in parent
|
---|
| 161 | ;" Array("FIELD IN PARENT","LOC")=node and piece where subfile is stored
|
---|
| 162 | ;" Array("FIELD IN PARENT","CODE")=code giving subfile's attributes.
|
---|
| 163 | ;"Result: returns reference
|
---|
| 164 |
|
---|
| 165 | new i
|
---|
| 166 | new temp,IEN,parentFile
|
---|
| 167 | new ref set ref=""
|
---|
| 168 | new Info
|
---|
| 169 |
|
---|
| 170 | for i=1:1 do quit:(FileNum=0)
|
---|
| 171 | . ;"new NumIENs set NumIENs=$length(IENS,",")
|
---|
| 172 | . ;"set IEN=$piece(IENS,",",NumIENs)
|
---|
| 173 | . ;"set IENS=$piece(IENS,",",1,NumIENs-1)
|
---|
| 174 | . set IEN=$piece(IENS,",",1)
|
---|
| 175 | . set IENS=$piece(IENS,",",2,999)
|
---|
| 176 | . if IEN'="" set temp(i+1,"IEN")=IEN
|
---|
| 177 | . if $$GetSubFInfo^TMGDBAPI(FileNum,.Info)=0 set FileNum=0 quit
|
---|
| 178 | . set FileNum=$get(Info("PARENT","NUMBER"))
|
---|
| 179 | . set temp(i,"LOC IN PARENT")=$get(Info("FIELD IN PARENT","LOC"))
|
---|
| 180 | . set temp(i+1,"REF")=$$CREF^DILF($get(Info("PARENT","GL")))
|
---|
| 181 |
|
---|
| 182 | set i=$order(temp(""),-1)
|
---|
| 183 | if i'="" for do quit:(i="")
|
---|
| 184 | . if $get(temp(i,"REF"))'="" set ref=temp(i,"REF")
|
---|
| 185 | . new IEN set IEN=$get(temp(i,"IEN"))
|
---|
| 186 | . new LOC set LOC=$piece($get(temp(i,"LOC IN PARENT")),";",1)
|
---|
| 187 | . if LOC'="" set ref=$name(@ref@(LOC))
|
---|
| 188 | . if IEN'="" set ref=$name(@ref@(IEN))
|
---|
| 189 | . set i=$order(temp(i),-1)
|
---|
| 190 |
|
---|
| 191 | quit ref
|
---|
| 192 |
|
---|
| 193 |
|
---|
| 194 |
|
---|
| 195 | ItrFNext(Iterater,CurIndex,CurField,direction)
|
---|
| 196 | ;"Purpose: to return next $order using iterater, returning FIELD
|
---|
| 197 | ;"Input: Iterater -- PASS BY REFERENCE. an iterater reference, as created by ItrInit
|
---|
| 198 | ;" Iterater also stores other info as an array:
|
---|
| 199 | ;" Iterater("FILENUM")=FileNum
|
---|
| 200 | ;" Iterater("FIELD")=Field
|
---|
| 201 | ;" Iterater("FLAGS")=Flags
|
---|
| 202 | ;" Iterater("IENS"=IENS used to create iterater
|
---|
| 203 | ;" Iterater("PROGRESS FN")=a PROGRESS FUNCTION <-- OPTIONAL
|
---|
| 204 | ;" CurIndex -- The current value of the index
|
---|
| 205 | ;" IF PASSED BY REF, WILL BE CHANGED
|
---|
| 206 | ;" CurField -- OPTIONAL, PASS BY REFERENCE, an OUT PARAMETER -- not used to find next.
|
---|
| 207 | ;" direction -- OPTIONAL, 1 (default) for forward, -1 for backwards
|
---|
| 208 | ;"Results: returns the next value by $order, or "" if none
|
---|
| 209 | ;"NOTE: won't currently work for subfiles--would require passing a IENS
|
---|
| 210 |
|
---|
| 211 | set CurIndex=$$ItrNext(.Iterater,.CurIndex,.direction)
|
---|
| 212 | new File,Field,Flags
|
---|
| 213 | set CurField=""
|
---|
| 214 | if CurIndex'="" do
|
---|
| 215 | . set File=$get(Iterater("FILENUM"))
|
---|
| 216 | . set Field=$get(Iterater("FIELD"))
|
---|
| 217 | . set Flags=$get(Iterater("FLAGS"))
|
---|
| 218 | . set CurField=$$GET1^DIQ(File,CurIndex,Field,Flags)
|
---|
| 219 |
|
---|
| 220 | quit CurField
|
---|
| 221 |
|
---|
| 222 |
|
---|
| 223 | ItrNext(Iterater,CurIndex,direction)
|
---|
| 224 | ;"Purpose: to return next $order using iterater
|
---|
| 225 | ;"Input: Iterater -- and iterater reference, as created by ItrInit
|
---|
| 226 | ;" Iterater("PROGRESS FN")=a PROGRESS FUNCTION <-- OPTIONAL
|
---|
| 227 | ;" CurIndex -- The current value of the index
|
---|
| 228 | ;" IF PASSED BY REF, WILL BE CHANGED
|
---|
| 229 | ;" direction -- OPTIONAL, 1 (default) for forward, -1 for backwards
|
---|
| 230 | ;"Results: returns the next value by $order, or "" if none
|
---|
| 231 |
|
---|
| 232 | set CurIndex=$order(@Iterater@(CurIndex),$get(direction,1))
|
---|
| 233 |
|
---|
| 234 | new ProgressFn set ProgressFn=$get(Iterater("PROGRESS FN"))
|
---|
| 235 | if ProgressFn'="" do
|
---|
| 236 | . new $etrap set $etrap="w ""??Progress function -- error trapped??"",!"
|
---|
| 237 | . if CurIndex="" do ProgressDone(.Iterater)
|
---|
| 238 | . else do
|
---|
| 239 | . . set Iterater("PROGRESS FN","CURRENT")=Iterater("PROGRESS FN","CURRENT")+1
|
---|
| 240 | . . xecute ProgressFn
|
---|
| 241 |
|
---|
| 242 | quit CurIndex
|
---|
| 243 |
|
---|
| 244 |
|
---|
| 245 | ItrANext(Iterater,CurIndex,direction)
|
---|
| 246 | ;"Purpose: to return next $order using iterater
|
---|
| 247 | ;"Input: Iterater -- and iterater reference, as created by ItrAInit
|
---|
| 248 | ;" Iterater("PROGRESS FN")=a PROGRESS FUNCTION <-- OPTIONAL
|
---|
| 249 | ;" CurIndex -- The current value of the index
|
---|
| 250 | ;" IF PASSED BY REF, WILL BE CHANGED
|
---|
| 251 | ;" direction -- OPTIONAL, 1 (default) for forward, -1 for backwards
|
---|
| 252 | ;"Results: returns the next value by $order, or "" if none
|
---|
| 253 |
|
---|
| 254 | quit $$ItrNext(.Iterater,.CurIndex,.direction)
|
---|
| 255 |
|
---|
| 256 |
|
---|
| 257 | PrepProgress(Iterater,Interval,ByCt,pIndex)
|
---|
| 258 | ;"Purpose: to set up code so that ItrNext can easily show a progress function
|
---|
| 259 | ;"Input: Iterater -- PASS BY REFERENCE. Array as set up by ItrInit
|
---|
| 260 | ;" Interval -- OPTIONAL, default=10 The interval between showing progress bar
|
---|
| 261 | ;" ByCt -- OPTIONAL, default=1,
|
---|
| 262 | ;" if 0: range is 0..MaxIEN, index=IEN
|
---|
| 263 | ;" if 1: range is 0..Number of Records, index=record counter
|
---|
| 264 | ;" pIndex -- if ByCt=0, REQUIRED. NAME OF 'IEN' variable
|
---|
| 265 |
|
---|
| 266 | new pCurrent,pTotal,pStartTime,PrgFn
|
---|
| 267 | set Interval=$get(Interval,10)
|
---|
| 268 | if Interval=1 set Interval=2 ;" X#1 is always 0, so would never show.
|
---|
| 269 | set ByCt=$get(ByCt,1)
|
---|
| 270 | set Iterater("PROGRESS FN","BY-CT")=ByCt
|
---|
| 271 | set Iterater("PROGRESS FN","CURRENT")=0
|
---|
| 272 | set Iterater("PROGRESS FN","START TIME")=$H
|
---|
| 273 | set pStartTime=$name(Iterater("PROGRESS FN","START TIME"))
|
---|
| 274 | if ByCt=0 do
|
---|
| 275 | . set Iterater("PROGRESS FN","INDEX")=pIndex
|
---|
| 276 | . new pMax set pMax=$name(Iterater("MAX"))
|
---|
| 277 | . set PrgFn="if "_pIndex_"#"_Interval_"=1 "
|
---|
| 278 | . set PrgFn=PrgFn_"do ProgressBar^TMGUSRIF("_pIndex_",""Progress"",0,"_pMax_",,"_pStartTime_")"
|
---|
| 279 | else do
|
---|
| 280 | . set pCurrent=$name(Iterater("PROGRESS FN","CURRENT"))
|
---|
| 281 | . if +$get(Iterater("COUNT"))=0 do
|
---|
| 282 | . . set Iterater("COUNT")=$$ListCt^TMGMISC(Iterater)
|
---|
| 283 | . set pTotal=$name(Iterater("COUNT"))
|
---|
| 284 | . set PrgFn="if "_pCurrent_"#"_Interval_"=1 "
|
---|
| 285 | . set PrgFn=PrgFn_"do ProgressBar^TMGUSRIF("_pCurrent_",""Progress"",0,"_pTotal_",,"_pStartTime_")"
|
---|
| 286 |
|
---|
| 287 | set Iterater("PROGRESS DONE FN")="do ProgressBar^TMGUSRIF(100,""Progress"",0,100)"
|
---|
| 288 | set Iterater("PROGRESS FN")=PrgFn
|
---|
| 289 |
|
---|
| 290 | quit
|
---|
| 291 |
|
---|
| 292 |
|
---|
| 293 | ProgressDone(Iterater)
|
---|
| 294 | ;"Purpose: to allow user to call and ensure the progress bar is at 100% after
|
---|
| 295 | ;" loop is done. This is needed because the Iterater code has no way of
|
---|
| 296 | ;" knowing what criteria will be used to determine when loop is complete.
|
---|
| 297 |
|
---|
| 298 | ;"new ProgressFn set ProgressFn=$get(Iterater("PROGRESS FN"))
|
---|
| 299 | new ProgressFn set ProgressFn=$get(Iterater("PROGRESS DONE FN"))
|
---|
| 300 | if $get(ProgressFn)'="" do
|
---|
| 301 | . ;"new $etrap set $etrap="w ""??Progress function -- error trapped??"",!"
|
---|
| 302 | . ;"new ByCt set ByCt=$get(Iterater("PROGRESS FN","BY-CT"),1)
|
---|
| 303 | . ;"if ByCt=0 do
|
---|
| 304 | . ;". new pIndex set pIndex=$get(Iterater("PROGRESS FN","INDEX"))
|
---|
| 305 | . ;". new max set max=1
|
---|
| 306 | . ;". if pIndex'="" do
|
---|
| 307 | . ;". . set Iterater("MAX")=+$get(@pIndex)
|
---|
| 308 | . ;". . if Iterater("MAX")'>0 set Iterater("MAX")=1
|
---|
| 309 | . ;"else do
|
---|
| 310 | . ;". set Iterater("PROGRESS FN","CURRENT")=$get(Iterater("COUNT"))
|
---|
| 311 | . xecute ProgressFn
|
---|
| 312 | write !
|
---|
| 313 | quit
|
---|
| 314 |
|
---|
| 315 | ;"============================================================
|
---|
| 316 | ;"============================================================
|
---|
| 317 |
|
---|
| 318 |
|
---|
| 319 | Test
|
---|
| 320 | ;"Purpose: test functionality and usability
|
---|
| 321 | ;" of plain iterater functions
|
---|
| 322 |
|
---|
| 323 | new Itr,IEN
|
---|
| 324 | new abort set abort=0
|
---|
| 325 | set IEN=$$ItrInit^TMGITR(22706.9,.Itr)
|
---|
| 326 | do PrepProgress^TMGITR(.Itr,20,0,"IEN")
|
---|
| 327 | if IEN'="" for do quit:(+$$ItrNext^TMGITR(.Itr,.IEN)'>0)!abort
|
---|
| 328 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
| 329 | . ;"write IEN,!
|
---|
| 330 | . ;"other code here...
|
---|
| 331 | do ProgressDone^TMGITR(.Itr)
|
---|
| 332 |
|
---|
| 333 | quit
|
---|
| 334 |
|
---|
| 335 |
|
---|
| 336 | Test2
|
---|
| 337 | ;"Purpose: test functionality and usability
|
---|
| 338 | ;" of iterater functions that return a given field
|
---|
| 339 |
|
---|
| 340 | new Itr,IEN,Name
|
---|
| 341 | new abort set abort=0
|
---|
| 342 | set Name=$$ItrFInit^TMGITR(22706.9,.Itr,.IEN,.05)
|
---|
| 343 | for do quit:(($$ItrFNext^TMGITR(.Itr,.IEN,.Name)="@@@")!(+IEN=0))!abort
|
---|
| 344 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
| 345 | . ;"write Name,!
|
---|
| 346 | . ;"other code here...
|
---|
| 347 | do ProgressDone^TMGITR(.Itr)
|
---|
| 348 |
|
---|
| 349 | quit
|
---|
| 350 |
|
---|
| 351 |
|
---|
| 352 | Test3
|
---|
| 353 | ;"Purpose: test functionality and usability
|
---|
| 354 | ;" of iterater functions that work on an array
|
---|
| 355 |
|
---|
| 356 | new Itr,index
|
---|
| 357 | new abort set abort=0
|
---|
| 358 | set index=$$ItrAInit^TMGITR("^PSDRUG(""B"")",.Itr)
|
---|
| 359 | do PrepProgress^TMGITR(.Itr,20,1,"index")
|
---|
| 360 | if index'="" for do quit:($$ItrANext^TMGITR(.Itr,.index)="")!abort
|
---|
| 361 | . if $$UserAborted^TMGUSRIF set abort=1 quit
|
---|
| 362 | . ;"other code here...
|
---|
| 363 | . ;"write index,!
|
---|
| 364 | do ProgressDone^TMGITR(.Itr)
|
---|
| 365 |
|
---|
| 366 | quit
|
---|
| 367 |
|
---|