| 1 | RTFIX ;PKE/ISC-ALBANY-Cleanup 190.3 Routine; ; 4/7/93  11:45 AM ; [ 08/01/93  9:42 PM ] | 
|---|
| 2 | ;;v 2.0;Record Tracking;**12**;10/22/91 | 
|---|
| 3 | ;check movement file, #190.3 for pointers, x-ref | 
|---|
| 4 | ; | 
|---|
| 5 | EN ;entry point | 
|---|
| 6 | L +^TMP("RTFIX","START"):300 E  W !!?3,"Another RTFIX is running" Q | 
|---|
| 7 | ; | 
|---|
| 8 | ;if RTDB=0 just checks for bad nodes(debug) | 
|---|
| 9 | I '$D(RTDB) S RTDB=1 | 
|---|
| 10 | ; | 
|---|
| 11 | ;if debug was on, start over | 
|---|
| 12 | I RTDB,$D(^TMP("RTFIX","DEBUG")) K ^TMP("RTFIX") | 
|---|
| 13 | ;if debug is on, remember | 
|---|
| 14 | I RTDB=0 S ^TMP("RTFIX","DEBUG")="" | 
|---|
| 15 | ; | 
|---|
| 16 | S RT=$S('$D(^TMP("RTFIX","START")):0,1:+^("START")) I RT S RT=RT-1 | 
|---|
| 17 | D DT^DICRW,NOW^%DTC S RTIME=%,RTIM=X | 
|---|
| 18 | ;purge-node if using xtmp | 
|---|
| 19 | S X1=X,X2=5 D C^%DTC | 
|---|
| 20 | S $P(^TMP("RTFIX",0),"^",1,2)=X_"^"_RTIM | 
|---|
| 21 | S ^TMP("RTFIX","START")=RT_"^"_RTIME | 
|---|
| 22 | K ^TMP("RTFIX","STOP") | 
|---|
| 23 | ; | 
|---|
| 24 | CONT F RTCT=1:1 S RT=$O(^RTV(190.3,"B",RT)) Q:'RT  DO | 
|---|
| 25 | .I RTCT#1000=0 DO | 
|---|
| 26 | ..S $P(^TMP("RTFIX","START"),"^",1)=RT | 
|---|
| 27 | ..I '$D(^TMP("RTFIX","RATE")) S (RATE,^("RATE"))=$P($H,",",2) | 
|---|
| 28 | ..E  S RATE=$P(^("RATE"),"^"),RATE=(+$P($H,",",2))-RATE ;naked ref to tmp(rtfix,rate) | 
|---|
| 29 | ..S RATE=$J((RATE/60),5,1) | 
|---|
| 30 | ..S ^("RATE")=$P($H,",",2)_"^"_RATE_"^"_RT ;naked ref to tmp(rtfix,rate) | 
|---|
| 31 | ..I $D(^TMP("RTFIX","STOP")) S RT="Zend" Q  ;stop if stopjob^rtfix | 
|---|
| 32 | ..I $$S^%ZTLOAD S RT="Zend",^TMP("RTFIX","STOP")="",ZTSTOP=1 Q | 
|---|
| 33 | ..I '$D(ZTQUEUED) W "." | 
|---|
| 34 | .; | 
|---|
| 35 | .S RTH=0 | 
|---|
| 36 | .F  S RTH=$O(^RTV(190.3,"B",RT,RTH)) Q:'RTH  DO | 
|---|
| 37 | ..I '$D(^RTV(190.3,RTH,0)) DO  Q | 
|---|
| 38 | ...L +^RTV(190.3,RTH) | 
|---|
| 39 | ...K:RTDB ^RTV(190.3,"B",RT,RTH) L -^RTV(190.3,RTH) | 
|---|
| 40 | ...S ^TMP("RTFIX","XREF",RTH)=RT | 
|---|
| 41 | ...Q | 
|---|
| 42 | ..I +^RTV(190.3,RTH,0)'=RT DO  Q | 
|---|
| 43 | ...S RTM0=^(0) ;naked ref to rtv(190.3,rth,0) | 
|---|
| 44 | ...I 'RTM0,$D(^RT(RT,"CL")),+$P(^("CL"),"^",2)=RTH Q | 
|---|
| 45 | ...L +^RTV(190.3,RTH) | 
|---|
| 46 | ...K:RTDB ^RTV(190.3,"B",RT,RTH) L -^RTV(190.3,RTH) | 
|---|
| 47 | ...S DA=RTH,DIK="^RTV(190.3," | 
|---|
| 48 | ...I '$D(^RT(+RTM0,0)) D:RTDB ^DIK S ^TMP("RTFIX","XMOVE",RTH)=RT Q | 
|---|
| 49 | ...I RTM0 D:RTDB IX^DIK S ^TMP("RTFIX","XINDEX",RTH)=RT | 
|---|
| 50 | ...Q | 
|---|
| 51 | ..Q | 
|---|
| 52 | ; | 
|---|
| 53 | L -^TMP("RTFIX","START") | 
|---|
| 54 | D NOW^%DTC I $D(^TMP("RTFIX","STOP")) S ^("STOP")=%_"^"_RTCT N ZTSTOP D KILL Q | 
|---|
| 55 | K:RTDB ^TMP("RTFIX") | 
|---|
| 56 | KILL D KILL^XUSCLEAN Q | 
|---|
| 57 | ; | 
|---|
| 58 | QUE ;entry to queue with taskman from prog mode | 
|---|
| 59 | S ZTIO="",ZTRTN="EN^RTFIX",ZTDESC="RT Check/Fix file 190.3" | 
|---|
| 60 | D ^%ZTLOAD Q | 
|---|
| 61 | ; | 
|---|
| 62 | JOB S ZTQUEUED="" G EN^RTFIX Q | 
|---|
| 63 | ; | 
|---|
| 64 | DEBUG S RTDB=0 G EN^RTFIX Q | 
|---|
| 65 | ; | 
|---|
| 66 | STOPJOB ;entry to stop job after about 1000 records if jobbed or tasked | 
|---|
| 67 | S ^TMP("RTFIX","STOP")="" | 
|---|
| 68 | W !?5,"The RTFIX routine will be stopping soon . .  ." Q | 
|---|
| 69 | ; | 
|---|
| 70 | RATE ;entry to see how its going | 
|---|
| 71 | Q:'$D(^TMP("RTFIX","RATE")) | 
|---|
| 72 | L +^TMP("RTFIX","RATE") | 
|---|
| 73 | W !?3,"Minutes/1K records = ",$P(^TMP("RTFIX","RATE"),"^",2) | 
|---|
| 74 | W !?3,"  Current Record # =   ",$P(^TMP("RTFIX","RATE"),"^",3) | 
|---|
| 75 | W !?3,"     Last Record # =   ",$P(^RT(0),"^",3),! | 
|---|
| 76 | L -^TMP("RTFIX","RATE") Q | 
|---|
| 77 | ; | 
|---|
| 78 | DOC ;The routine can run from programmer mode by | 
|---|
| 79 | ;D ^RTFIX | 
|---|
| 80 | ; | 
|---|
| 81 | ;The routine can be queued through TaskMan by | 
|---|
| 82 | ;D QUE^RTFIX | 
|---|
| 83 | ; | 
|---|
| 84 | ;The routine can be run in DEBUG mode by | 
|---|
| 85 | ;D DEBUG^RTFIX | 
|---|
| 86 | ; | 
|---|
| 87 | ;The routine can be stopped at any time by | 
|---|
| 88 | ;D STOPJOB^RTFIX or TBOX option for a taskman job | 
|---|
| 89 | ; | 
|---|
| 90 | ;The routine can be restarted where it left off as | 
|---|
| 91 | ;long as the global ^TMP("RTFIX" still exists. | 
|---|
| 92 | ; | 
|---|
| 93 | ;The status of the job can be monitored by | 
|---|
| 94 | ;D RATE^RTFIX | 
|---|
| 95 | ; | 
|---|
| 96 | ;XQ XUTL $J NODES option should be suspended on cpu when this | 
|---|
| 97 | ;routine is running to prevent ^TMP from being killed | 
|---|
| 98 | ; | 
|---|
| 99 | ;^TMP is only used to store start/stop and bad movements found | 
|---|
| 100 | ; | 
|---|
| 101 | ; Can be changed to use standard use of ^xtmp global by changing | 
|---|
| 102 | ; every ^tmp to ^xtmp.  Will set nodes correctly to avoid xtmp | 
|---|
| 103 | ; purge. | 
|---|
| 104 | ; | 
|---|
| 105 | ;^TMP(nodes)          description                     action | 
|---|
| 106 | ; | 
|---|
| 107 | ;^("XREF",RTMOV)=RT   means a "B" entry with      xref deleted | 
|---|
| 108 | ;                     no zero node | 
|---|
| 109 | ;^("XMOVE"...         means  no record            movement deleted | 
|---|
| 110 | ;^("XINDEX"...        means  different record     xref corrected | 
|---|