| 1 | TMGSIPH3 ;TMG/kst/SIPHON PROGRAM, FOR TRANSFERRING VISTA INSTANCES ;11/27/09
 | 
|---|
| 2 |          ;;1.0;TMG-LIB;**1**;11/27/09
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;"TMG SIPHON PROGRAM, FOR TRANSFERRING VISTA INSTANCE
 | 
|---|
| 5 |  ;"Support functions for transferring files from server
 | 
|---|
| 6 |  ;"Kevin Toppenberg MD
 | 
|---|
| 7 |  ;"GNU General Public License (GPL) applies
 | 
|---|
| 8 |  ;"11/27/09
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ;"=======================================================================
 | 
|---|
| 11 |  ;" API -- Public Functions.
 | 
|---|
| 12 |  ;"=======================================================================
 | 
|---|
| 13 |  ;"TRANSFILE(JNUM) -- move a remote file to local machine, overwriting local entries.
 | 
|---|
| 14 |  ;"GET01FLD(JNUM,FILENUM,IEN) -Get .01 field (internal format) from server.
 | 
|---|
| 15 |  ;"TRANS1FIL(JNUM,FILENUM) -move a remote file to local machine, overwriting local entries.
 | 
|---|
| 16 |  ;"QRYSERVER(JNUM) -- display a given reference from the server
 | 
|---|
| 17 |  ;"TRANSREF(JUNUM) -- move an absolute reference from server to local
 | 
|---|
| 18 |  ;"ASKNEEDED(JNUM,OUTARRAY,INOUT,OPTIONS) --review records of needed records, and
 | 
|---|
| 19 |         ;"         ask user which file, or
 | 
|---|
| 20 |         ;"         which records to get, and return results of selected in array.
 | 
|---|
| 21 |         ;"         This can handle either the list of needed pointers IN or OUT.
 | 
|---|
| 22 |  ;"NUMNEEDED(JNUM,INOUT) -- count number of records needed from server.
 | 
|---|
| 23 |  ;"CHCK4SIM(FILENUM,ARRAY,ANIEN,VALUE01,IENS) -- look at an array and see if there is similar record already on the client.
 | 
|---|
| 24 |  ;"XTRACT01FLD(ARRAY) ; --remove .01 Field values from array returned from GET RECORD & XREF, and store
 | 
|---|
| 25 |  ;"GETANDFIXREC(JNUM,FILENUM,IEN,OVERWRITE,TALLY,INOUT) -- request a record from server, and integrate into local vista,
 | 
|---|
| 26 |         ;"         resolving pointers locally to point to newly downloaded record.
 | 
|---|
| 27 |  ;"HANDLNEEDED(JNUM,INOUT,AUTOMODE) --Ask user which records to get from server, then get them and update
 | 
|---|
| 28 |         ;"         pointer translation table.
 | 
|---|
| 29 | 
 | 
|---|
| 30 |  ;"=======================================================================
 | 
|---|
| 31 |  ;"Dependancies
 | 
|---|
| 32 |  ;"=======================================================================
 | 
|---|
| 33 |  ;"TMGUSRIF, XLFSTR
 | 
|---|
| 34 |  ;"=======================================================================
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 | TRANSFILE(JNUM)
 | 
|---|
| 38 |         ;"Purpose: to move a remote file to local machine, overwriting local entries.
 | 
|---|
| 39 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 40 |         ;"Results: none
 | 
|---|
| 41 |         NEW X,Y,DIC,ARRAY,%
 | 
|---|
| 42 |         SET DIC=1,DIC(0)="MAEQ"
 | 
|---|
| 43 | TF1     WRITE "Pick file to transfer COMPLETELY, or to resume transfer from",!
 | 
|---|
| 44 |         DO ^DIC WRITE !
 | 
|---|
| 45 |         IF +Y'>0 DO  QUIT:(+Y'>0)!(%=-1)
 | 
|---|
| 46 |         . SET %=1
 | 
|---|
| 47 |         . WRITE "File not found on this client.  Do you want to select a file",!
 | 
|---|
| 48 |         . WRITE "to transfer from the server" DO YN^DICN WRITE !
 | 
|---|
| 49 |         . QUIT:(%'=1)
 | 
|---|
| 50 |         . WRITE "Pick file ON SERVER to transfer COMPLETELY: "
 | 
|---|
| 51 |         . READ Y,!
 | 
|---|
| 52 |         . IF Y["^" QUIT
 | 
|---|
| 53 |         . NEW QUERY,REPLY,ERROR,RESULT
 | 
|---|
| 54 |         . SET QUERY="DO DIC|1^"_Y
 | 
|---|
| 55 |         . DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,30)
 | 
|---|
| 56 |         . IF $DATA(ERROR) WRITE ERROR,! SET Y=0 QUIT
 | 
|---|
| 57 |         . SET Y=$GET(REPLY(1))
 | 
|---|
| 58 |         . IF +Y>0 SET ^TMG("TMGSIPH","DD",+Y,"DIFF")=0
 | 
|---|
| 59 |         FOR  DO  QUIT:(DDOK'=0)
 | 
|---|
| 60 |         . SET DDOK=$$PREPDD^TMGSIPH1(JNUM,+Y)
 | 
|---|
| 61 |         . QUIT:(DDOK=1)
 | 
|---|
| 62 |         . WRITE "Before records can be transferred from the server, the local data",!
 | 
|---|
| 63 |         . WRITE "dictionary must be made compatible.  Must work on this now.",!
 | 
|---|
| 64 |         . DO PressToCont^TMGUSRIF
 | 
|---|
| 65 |         . SET DDOK=+$GET(^TMG("TMGSIPH","DD",+Y,"DIFF"))
 | 
|---|
| 66 |         GOTO TF1:(DDOK'=1)
 | 
|---|
| 67 |         DO TRANS1FIL(JNUM,+Y)
 | 
|---|
| 68 |         GOTO TF1
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | GET01FLD(JNUM,FILENUM,IEN) ;
 | 
|---|
| 72 |         ;"Purpose: Get .01 field (internal format) from server, or return previously obtained value.
 | 
|---|
| 73 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 74 |         ;"       FILENUM -- The file number to compare.
 | 
|---|
| 75 |         ;"       IEN -- the record to query -- Server-side IEN, not client IEN
 | 
|---|
| 76 |         ;"Result: returns the .01 value or "" if problem
 | 
|---|
| 77 |         SET RESULT=$GET(^TMG("TMGSIPH",".01 VALUE",FILENUM,IEN))
 | 
|---|
| 78 |         IF RESULT'="" GOTO G1DN
 | 
|---|
| 79 |         NEW QUERY,REPLY,ERROR,RESULT
 | 
|---|
| 80 |         SET QUERY="GET .01 FLD|"_FILENUM_"^"_IEN
 | 
|---|
| 81 |         DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,30)
 | 
|---|
| 82 |         IF $DATA(ERROR) WRITE ERROR,!
 | 
|---|
| 83 |         SET RESULT=$GET(REPLY(1))
 | 
|---|
| 84 |         SET ^TMG("TMGSIPH",".01 VALUE",FILENUM,IEN)=RESULT
 | 
|---|
| 85 | G1DN    QUIT RESULT
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 | TRANS1FIL(JNUM,FILENUM) ;
 | 
|---|
| 89 |         ;"Purpose: to move a remote file to local machine, overwriting local entries.
 | 
|---|
| 90 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 91 |         ;"       FILENUM -- The file number to transfer. (Not a subfile)
 | 
|---|
| 92 |         ;"Output: Will set output globals:
 | 
|---|
| 93 |         ;"      ^TMG("TMGSIPH","PT XLAT",FILENUM,RemoteIEN)=LocalIEN
 | 
|---|
| 94 |         ;"      ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RemotePointer,ReferToNodeToBeCorrected,Piece#OfNode)=""
 | 
|---|
| 95 |         ;"Results: none
 | 
|---|
| 96 |         ;
 | 
|---|
| 97 |         NEW MAXNUM
 | 
|---|
| 98 |         NEW QUERY,ERROR,RESULT,REPLY
 | 
|---|
| 99 |         SET QUERY="NUMRECS|"_FILENUM
 | 
|---|
| 100 |         DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,15)
 | 
|---|
| 101 |         IF $DATA(ERROR) WRITE ERROR,! GOTO T1FD
 | 
|---|
| 102 |         SET MAXNUM=+$GET(REPLY(1))
 | 
|---|
| 103 |         IF MAXNUM'>0 DO  GOTO T1FD
 | 
|---|
| 104 |         . WRITE "Error: number of records=",MAXNUM,!
 | 
|---|
| 105 |         NEW STARTTIME SET STARTTIME=$H
 | 
|---|
| 106 |         NEW GLREF SET GLREF=$GET(^DIC(FILENUM,0,"GL"))
 | 
|---|
| 107 |         NEW REF SET REF=$GET(^TMG("TMGSIPH","DOWNLOADED",FILENUM,"#PRIOR RUN#"))
 | 
|---|
| 108 |         NEW % SET %=1 ;"Default=Y
 | 
|---|
| 109 |         IF REF'="" DO
 | 
|---|
| 110 |         . WRITE "Continue transfer of records from point of last run"
 | 
|---|
| 111 |         . DO YN^DICN WRITE !
 | 
|---|
| 112 |         . IF %=2 SET REF=""
 | 
|---|
| 113 |         IF %=-1 GOTO T1FD
 | 
|---|
| 114 |         IF REF="" SET REF=$$CREF^DILF(GLREF_""""",")
 | 
|---|
| 115 |         SET GLREF=$$CREF^DILF(GLREF)
 | 
|---|
| 116 |         NEW QL SET QL=$QLENGTH(REF)
 | 
|---|
| 117 |         WRITE "Press ESC to abort...",!
 | 
|---|
| 118 |         NEW REC SET REC=""
 | 
|---|
| 119 |         NEW TMGABORT
 | 
|---|
| 120 |         FOR  DO  QUIT:(REF="")!(TMGABORT=1)
 | 
|---|
| 121 |         . SET TMGABORT=$$UserAborted^TMGUSRIF() QUIT:(TMGABORT=1)
 | 
|---|
| 122 |         . SET QUERY="ORDREF|"_REF
 | 
|---|
| 123 |         . DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,30)
 | 
|---|
| 124 |         . IF $DATA(ERROR) DO  QUIT
 | 
|---|
| 125 |         . . WRITE ERROR,!
 | 
|---|
| 126 |         . . SET REF=""
 | 
|---|
| 127 |         . IF $DATA(REPLY)=0 SET REF="" QUIT
 | 
|---|
| 128 |         . DO STOREDATA^TMGSIPHU(.REPLY)
 | 
|---|
| 129 |         . SET ^TMG("TMGSIPH","DOWNLOADED",FILENUM,"#PRIOR RUN#")=REF
 | 
|---|
| 130 |         . SET REF=$GET(REPLY(1)) QUIT:(REF="")
 | 
|---|
| 131 |         . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
 | 
|---|
| 132 |         . SET REF=$$QSUBS^TMGSIPHU(REF,QL)
 | 
|---|
| 133 |         . IF $QSUBSCRIPT(REF,QL)=REC do
 | 
|---|
| 134 |         . . write "ERROR: Record number didn't increase!",!
 | 
|---|
| 135 |         . SET REC=$QSUBSCRIPT(REF,QL)
 | 
|---|
| 136 |         . IF (+REC=REC) DO
 | 
|---|
| 137 |         . . IF $$REAL1PTOUT^TMGSIPH1(FILENUM,REC) ;"Ignore function result
 | 
|---|
| 138 |         . . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,REC)=REC ;"remote and local IEN's are same
 | 
|---|
| 139 |         . . SET ^TMG("TMGSIPH","DOWNLOADED",FILENUM,REC)=REC
 | 
|---|
| 140 |         . IF (REC#10)=0 DO
 | 
|---|
| 141 |         . . DO ProgressBar^TMGUSRIF(REC,"Progress: "_REC,0,MAXNUM,70,STARTTIME)
 | 
|---|
| 142 | T1FD    QUIT
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 | QRYSERVER(JNUM) ;
 | 
|---|
| 146 |         ;"Purpose: To display a given reference from the server
 | 
|---|
| 147 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 148 |         SET JNUM=+$GET(JNUM)
 | 
|---|
| 149 |         QUIT:(+JNUM'>0)
 | 
|---|
| 150 |         NEW QUERY,ERROR,RESULT,REPLY
 | 
|---|
| 151 |         FOR  DO  quit:(QUERY="^")
 | 
|---|
| 152 |         . READ "Enter reference> ",QUERY,!
 | 
|---|
| 153 |         . IF (QUERY="")!(QUERY="^") SET QUERY="^" QUIT
 | 
|---|
| 154 |         . ELSE  SET QUERY="GET|"_QUERY
 | 
|---|
| 155 |         . DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,5)
 | 
|---|
| 156 |         . IF $DATA(ERROR) WRITE ERROR,!
 | 
|---|
| 157 |         . IF $DATA(REPLY) do
 | 
|---|
| 158 |         . . WRITE "reply:",!
 | 
|---|
| 159 |         . . ZWR REPLY
 | 
|---|
| 160 |         quit
 | 
|---|
| 161 |  ;
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 | TRANSREF(JNUM) ;
 | 
|---|
| 164 |         ;"Purpose: To move an absolute reference from server to local
 | 
|---|
| 165 |         SET JNUM=+$GET(JNUM)
 | 
|---|
| 166 |         QUIT:(+JNUM'>0)
 | 
|---|
| 167 |         WRITE "This will allow an arbitrary global to be transferred",!
 | 
|---|
| 168 |         write "from the server.",!
 | 
|---|
| 169 |         NEW REF,QUERY,ERROR,RESULT,REPLY,%
 | 
|---|
| 170 |         FOR  DO  QUIT:(REF="^")
 | 
|---|
| 171 |         . READ "Enter reference (e.g. ""^ABC(123,"" or ^ to quit)> ",REF,!
 | 
|---|
| 172 |         . IF (REF="")!(REF="^") SET REF="^" QUIT
 | 
|---|
| 173 |         . SET REF=$$CREF^DILF(REF)
 | 
|---|
| 174 |         . SET QUERY="GET|"_REF
 | 
|---|
| 175 |         . DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,5)
 | 
|---|
| 176 |         . IF $DATA(ERROR) WRITE ERROR,! QUIT
 | 
|---|
| 177 |         . IF $DATA(REPLY) ZWR REPLY WRITE !
 | 
|---|
| 178 |         . SET %=1
 | 
|---|
| 179 |         . IF $DATA(@REF) DO  QUIT:(%'=1)
 | 
|---|
| 180 |         . . WRITE "WARNING: There is already data locally at ",REF,!
 | 
|---|
| 181 |         . . WRITE "Do you want to OVERWRITE this local data"
 | 
|---|
| 182 |         . . SET %=2
 | 
|---|
| 183 |         . . DO YN^DICN WRITE !
 | 
|---|
| 184 |         . DO STOREDATA^TMGSIPHU(.REPLY)
 | 
|---|
| 185 |         . WRITE "Data stored locally.",!,!
 | 
|---|
| 186 |         . KILL REPLY
 | 
|---|
| 187 |         quit
 | 
|---|
| 188 | 
 | 
|---|
| 189 | 
 | 
|---|
| 190 | 
 | 
|---|
| 191 | 
 | 
|---|
| 192 | ASKNEEDED(JNUM,OUTARRAY,INOUT,OPTIONS) ;
 | 
|---|
| 193 |         ;"Purpose: To review records of needed records, and ask user which file, or
 | 
|---|
| 194 |         ;"         which records to get, and return results of selected in array.
 | 
|---|
| 195 |         ;"         This can handle either the list of needed pointers IN or OUT.
 | 
|---|
| 196 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 197 |         ;"       OUTARRAY -- PASS BY REFERNCE, an OUT PARAMETER.  Filled as follows
 | 
|---|
| 198 |         ;"           OUTARRAY(FileNum,RecordNum)=""
 | 
|---|
| 199 |         ;"       INOUT -- OPTIONAL -- Default is "PTOUT".  Should be "PTIN" or "PTOUT"
 | 
|---|
| 200 |         ;"       OPTIONS -- OPTIONAL default is 0.  See SELNEEDED for details.
 | 
|---|
| 201 |         ;"Results: None.
 | 
|---|
| 202 |         ;"NOTE: uses ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RemotePointer,RefToNodeToBeCorrected,Piece#OfNode)=""
 | 
|---|
| 203 |         ;"           ^TMG("TMGSIPH","NEEDED RECORDS","PTIN",FILENUM,IEN)=""
 | 
|---|
| 204 |         ;
 | 
|---|
| 205 |         NEW REF SET REF=$NAME(^TMG("TMGSIPH","NEEDED RECORDS",INOUT))
 | 
|---|
| 206 |         DO SELNEEDED(JNUM,.OUTARRAY,REF,.OPTIONS)
 | 
|---|
| 207 |         QUIT
 | 
|---|
| 208 |  ;
 | 
|---|
| 209 |  ;
 | 
|---|
| 210 | SELNEEDED(JNUM,OUTARRAY,REF,OPTIONS) ;
 | 
|---|
| 211 |         ;"Purpose: To review an array of needed records, and ask user which file, or
 | 
|---|
| 212 |         ;"         which records to get, and return results of selected in array.
 | 
|---|
| 213 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 214 |         ;"       OUTARRAY -- PASS BY REFERNCE, an OUT PARAMETER.  Filled as follows
 | 
|---|
| 215 |         ;"           OUTARRAY(FileNum,RecordNum)=""
 | 
|---|
| 216 |         ;"       REF -- PASS BY NAME -- The name of the variable holding the records to ask from.  Variable
 | 
|---|
| 217 |         ;"              array should have this format:
 | 
|---|
| 218 |         ;"                @REF@(FILENUM,RPTR)=""
 | 
|---|
| 219 |         ;"                @REF@(FILENUM,RPTR)=""
 | 
|---|
| 220 |         ;"       OPTIONS -- OPTIONAL default is 0.  If 1, then all records are processed without asking.
 | 
|---|
| 221 |         ;"         OPTIONS("MAP MODE")=1 OPTIONAL, if exists, then different header is displayed
 | 
|---|
| 222 |         ;"         OPTIONS("NUMNEEDED")=1 OPTIONAL, if exists, will only get up to 200 records
 | 
|---|
| 223 |         ;"         OPTIONS("HEADER")=<header text> OPTIONAL.  If present, will be used for header display
 | 
|---|
| 224 |         ;"Results: None.
 | 
|---|
| 225 |         NEW TMGARRAY,TMGSEL,TMGSEL2
 | 
|---|
| 226 |         KILL OUTARRAY
 | 
|---|
| 227 |         SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
 | 
|---|
| 228 |         NEW FILENUM SET FILENUM=""
 | 
|---|
| 229 |         NEW AUTOMODE SET AUTOMODE=(+$GET(OPTIONS)=1)
 | 
|---|
| 230 |         FOR  SET FILENUM=$ORDER(@REF@(FILENUM)) QUIT:(+FILENUM'>0)  DO
 | 
|---|
| 231 |         . NEW DISPSTR SET DISPSTR="Get records from REMOTE file #"_FILENUM_" ("
 | 
|---|
| 232 |         . SET DISPSTR=DISPSTR_$$FILENAME^TMGFMUT2(FILENUM)_")"
 | 
|---|
| 233 |         . SET TMGARRAY(DISPSTR)=FILENUM
 | 
|---|
| 234 |         NEW STIME SET STIME=$H
 | 
|---|
| 235 |         NEW SHOWPROG SET SHOWPROG=0
 | 
|---|
| 236 |         NEW TMGCT SET TMGCT=0
 | 
|---|
| 237 |         NEW TMGDONE SET TMGDONE=0
 | 
|---|
| 238 |         NEW SHORTLST SET SHORTLST=+$GET(OPTIONS("NUMNEEDED"))
 | 
|---|
| 239 |         NEW HEADER
 | 
|---|
| 240 |         IF $DATA(OPTIONS("HEADER")) DO
 | 
|---|
| 241 |         . SET HEADER=$GET(OPTIONS("HEADER"))
 | 
|---|
| 242 |         ELSE  DO
 | 
|---|
| 243 |         . IF $GET(OPTIONS("MAP MODE"))=1 DO
 | 
|---|
| 244 |         . . SET HEADER="Select File(s) to MAP to local records in. Press <ESC><ESC> when Done."
 | 
|---|
| 245 |         . ELSE  SET HEADER="Select File(s) to get REMOTE records from. Press <ESC><ESC> when Done."
 | 
|---|
| 246 |         IF AUTOMODE MERGE TMGSEL=TMGARRAY
 | 
|---|
| 247 |         ELSE  DO Selector^TMGUSRIF("TMGARRAY","TMGSEL",HEADER)
 | 
|---|
| 248 |         NEW TMGABORT SET TMGABORT=0
 | 
|---|
| 249 |         NEW IDX SET IDX=""
 | 
|---|
| 250 |         FOR  SET IDX=$ORDER(TMGSEL(IDX)) QUIT:(IDX="")!TMGABORT!TMGDONE  DO
 | 
|---|
| 251 |         . SET FILENUM=$GET(TMGSEL(IDX)) QUIT:FILENUM=""
 | 
|---|
| 252 |         . NEW FNAME SET FNAME=$$FILENAME^TMGFMUT2(FILENUM)
 | 
|---|
| 253 |         . NEW RPTR SET RPTR=""
 | 
|---|
| 254 |         . KILL TMGARRAY,TMGSEL2
 | 
|---|
| 255 |         . NEW RECCT SET RECCT=0
 | 
|---|
| 256 |         . NEW SELALL SET SELALL=0
 | 
|---|
| 257 |         . NEW ASKED SET ASKED=0
 | 
|---|
| 258 |         . IF AUTOMODE=0 WRITE "GETTING NAMES OF RECORDS...",!
 | 
|---|
| 259 |         . FOR  SET RPTR=$ORDER(@REF@(FILENUM,RPTR)) QUIT:(RPTR="")!SELALL!TMGABORT!TMGDONE  DO
 | 
|---|
| 260 |         . . NEW DISPSTR SET DISPSTR="File: "_FNAME_", record #"_$$RJ^XLFSTR(RPTR,6)
 | 
|---|
| 261 |         . . IF AUTOMODE=0 SET DISPSTR=DISPSTR_" -- "_$$GET01FLD(JNUM,FILENUM,RPTR)
 | 
|---|
| 262 |         . . SET TMGARRAY(DISPSTR)=RPTR
 | 
|---|
| 263 |         . . SET RECCT=RECCT+1
 | 
|---|
| 264 |         . . SET TMGCT=TMGCT+1
 | 
|---|
| 265 |         . . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>10) DO  ;"Turn on progress bar after 10 seconds.
 | 
|---|
| 266 |         . . . SET SHOWPROG=1
 | 
|---|
| 267 |         . . IF (SHOWPROG=1),(TMGCT>500) DO
 | 
|---|
| 268 |         . . . DO ProgressBar^TMGUSRIF(100,"Gathering list of needed records "_RECCT,-1,-1,70,STIME)
 | 
|---|
| 269 |         . . . SET TMGCT=0
 | 
|---|
| 270 |         . . IF (RECCT>200),(ASKED=0) DO
 | 
|---|
| 271 |         . . . IF SHORTLST SET TMGDONE=1,RECCT=0 QUIT
 | 
|---|
| 272 |         . . . SET ASKED=1
 | 
|---|
| 273 |         . . . IF AUTOMODE=1 QUIT
 | 
|---|
| 274 |         . . . NEW MENU,USRSLCT
 | 
|---|
| 275 |         . . . SET MENU(0)="File "_FNAME_" has > 200 records."
 | 
|---|
| 276 |         . . . SET MENU(1)="Automatically Select ALL records"_$char(9)_"AutoSelALL"
 | 
|---|
| 277 |         . . . SET MENU(2)="Show LONG list to allow picking individual records"_$char(9)_"SelectList"
 | 
|---|
| 278 |         . . . NEW DONE SET DONE=0
 | 
|---|
| 279 |         . . . FOR  DO  QUIT:(DONE=1)!(TMGABORT)
 | 
|---|
| 280 |         . . . . WRITE #
 | 
|---|
| 281 |         . . . . SET USRSLCT=$$MENU^TMGUSRIF(.MENU,"^")
 | 
|---|
| 282 |         . . . . SET DONE=1
 | 
|---|
| 283 |         . . . . IF USRSLCT="^" SET TMGABORT=1 QUIT
 | 
|---|
| 284 |         . . . . IF USRSLCT="AutoSelALL" SET SELALL=1 QUIT
 | 
|---|
| 285 |         . . . . IF USRSLCT="SelectList" QUIT
 | 
|---|
| 286 |         . . . . ELSE  SET DONE=0
 | 
|---|
| 287 |         . IF TMGABORT QUIT
 | 
|---|
| 288 |         . IF (RECCT=1)!AUTOMODE!SELALL DO
 | 
|---|
| 289 |         . . NEW TMGSKIP SET TMGSKIP=0
 | 
|---|
| 290 |         . . SET TMGCT=0
 | 
|---|
| 291 |         . . NEW ONEREC SET ONEREC=""
 | 
|---|
| 292 |         . . FOR  SET ONEREC=$ORDER(@REF@(FILENUM,ONEREC)) QUIT:(ONEREC="")!TMGSKIP  DO
 | 
|---|
| 293 |         . . . SET TMGSEL2(ONEREC)=ONEREC
 | 
|---|
| 294 |         . . . IF SHORTLST,(TMGCT>200) SET TMGSKIP=1,TMGDONE=1 QUIT
 | 
|---|
| 295 |         . . . SET TMGCT=TMGCT+1
 | 
|---|
| 296 |         . . . SET RECCT=RECCT+1
 | 
|---|
| 297 |         . . . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>10) DO  ;"Turn on progress bar after 10 seconds.
 | 
|---|
| 298 |         . . . . SET SHOWPROG=1
 | 
|---|
| 299 |         . . . IF (SHOWPROG=1),(TMGCT>500) DO
 | 
|---|
| 300 |         . . . . DO ProgressBar^TMGUSRIF(100,"Gathering list of needed records "_RECCT,0,100,70,STIME)
 | 
|---|
| 301 |         . . . . SET TMGCT=0
 | 
|---|
| 302 |         . . SET SELALL=1
 | 
|---|
| 303 |         . IF SELALL=0 DO
 | 
|---|
| 304 |         . . IF $GET(OPTIONS("MAP MODE"))=1 DO
 | 
|---|
| 305 |         . . . SET HEADER="Select records to MAP to local records.  Press <ESC><ESC> when Done."
 | 
|---|
| 306 |         . . ELSE  SET HEADER="Select records to get from Server.  Press <ESC><ESC> when Done."
 | 
|---|
| 307 |         . . DO Selector^TMGUSRIF("TMGARRAY","TMGSEL2",HEADER)
 | 
|---|
| 308 |         . NEW I2 SET I2=""
 | 
|---|
| 309 |         . FOR  SET I2=$ORDER(TMGSEL2(I2)) QUIT:(I2="")  DO
 | 
|---|
| 310 |         . . SET RPTR=$GET(TMGSEL2(I2))
 | 
|---|
| 311 |         . . SET OUTARRAY(FILENUM,RPTR)=""
 | 
|---|
| 312 |         ;
 | 
|---|
| 313 |         QUIT
 | 
|---|
| 314 |  ;
 | 
|---|
| 315 |  ;
 | 
|---|
| 316 | NUMNEEDED(JNUM,INOUT)
 | 
|---|
| 317 |         ;"Purpose: To count number of records needed from server.
 | 
|---|
| 318 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 319 |         ;"       INOUT -- OPTIONAL -- Default is "PTOUT".  Should be "PTIN" or "PTOUT"
 | 
|---|
| 320 |         ;"Output: Returns the number of records needed.
 | 
|---|
| 321 |         ;"
 | 
|---|
| 322 |         NEW GETARRAY,FILENUM,RESULT
 | 
|---|
| 323 |         SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
 | 
|---|
| 324 |         NEW MODE SET MODE=1,MODE("NUMNEEDED")=1  ;"Will limit number counting to 200 mg
 | 
|---|
| 325 |         DO ASKNEEDED(JNUM,.GETARRAY,INOUT,.MODE)
 | 
|---|
| 326 |         SET FILENUM=0
 | 
|---|
| 327 |         SET RESULT=0
 | 
|---|
| 328 |         NEW TMGCT SET TMGCT=0
 | 
|---|
| 329 |         NEW STIME SET STIME=$H
 | 
|---|
| 330 |         NEW SHOWPROG SET SHOWPROG=0
 | 
|---|
| 331 |         FOR  SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="")  DO
 | 
|---|
| 332 |         . NEW IEN SET IEN=""
 | 
|---|
| 333 |         . FOR  SET IEN=$ORDER(GETARRAY(FILENUM,IEN),-1) QUIT:(IEN="")  DO
 | 
|---|
| 334 |         . . SET RESULT=RESULT+1
 | 
|---|
| 335 |         . . SET TMGCT=TMGCT+1
 | 
|---|
| 336 |         . . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>5) DO  ;"Turn on progress bar after 5 seconds.
 | 
|---|
| 337 |         . . . SET SHOWPROG=1
 | 
|---|
| 338 |         . . IF (SHOWPROG=1),(TMGCT>1000) DO
 | 
|---|
| 339 |         . . . DO ProgressBar^TMGUSRIF(100,"Counting records: "_TMGCT,0,100,70)
 | 
|---|
| 340 |         . . . SET TMGCT=0
 | 
|---|
| 341 |         IF TMGCT>200 SET TMGCT=TMGCT_"+"
 | 
|---|
| 342 |         QUIT TMGCT
 | 
|---|
| 343 |  ;
 | 
|---|
| 344 |  ;
 | 
|---|
| 345 | CHCK4SIM(FILENUM,ARRAY,ANIEN,VALUE01,IENS)
 | 
|---|
| 346 |         ;"Purpose: To look at an array, as returned from server, and see if there is
 | 
|---|
| 347 |         ;"         a similar record already on the client.
 | 
|---|
| 348 |         ;"Input:  FILENUM -- the fileman filenumber of file to get from remote server
 | 
|---|
| 349 |         ;"        ARRAY -- The global record array, as returned from server.
 | 
|---|
| 350 |         ;"        ANIEN -- PASS BY REFERENCE.  Will be filled with IEN match
 | 
|---|
| 351 |         ;"                If IENS is passed (i.e. if dealing with a subfile), then ANIEN is passed
 | 
|---|
| 352 |         ;"                back in standard IENS format (e.g. '7,1234,')
 | 
|---|
| 353 |         ;"        VALUE01 -- OPTIONAL.  This allows a .01 value to be passed.  If provided, then
 | 
|---|
| 354 |         ;"                the ARRAY won't be searched for a .01 value.
 | 
|---|
| 355 |         ;"        IENS -- OPTIONAL.  If FILENUM is a subfile, then IENS is needed for lookup.
 | 
|---|
| 356 |         ;"                 IENS is modified, so **DON'T** PASS BY REFERENCE
 | 
|---|
| 357 |         ;"Results: 0 if no similar record already on the local server (i.e. NO MATCH)
 | 
|---|
| 358 |         ;"         1 if a match WAS found.
 | 
|---|
| 359 |         ;"Output: ANIEN is modified.
 | 
|---|
| 360 |         ;"NOTE: If .01 field of passed record array matches to 2 or more records, then NO MATCH resulted
 | 
|---|
| 361 |         ;"      Also, if file does not have a "B" cross reference, then NO MATCH resulted.
 | 
|---|
| 362 |         ;"      Also, the first 30 characters (only) are tested for match in "B" xref.
 | 
|---|
| 363 |         ;
 | 
|---|
| 364 |         NEW RESULT SET RESULT=0
 | 
|---|
| 365 |         SET ANIEN=0
 | 
|---|
| 366 |         SET FILENUM=+$GET(FILENUM) ;" If in format of 'SubFile{ParentFile', then strip off parent filenum.
 | 
|---|
| 367 |         NEW GREF SET GREF=$$GETGREF^TMGFMUT2(FILENUM,.IENS) ;"IENS not used if not subfile.
 | 
|---|
| 368 |         IF GREF="" GOTO C4SDN
 | 
|---|
| 369 |         NEW BREF SET BREF=GREF_"""B"")"
 | 
|---|
| 370 |         NEW SAVIENS SET SAVIENS=$GET(IENS)
 | 
|---|
| 371 |         SET $PIECE(IENS,",",1)=""  ;"e.g. '7,2345,' --> ',2345,' to specify parent, but no particular subfile entry
 | 
|---|
| 372 |         IF $DATA(@BREF)=0 GOTO C4SDN
 | 
|---|
| 373 |         NEW CGREF SET CGREF=$$CREF^DILF(GREF)
 | 
|---|
| 374 |         NEW GREFLEN SET GREFLEN=$QLENGTH(CGREF)
 | 
|---|
| 375 |         NEW VALUE SET VALUE=$GET(VALUE01)
 | 
|---|
| 376 |         NEW TMGI SET TMGI=0
 | 
|---|
| 377 |         FOR  SET TMGI=$ORDER(ARRAY(TMGI)) QUIT:(TMGI="")!(VALUE'="")  DO  ;"Find .01 value
 | 
|---|
| 378 |         . NEW REF SET REF=$GET(ARRAY(TMGI))
 | 
|---|
| 379 |         . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
 | 
|---|
| 380 |         . SET TMGI=TMGI+1
 | 
|---|
| 381 |         . IF REF="" SET TMGI="" QUIT
 | 
|---|
| 382 |         . IF $QSUBSCRIPT(REF,GREFLEN+2)'=0 QUIT ;"Only check 0 node.
 | 
|---|
| 383 |         . IF $QLENGTH(REF)'=(GREFLEN+2) QUIT  ;"Only allow  ^GREF(xxx,xxx,IEN,0)
 | 
|---|
| 384 |         . SET VALUE=$EXTRACT($GET(ARRAY(TMGI)),2,10000)
 | 
|---|
| 385 |         . SET VALUE=$PIECE(VALUE,"^",1)
 | 
|---|
| 386 |         IF VALUE="" GOTO C4SDN
 | 
|---|
| 387 |         IF (FILENUM'=9999999.27),$GET(^TMG("TMGSIPH","SKIP CHCK4SIM",FILENUM,VALUE))=1 GOTO C4SDN
 | 
|---|
| 388 |         NEW TMGOUT,TMGMSG
 | 
|---|
| 389 |         DO FIND^DIC(FILENUM,IENS,"@;.01I","BOQUX",VALUE,"*","B","","","TMGOUT","TMGMSG")
 | 
|---|
| 390 |         DO ShowIfDIERR^TMGDEBUG(.TMGOUT)
 | 
|---|
| 391 |         NEW CT SET CT=+$GET(TMGOUT("DILIST",0))
 | 
|---|
| 392 |         IF CT=1 DO
 | 
|---|
| 393 |         . ;"Ensure matched local record didn't actually come from server
 | 
|---|
| 394 |         . NEW LPTR SET LPTR=+$GET(TMGOUT("DILIST",2,1))
 | 
|---|
| 395 |         . IF $DATA(^TMG("TMGSIPH","DOWNLOADED",FILENUM,LPTR)) QUIT
 | 
|---|
| 396 |         . IF SAVIENS'="" DO
 | 
|---|
| 397 |         . . SET ANIEN=SAVIENS
 | 
|---|
| 398 |         . . SET $PIECE(ANIEN,",",1)=LPTR
 | 
|---|
| 399 |         . ELSE  SET ANIEN=LPTR
 | 
|---|
| 400 |         . SET RESULT=1
 | 
|---|
| 401 |         ELSE  IF CT>100 DO
 | 
|---|
| 402 |         . SET ^TMG("TMGSIPH","SKIP CHCK4SIM",FILENUM,VALUE)=1
 | 
|---|
| 403 |         ;
 | 
|---|
| 404 | C4SDN   QUIT RESULT
 | 
|---|
| 405 |  ;
 | 
|---|
| 406 |  ;
 | 
|---|
| 407 | XTRACT01FLD(ARRAY) ;
 | 
|---|
| 408 |         ;"Purpose: To remove pointed-to .01 Field values from array returned from GET RECORD & XREF,
 | 
|---|
| 409 |         ;"         and store these for future reference.  Removes %PTRSOUT%
 | 
|---|
| 410 |         ;"Input: ARRAY -- PASS BY REFERENCE.  Results returned from GET RECORD & XREF.  Format:
 | 
|---|
| 411 |         ;"          ARRAY(1)="<Ref>="
 | 
|---|
| 412 |         ;"          ARRAY(2)="=<Value>"
 | 
|---|
| 413 |         ;"          ARRAY(3)="<Ref>="
 | 
|---|
| 414 |         ;"          ARRAY(4)="=<Value>"
 | 
|---|
| 415 | 
 | 
|---|
| 416 |         ;"          ...
 | 
|---|
| 417 |         ;"          ARRAY(20)="%PTRSOUT%^PointedToFile^IEN^FIELD_VALUE"
 | 
|---|
| 418 |         ;"          ARRAY(21)="%PTRSOUT%^PointedToFile^IEN^FIELD_VALUE"
 | 
|---|
| 419 |         ;"          ...
 | 
|---|
| 420 |         ;"Results: none
 | 
|---|
| 421 |         NEW RESULT SET RESULT=0 ;Default to error.
 | 
|---|
| 422 |         NEW SHOWPG SET SHOWPG=0
 | 
|---|
| 423 |         NEW TMGCT SET TMGCT=0
 | 
|---|
| 424 |         NEW STIME SET STIME=$H
 | 
|---|
| 425 |         NEW TMGI SET TMGI=""
 | 
|---|
| 426 |         FOR  SET TMGI=$ORDER(ARRAY(TMGI)) QUIT:(+TMGI'>0)  DO
 | 
|---|
| 427 |         . IF (SHOWPG=0),($$HDIFF^XLFDT($H,STIME,2)>15) DO  ;"Turn on progress bar after 15 seconds.
 | 
|---|
| 428 |         . . SET SHOWPG=1
 | 
|---|
| 429 |         . . SET TMGMIN=$ORDER(ARRAY(0))
 | 
|---|
| 430 |         . . SET TMGMAX=$ORDER(ARRAY(""),-1)
 | 
|---|
| 431 |         . IF (SHOWPG=1),(TMGCT>2000) DO
 | 
|---|
| 432 |         . . DO ProgressBar^TMGUSRIF(TMGI,"Extracting pointers from server data",TMGMIN,TMGMAX,70,STIME)
 | 
|---|
| 433 |         . . SET TMGCT=0
 | 
|---|
| 434 |         . SET TMGCT=TMGCT+1
 | 
|---|
| 435 |         . IF $GET(ARRAY(TMGI))'["%PTRSOUT%" QUIT
 | 
|---|
| 436 |         . NEW FILENUM SET FILENUM=$PIECE(ARRAY(TMGI),"^",2)
 | 
|---|
| 437 |         . NEW IEN SET IEN=$PIECE(ARRAY(TMGI),"^",3)
 | 
|---|
| 438 |         . NEW VALUE SET VALUE=$PIECE(ARRAY(TMGI),"^",4)
 | 
|---|
| 439 |         . KILL ARRAY(TMGI)
 | 
|---|
| 440 |         . SET ^TMG("TMGSIPH",".01 VALUE",FILENUM,IEN)=VALUE
 | 
|---|
| 441 |         QUIT
 | 
|---|
| 442 |  ;
 | 
|---|
| 443 |  ;
 | 
|---|
| 444 | GETANDFIXREC(JNUM,FILENUM,RPTR,OVERWRITE,TALLY,INOUT) ;
 | 
|---|
| 445 |         ;"Purpose: To request a record from server, and integrate into local vista,
 | 
|---|
| 446 |         ;"         resolving pointers locally to point to newly downloaded record.
 | 
|---|
| 447 |         ;"Input:  JNUM -- The job number of the background client process
 | 
|---|
| 448 |         ;"        FILENUM -- the fileman filenumber of file to get from remote server
 | 
|---|
| 449 |         ;"                      Can be in format of SubFileNum{ParentFileNum{GrandParent....
 | 
|---|
| 450 |         ;"        RPTR -- The record number on the server to get.
 | 
|---|
| 451 |         ;"                      Can be in IENS format, e.g. '7,34532,' if FILENUM is a subfile.
 | 
|---|
| 452 |         ;"        OVERWRITE -- OPTIONAL.  If 1, then prior local records may be overwritten.
 | 
|---|
| 453 |         ;"                                If '?' then figure out if should overwrite, asking user if needed.
 | 
|---|
| 454 |         ;"        TALLY -- OPTIONAL.  PASS BY REFERENCE.  An array to keep progress stats.  Format:
 | 
|---|
| 455 |         ;"                 TALLY("ALREADY LOCAL FOUND")=#
 | 
|---|
| 456 |         ;"                 TALLY("DOWNLOADED")=#
 | 
|---|
| 457 |         ;"                 TALLY(FILENUM,"NEW REC NEEDED")=#
 | 
|---|
| 458 |         ;"                 TALLY("UNNEEDED RECORDS")=#
 | 
|---|
| 459 |         ;"       INOUT -- OPTIONAL -- Default is "PTOUT".  Should be "PTIN" or "PTOUT"
 | 
|---|
| 460 |         ;"NOTE:  Gobal ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT") used, with format as below:
 | 
|---|
| 461 |         ;"             ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RemotePointer,RefToNodeToBeCorrected,Piece#OfNode)=""
 | 
|---|
| 462 |         ;"       As pointers are resolved, the entries will be KILLED from the above global
 | 
|---|
| 463 |         ;"Results: 1 if OK, -1 if error, -2 if abort
 | 
|---|
| 464 |         ;
 | 
|---|
| 465 |         NEW QUERY,REPLY,ERROR,NEWIEN
 | 
|---|
| 466 |         NEW RESULT SET RESULT=-1 ;"Default to error
 | 
|---|
| 467 |         NEW TMGABORT SET TMGABORT=0
 | 
|---|
| 468 |         SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
 | 
|---|
| 469 |         SET OVERWRITE=$GET(OVERWRITE)
 | 
|---|
| 470 |         SET FILENUM=$GET(FILENUM)
 | 
|---|
| 471 |         NEW ISSUBFIL SET ISSUBFIL=$$ISSUBFIL^TMGFMUT2(+FILENUM)
 | 
|---|
| 472 |         IF +RPTR'>0 GOTO GAFRD
 | 
|---|
| 473 |         SET NEWIEN=RPTR        ;"Default of not changing IEN
 | 
|---|
| 474 |         SET FILENUM=+FILENUM IF FILENUM'>0 GOTO GAFRD  ;"If subfile, strip parent file number.
 | 
|---|
| 475 |         NEW LPTR SET LPTR=$GET(^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR))
 | 
|---|
| 476 |         IF (+LPTR>0) DO  GOTO GAFR1  ;"Remote records already downloaded, so just link to it.
 | 
|---|
| 477 |         . SET NEWIEN=LPTR
 | 
|---|
| 478 |         . SET TALLY("ALREADY LOCAL FOUND")=+$GET(TALLY("ALREADY LOCAL FOUND"))+1
 | 
|---|
| 479 |         NEW CONHANDL SET CONHANDL=$GET(^TMG("TMGSIPH","CONFLICT HANDL",FILENUM))
 | 
|---|
| 480 |         NEW USELOCAL SET USELOCAL=0
 | 
|---|
| 481 |         IF CONHANDL="UseLocal" DO  GOTO:(USELOCAL=1) GAF2
 | 
|---|
| 482 |         . ;"If pointer is to a file specified as ALWAYS LOCAL, Handle here, if .01 value is known.
 | 
|---|
| 483 |         . NEW VALUE SET VALUE=$GET(^TMG("TMGSIPH",".01 VALUE",FILENUM,RPTR))
 | 
|---|
| 484 |         . QUIT:(VALUE="")
 | 
|---|
| 485 |         . NEW ANIEN
 | 
|---|
| 486 |         . IF $$CHCK4SIM(FILENUM,,.ANIEN,VALUE,RPTR)=0 QUIT  ;"RPTR (as IENS) not used if not subfile.
 | 
|---|
| 487 |         . IF +ANIEN'>0 QUIT
 | 
|---|
| 488 |         . SET NEWIEN=ANIEN
 | 
|---|
| 489 |         . SET USELOCAL=1
 | 
|---|
| 490 |         NEW GREF SET GREF=$$GETGREF^TMGFMUT2(FILENUM,RPTR) ;"RPTR (as IENS) not used if not subfile.
 | 
|---|
| 491 |         IF GREF="" GOTO GAFRD
 | 
|---|
| 492 |         NEW ZREF SET ZREF=GREF_"0)"
 | 
|---|
| 493 |         NEW CGREF SET CGREF=$$CREF^DILF(GREF)
 | 
|---|
| 494 |         IF ISSUBFIL DO
 | 
|---|
| 495 |         . NEW REF SET REF=GREF_+RPTR
 | 
|---|
| 496 |         . SET QUERY="GET REF & FILE XREF|"_REF_"^"_FILENUM_"^"_RPTR
 | 
|---|
| 497 |         ELSE  DO
 | 
|---|
| 498 |         . SET QUERY="GET RECORD & XREF|"_FILENUM_"^"_RPTR
 | 
|---|
| 499 |         DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,30)
 | 
|---|
| 500 |         IF $DATA(ERROR) DO  GOTO GAFRD
 | 
|---|
| 501 |         . WRITE ERROR,!
 | 
|---|
| 502 |         IF $DATA(REPLY)=0 DO  GOTO GAFR0 ;"No data on server for record, so zero pointers
 | 
|---|
| 503 |         . SET NEWIEN=0
 | 
|---|
| 504 |         DO XTRACT01FLD(.REPLY)
 | 
|---|
| 505 |         NEW SIMIEN
 | 
|---|
| 506 |         IF $$CHCK4SIM(FILENUM,.REPLY,.SIMIEN,,RPTR) DO  ;"A prior similar record already is on client.
 | 
|---|
| 507 |         . SET NEWIEN=SIMIEN  ;"If dealing with subfiles, SIMIEN will be in IENS format.
 | 
|---|
| 508 |         NEW REF SET REF=GREF_+NEWIEN_")"
 | 
|---|
| 509 |         IF $DATA(@REF) DO
 | 
|---|
| 510 |         . NEW TEMP SET TEMP=$$GETTARGETIEN^TMGSIPHU(FILENUM,.REPLY,.NEWIEN)
 | 
|---|
| 511 |         . SET REF=GREF_+NEWIEN_")" ;"NEWIEN might have changed.
 | 
|---|
| 512 |         . IF TEMP="ABORT" SET RESULT=-2,TMGABORT=1 QUIT
 | 
|---|
| 513 |         . IF TEMP="USELOCAL" SET USELOCAL=1 QUIT
 | 
|---|
| 514 |         . IF TEMP="OVERWRITE" DO  QUIT   ;"OVERWRITE LOCAL RECORD #LPTR (KILL, THEN STORE later)
 | 
|---|
| 515 |         . . KILL @REF
 | 
|---|
| 516 | GAF2    IF ($GET(TMGABORT)=1)!(NEWIEN'>0) GOTO GAFRD
 | 
|---|
| 517 |         IF USELOCAL=1 DO  GOTO GAFR0
 | 
|---|
| 518 |         . SET TALLY("ALREADY LOCAL FOUND")=$GET(TALLY("ALREADY LOCAL FOUND"))+1
 | 
|---|
| 519 |         IF $$STOREDAS^TMGSIPHU(FILENUM,NEWIEN,.REPLY)=-1 GOTO GAFRD
 | 
|---|
| 520 |         SET $PIECE(@ZREF,"^",4)=+$PIECE($GET(@ZREF),"^",4)+1 ;"Update File Header to reflect added records
 | 
|---|
| 521 |         IF +NEWIEN>$PIECE(@ZREF,"^",3) SET $PIECE(@ZREF,"^",3)=NEWIEN
 | 
|---|
| 522 |         IF $$REAL1PTOUT^TMGSIPH1(FILENUM,NEWIEN,.TALLY) ;"Scan for pointers out.  Ignore function result
 | 
|---|
| 523 |         SET ^TMG("TMGSIPH","DOWNLOADED",FILENUM,NEWIEN)=RPTR
 | 
|---|
| 524 |         SET TALLY("DOWNLOADED")=+$GET(TALLY("DOWNLOADED"))+1
 | 
|---|
| 525 | GAFR0   SET ^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR)=NEWIEN  ;"Add entry to Pointer translation table.
 | 
|---|
| 526 |         IF (RPTR'=NEWIEN) SET ^TMG("TMGSIPH","NEED RE-XREF",FILENUM)="" ;"Flag for re-cross referencing again later.
 | 
|---|
| 527 |         IF USELOCAL=1 SET ^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR,"L")=1 ;"Signal that local record was used
 | 
|---|
| 528 | GAFR1   DO UNNEEDPTR^TMGSIPHU(FILENUM,RPTR,NEWIEN,INOUT,.TALLY)
 | 
|---|
| 529 |         IF INOUT="PTIN" KILL ^TMG("TMGSIPH","NEEDED RECORDS","PTIN",FILENUM,RPTR)
 | 
|---|
| 530 |         IF $$NEEDPTIN(FILENUM)!(INOUT="PTIN") DO  ;"See if pointers IN are needed
 | 
|---|
| 531 |         . IF LPTR=RPTR QUIT ;"No need for relinking if this record was already local.
 | 
|---|
| 532 |         . DO GETPTIN^TMGSIPH4(JNUM,FILENUM,RPTR)
 | 
|---|
| 533 |         SET RESULT=1
 | 
|---|
| 534 | GAFRD   IF (RESULT'=-1)&(TMGABORT=1) SET RESULT=-2
 | 
|---|
| 535 |         QUIT RESULT
 | 
|---|
| 536 |  ;
 | 
|---|
| 537 |  ;
 | 
|---|
| 538 | NEEDPTIN(FILENUM) ;
 | 
|---|
| 539 |         ;"Purpose: To have a centralized location for which files should automatically trigger a request
 | 
|---|
| 540 |         ;"         for pointers-IN
 | 
|---|
| 541 |         ;"NOTE:
 | 
|---|
| 542 |         NEW RESULT SET RESULT=0
 | 
|---|
| 543 |         IF FILENUM=2 SET RESULT=1
 | 
|---|
| 544 |         ELSE  IF (FILENUM=9000001) SET RESULT=1
 | 
|---|
| 545 |         ELSE  IF (FILENUM=8925) SET RESULT=1
 | 
|---|
| 546 |         ELSE  IF (FILENUM["8925.") SET RESULT=1
 | 
|---|
| 547 |         QUIT RESULT
 | 
|---|
| 548 |  ;
 | 
|---|
| 549 |  ;
 | 
|---|
| 550 | AUTONEEDED(JNUM) ;
 | 
|---|
| 551 |         ;"Purpose: To automatically get all pointers IN records and also pointers OUT records
 | 
|---|
| 552 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 553 |         ;"Results: None
 | 
|---|
| 554 |         ;
 | 
|---|
| 555 |         NEW NPTO,NPTI,TALLY
 | 
|---|
| 556 | AN1     SET NPTO=$$NUMNEEDED^TMGSIPH3(JNUM,"PTOUT")
 | 
|---|
| 557 |         IF NPTO>0 IF $$HANDLNEEDED^TMGSIPH3(JNUM,"PTOUT",1,.TALLY)=-1 GOTO ANDN
 | 
|---|
| 558 |         SET NPTI=$$NUMNEEDED^TMGSIPH3(JNUM,"PTIN")
 | 
|---|
| 559 |         IF (NPTO=0)&(NPTI=0) GOTO ANDN
 | 
|---|
| 560 |         IF NPTI>0 IF $$HANDLNEEDED^TMGSIPH3(JNUM,"PTIN",1,.TALLY)=-1 GOTO ANDN
 | 
|---|
| 561 |         GOTO AN1
 | 
|---|
| 562 | ANDN    IF $DATA(TALLY) WRITE ! ZWR TALLY
 | 
|---|
| 563 |         ELSE  WRITE "No records needed auto-downloading.",!
 | 
|---|
| 564 |         DO PressToCont^TMGUSRIF
 | 
|---|
| 565 |         QUIT
 | 
|---|
| 566 |  ;
 | 
|---|
| 567 |  ;
 | 
|---|
| 568 | HANDLNEEDED(JNUM,INOUT,AUTOMODE,TALLY) ;
 | 
|---|
| 569 |         ;"Purpose: Ask user which records to get from server, then get them and update
 | 
|---|
| 570 |         ;"         pointer translation table.
 | 
|---|
| 571 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 572 |         ;"       INOUT -- OPTIONAL -- Default is "PTOUT".  Should be "PTIN" or "PTOUT"
 | 
|---|
| 573 |         ;"       AUTOMODE -- OPTIONAL default is 0.  If 1, then all records are processed without asking.
 | 
|---|
| 574 |         ;"       TALLY -- OPTIONAL.  PASS BY REFERENCE.  An array to show downloads.
 | 
|---|
| 575 |         ;"Results: 1 if OK, -1 if abort.
 | 
|---|
| 576 |         ;
 | 
|---|
| 577 |         NEW GETARRAY,FILENUM,IEN,STIME,TMGCT,SHOWPROG,QUERY,ERROR,TMGMAX
 | 
|---|
| 578 |         SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
 | 
|---|
| 579 |         NEW TMGABORT SET TMGABORT=0
 | 
|---|
| 580 |         NEW RESULT SET RESULT=1 ;"Default to success
 | 
|---|
| 581 | HN1     DO ASKNEEDED(JNUM,.GETARRAY,INOUT,.AUTOMODE)
 | 
|---|
| 582 |         IF $DATA(GETARRAY)=0 GOTO HNDN
 | 
|---|
| 583 |         ;"Process JUST ONE record from each file to begin with, to try to minimize user interaction after that.
 | 
|---|
| 584 |         SET FILENUM=0
 | 
|---|
| 585 |         FOR  SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="")!(TMGABORT=1)  DO
 | 
|---|
| 586 |         . QUIT:($$DDOK^TMGSIPH1(JNUM,FILENUM)'=1)
 | 
|---|
| 587 |         . QUIT:($$PREPXREF^TMGSIPH1(JNUM,FILENUM)'=1)
 | 
|---|
| 588 |         . SET IEN=$ORDER(GETARRAY(FILENUM,""),-1) QUIT:(IEN="")
 | 
|---|
| 589 |         . NEW TMP SET TMP=$$GETANDFIXREC(JNUM,FILENUM,IEN,"?",.TALLY,INOUT)
 | 
|---|
| 590 |         . IF TMP=-2 SET TMGABORT=1 QUIT
 | 
|---|
| 591 |         . IF TMP=-1 DO HNDLGAFE(FILENUM,IEN,.TMGABORT) QUIT
 | 
|---|
| 592 |         . KILL GETARRAY(FILENUM,IEN) ;"Prevent reprocessing below
 | 
|---|
| 593 |         ;"Now loop through ALL the files and records
 | 
|---|
| 594 |         SET FILENUM=0,SHOWPROG=0
 | 
|---|
| 595 |         FOR  SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="")!(TMGABORT=1)  DO
 | 
|---|
| 596 |         . QUIT:($$DDOK^TMGSIPH1(JNUM,FILENUM)'=1)
 | 
|---|
| 597 |         . QUIT:($$PREPXREF^TMGSIPH1(JNUM,FILENUM)'=1)
 | 
|---|
| 598 |         . SET TMGMAX=-1,STIME=$H,TMGCT=1,IEN=""
 | 
|---|
| 599 |         . FOR  SET IEN=$ORDER(GETARRAY(FILENUM,IEN),-1) QUIT:(IEN="")!(TMGABORT=1)  DO
 | 
|---|
| 600 |         . . IF TMGMAX=-1 SET TMGMAX=IEN
 | 
|---|
| 601 |         . . SET TMGABORT=$$UserAborted^TMGUSRIF() QUIT:(TMGABORT=1)
 | 
|---|
| 602 |         . . SET TMGCT=TMGCT+1
 | 
|---|
| 603 |         . . NEW TMP SET TMP=$$GETANDFIXREC(JNUM,FILENUM,IEN,"?",.TALLY,INOUT)
 | 
|---|
| 604 |         . . IF TMP=-2 SET TMGABORT=1 QUIT
 | 
|---|
| 605 |         . . IF TMP=-1 DO HNDLGAFE(FILENUM,IEN,.TMGABORT) QUIT
 | 
|---|
| 606 |         . . IF (SHOWPROG=0),(($PIECE($H,",",2)-$PIECE(STIME,",",2))>10) SET SHOWPROG=1
 | 
|---|
| 607 |         . . IF SHOWPROG,(TMGCT#10=0) DO
 | 
|---|
| 608 |         . . . WRITE #
 | 
|---|
| 609 |         . . . DO ProgressBar^TMGUSRIF(TMGCT,"Progress: "_TMGCT,0,TMGMAX,70,STIME)
 | 
|---|
| 610 |         . . . IF $DATA(TALLY) WRITE ! ZWR TALLY
 | 
|---|
| 611 |         IF (AUTOMODE=1)&(TMGABORT'=1) GOTO HN1 ;"Loop back and see if more records are now needed.
 | 
|---|
| 612 |         ELSE  DO
 | 
|---|
| 613 |         . IF $DATA(TALLY) WRITE ! ZWR TALLY
 | 
|---|
| 614 |         . DO PressToCont^TMGUSRIF
 | 
|---|
| 615 | HNDN    IF TMGABORT SET RESULT=-1
 | 
|---|
| 616 |         QUIT RESULT
 | 
|---|
| 617 |  ;
 | 
|---|
| 618 |  ;
 | 
|---|
| 619 | HNDLGAFE(FILENUM,RPTR,TMGABORT) ;" Handle GETANDFIXREC error.
 | 
|---|
| 620 |         ;"Input: FILENUM -- The file containing the bad record
 | 
|---|
| 621 |         ;"       RPTR -- the IEN of the bad record, on the server
 | 
|---|
| 622 |         ;"       TMGABORT -- PASS BY REFERENCE.  An OUT parameter to abort.
 | 
|---|
| 623 |         WRITE !,"Error encountered processing FILE ",$$FILENAME^TMGFMUT2(FILENUM)," (#"_FILENUM_"), REC #"_IEN,!
 | 
|---|
| 624 |         NEW % SET %=2
 | 
|---|
| 625 |         WRITE "Mark REC #",IEN," in FILE #",FILENUM," as an invalid server record"
 | 
|---|
| 626 |         DO YN^DICN WRITE !
 | 
|---|
| 627 |         IF %=-1 SET TMGABORT=1
 | 
|---|
| 628 |         IF %=1 DO BADPTR(FILENUM,IEN)
 | 
|---|
| 629 | HGAFEDN QUIT
 | 
|---|
| 630 |  ;
 | 
|---|
| 631 |  ;
 | 
|---|
| 632 | BADPTR(FILENUM,RPTR) ;
 | 
|---|
| 633 |         ;"Purpose: To handle a pointer to a bad record on the server.
 | 
|---|
| 634 |         ;"Input: FILENUM -- The file containing the bad record
 | 
|---|
| 635 |         ;"       RPTR -- the IEN of the bad record, on the server
 | 
|---|
| 636 |         ;"NOTE: globally-scoped variable TMGABORT may be set.
 | 
|---|
| 637 |         ;"Results: None
 | 
|---|
| 638 |         NEW MENU,USRSLCT
 | 
|---|
| 639 | LC2     KILL MENU,USRSLCT
 | 
|---|
| 640 |         SET MENU(0)="Pick Option for Handling INVALID server record"
 | 
|---|
| 641 |         NEW IDX SET IDX=1
 | 
|---|
| 642 |         SET MENU(IDX)="Examine who need this bad record"_$char(9)_"Examine",IDX=IDX+1
 | 
|---|
| 643 |         SET MENU(IDX)="Redirect pointer to a different local record"_$char(9)_"RedirToLocal",IDX=IDX+1
 | 
|---|
| 644 |         SET MENU(IDX)="Change pointer to a NULL pointer"_$char(9)_"MakeNull",IDX=IDX+1
 | 
|---|
| 645 |         SET MENU(IDX)="Backup without making any changes"_$char(9)_"Quit",IDX=IDX+1
 | 
|---|
| 646 |         SET MENU(IDX)="Abort"_$char(9)_"Abort",IDX=IDX+1
 | 
|---|
| 647 |         ;
 | 
|---|
| 648 |         WRITE #
 | 
|---|
| 649 |         SET USRSLCT=$$MENU^TMGUSRIF(.MENU,"^")
 | 
|---|
| 650 |         IF USRSLCT="^" GOTO LC3
 | 
|---|
| 651 |         IF USRSLCT=0 SET USRSLCT=""
 | 
|---|
| 652 |         IF USRSLCT="Examine" DO  GOTO:(TMGABORT=1) LC3 GOTO LC2
 | 
|---|
| 653 |         . NEW ARRAY SET ARRAY(FILENUM,RPTR)=""
 | 
|---|
| 654 |         . IF $$SHOWNEED^TMGSIPH5(JNUM,.ARRAY)=-1 SET TMGABORT=1 QUIT
 | 
|---|
| 655 |         IF USRSLCT="RedirToLocal" DO  GOTO LC3
 | 
|---|
| 656 |         . NEW DIC,X,Y
 | 
|---|
| 657 |         . SET DIC=FILENUM,DIC(0)="MAEQ"
 | 
|---|
| 658 |         . DO ^DIC WRITE !
 | 
|---|
| 659 |         . IF +Y'>0 QUIT
 | 
|---|
| 660 |         . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR)=+Y
 | 
|---|
| 661 |         IF USRSLCT="MakeNull" DO  GOTO LC3
 | 
|---|
| 662 |         . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR)=0
 | 
|---|
| 663 |         IF USRSLCT="Quit" GOTO LC3
 | 
|---|
| 664 |         IF USRSLCT="Abort" SET TMGABORT=1 GOTO LC3
 | 
|---|
| 665 |         GOTO LC2
 | 
|---|
| 666 | LC3     QUIT
 | 
|---|
| 667 |  ;
 | 
|---|
| 668 |  ;
 | 
|---|
| 669 | MAP2LOCAL(JNUM,INOUT) ;
 | 
|---|
| 670 |         ;"Purpose: Ask user which records to map to local records
 | 
|---|
| 671 |         ;"Input: JNUM -- The job number of the background client process
 | 
|---|
| 672 |         ;"       INOUT -- OPTIONAL -- Default is "PTOUT".  Should be "PTIN" or "PTOUT"
 | 
|---|
| 673 |         ;"Results: None
 | 
|---|
| 674 |         ;
 | 
|---|
| 675 |         NEW GETARRAY,FILENUM,IEN,STIME,TMGCT,SHOWPROG,TALLY,QUERY,ERROR,REPLY
 | 
|---|
| 676 |         SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
 | 
|---|
| 677 |         NEW AUTOMODE SET AUTOMODE=0
 | 
|---|
| 678 |         SET AUTOMODE("MAP MODE")=1
 | 
|---|
| 679 |         DO ASKNEEDED(JNUM,.GETARRAY,INOUT,.AUTOMODE)
 | 
|---|
| 680 |         SET FILENUM=0
 | 
|---|
| 681 |         SET STIME=$H
 | 
|---|
| 682 |         SET TMGCT=1,SHOWPROG=0
 | 
|---|
| 683 |         NEW TMGABORT SET TMGABORT=0
 | 
|---|
| 684 |         FOR  SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="")!(TMGABORT=1)  DO
 | 
|---|
| 685 |         . QUIT:($$DDOK^TMGSIPH1(JNUM,FILENUM)'=1)
 | 
|---|
| 686 |         . QUIT:($$PREPXREF^TMGSIPH1(JNUM,FILENUM)'=1)
 | 
|---|
| 687 |         . NEW TMGMAX SET TMGMAX=-1,TMGCT=1,STIME=$H
 | 
|---|
| 688 |         . NEW IEN SET IEN=""
 | 
|---|
| 689 |         . FOR  SET IEN=$ORDER(GETARRAY(FILENUM,IEN),-1) QUIT:(IEN="")!(TMGABORT=1)  DO
 | 
|---|
| 690 |         . . IF TMGMAX=-1 SET TMGMAX=IEN
 | 
|---|
| 691 |         . . SET TMGABORT=$$UserAborted^TMGUSRIF() QUIT:(TMGABORT=1)
 | 
|---|
| 692 |         . . SET TMGCT=TMGCT+1
 | 
|---|
| 693 |         . . IF (SHOWPROG=0),(($PIECE($H,",",2)-$PIECE(STIME,",",2))>15) SET SHOWPROG=1
 | 
|---|
| 694 |         . . IF SHOWPROG,(TMGCT#2=0) DO
 | 
|---|
| 695 |         . . . WRITE #
 | 
|---|
| 696 |         . . . DO ProgressBar^TMGUSRIF(TMGCT,"Progress in "_FILENUM_": "_TMGCT,0,TMGMAX,70,STIME)
 | 
|---|
| 697 |         . . . IF $DATA(TALLY) WRITE ! ZWR TALLY
 | 
|---|
| 698 |         . . NEW NEWIEN SET NEWIEN=0
 | 
|---|
| 699 |         . . IF $$CHCK4SIM(FILENUM,,.NEWIEN,$$GET01FLD(JNUM,FILENUM,IEN))=0 QUIT  ;"Is a prior similar record already is on client?
 | 
|---|
| 700 |         . . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,IEN)=NEWIEN  ;"Add entry to Pointer translation table.
 | 
|---|
| 701 |         . . DO UNNEEDPTR^TMGSIPHU(FILENUM,IEN,NEWIEN,INOUT,.TALLY)
 | 
|---|
| 702 |         . . IF INOUT="PTIN" KILL ^TMG("TMGSIPH","NEEDED RECORDS","PTIN",FILENUM,IEN)
 | 
|---|
| 703 |         . . KILL GETARRAY(FILENUM,IEN)
 | 
|---|
| 704 |         SET RESULT=1
 | 
|---|
| 705 |         IF $DATA(GETARRAY) DO
 | 
|---|
| 706 |         . NEW TMGARRAY,TMGSEL,IEN
 | 
|---|
| 707 |         . WRITE #
 | 
|---|
| 708 |         . WRITE "One or more records could not be automatically matched to a local record.",!
 | 
|---|
| 709 |         . WRITE "Select records to manually looked up.",!
 | 
|---|
| 710 |         . DO PRESSTOCONT^TMGUSRIF QUIT:$GET(TMGPTCABORT)=1
 | 
|---|
| 711 |         . FOR  SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="")  DO
 | 
|---|
| 712 |         . . NEW FNAME SET FNAME=$PIECE($GET(^DIC(FILENUM,0)),"^",1)
 | 
|---|
| 713 |         . . SET IEN=""
 | 
|---|
| 714 |         . . FOR  SET IEN=$ORDER(GETARRAY(FILENUM,IEN),-1) QUIT:(IEN="")  DO
 | 
|---|
| 715 |         . . . NEW DISPSTR SET DISPSTR="Get records from REMOTE file #"_FILENUM_" ("
 | 
|---|
| 716 |         . . . SET DISPSTR="File: "_FNAME_"; Record: "_$$GET01FLD(JNUM,FILENUM,IEN)
 | 
|---|
| 717 |         . . . SET TMGARRAY(DISPSTR)=FILENUM_"^"_IEN
 | 
|---|
| 718 |         . NEW HEADER
 | 
|---|
| 719 |         . SET HEADER="Select Record(s) in file "_FILENUM_" to MAP to local records. Press <ESC><ESC> when Done."
 | 
|---|
| 720 |         . DO Selector^TMGUSRIF("TMGARRAY","TMGSEL",HEADER)
 | 
|---|
| 721 |         . IF $DATA(TMGSEL)=0 QUIT
 | 
|---|
| 722 |         . NEW TMGI SET TMGI=""
 | 
|---|
| 723 |         . FOR  SET TMGI=$ORDER(TMGSEL(TMGI)) QUIT:(TMGI="")!TMGABORT  DO
 | 
|---|
| 724 |         . . NEW ENTRY SET ENTRY=$GET(TMGSEL(TMGI))
 | 
|---|
| 725 |         . . SET FILENUM=+ENTRY QUIT:FILENUM'>0
 | 
|---|
| 726 |         . . SET IEN=$PIECE(ENTRY,"^",2)
 | 
|---|
| 727 |         . . NEW X,Y,DIC
 | 
|---|
| 728 |         . . SET DIC=FILENUM,DIC(0)="MAEQ"
 | 
|---|
| 729 |         . . SET DIC("A")="Lookup a match for ["_$$GET01FLD(JNUM,FILENUM,IEN)_"]: "
 | 
|---|
| 730 |         . . NEW DONE SET DONE=0
 | 
|---|
| 731 |         . . FOR  DO  QUIT:(+Y>0)!(DONE)!TMGABORT
 | 
|---|
| 732 |         . . . NEW %
 | 
|---|
| 733 |         . . . DO ^DIC WRITE !
 | 
|---|
| 734 |         . . . IF +Y>0 DO  QUIT:TMGABORT
 | 
|---|
| 735 |         . . . . SET %=1
 | 
|---|
| 736 |         . . . . WRITE "Use [",$PIECE(Y,"^",2),"]" DO YN^DICN WRITE !
 | 
|---|
| 737 |         . . . . IF %=-1 SET TMGABORT=1 QUIT
 | 
|---|
| 738 |         . . . . IF %=2 SET Y=0 QUIT
 | 
|---|
| 739 |         . . . IF +Y>0 QUIT
 | 
|---|
| 740 |         . . . SET %=1
 | 
|---|
| 741 |         . . . WRITE "Try another lookup" DO YN^DICN WRITE !
 | 
|---|
| 742 |         . . . IF %=-1 SET TMGABORT=1 QUIT
 | 
|---|
| 743 |         . . . IF %=2 SET DONE=1 QUIT
 | 
|---|
| 744 |         . . IF +Y>0 DO
 | 
|---|
| 745 |         . . . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,IEN)=+Y  ;"Add entry to Pointer translation table.
 | 
|---|
| 746 |         . . . DO UNNEEDPTR^TMGSIPHU(FILENUM,IEN,+Y,INOUT,.TALLY)
 | 
|---|
| 747 |         . . . IF INOUT="PTIN" KILL ^TMG("TMGSIPH","NEEDED RECORDS","PTIN",FILENUM,IEN)
 | 
|---|
| 748 |         . . . KILL GETARRAY(FILENUM,IEN)
 | 
|---|
| 749 |         . . . SET TALLY("MANUALLY MATCHED TO LOCAL")=+$GET(TALLY("MANUALLY MATCHED TO LOCAL"))+1
 | 
|---|
| 750 |         IF $DATA(TALLY) WRITE ! ZWR TALLY
 | 
|---|
| 751 |         DO PRESSTOCONT^TMGUSRIF
 | 
|---|
| 752 |         QUIT
 | 
|---|
| 753 |  ;
 | 
|---|
| 754 |  ;
 | 
|---|
| 755 | GETFILE | 
|---|