[896] | 1 | TMGIDE5 ;TMG/kst/GT/M debugger Interrupt handler code ;03/18/09
|
---|
| 2 | ;;1.0;TMG-LIB;**1**;03/23/09
|
---|
| 3 | ;
|
---|
| 4 | ;" TMG IDE Debugger Interrupt handler code
|
---|
| 5 | ;"
|
---|
| 6 | ;" K. Toppenberg
|
---|
| 7 | ;" 3/18/09
|
---|
| 8 | ;" License: GPL Applies
|
---|
| 9 | ;"
|
---|
| 10 | ;"------------------------------------------------------------
|
---|
| 11 | ;"PUBLIC API
|
---|
| 12 | ;"------------------------------------------------------------
|
---|
| 13 | ;"PICKINTR -- show currently running jobs, and allow user to start debugging them
|
---|
| 14 | ;"INTERUPT -- respond to mupip intrpt, assigning control to a remote process
|
---|
| 15 |
|
---|
| 16 | ;"------------------------------------------------------------
|
---|
| 17 | ;"PRIVATE API
|
---|
| 18 | ;"------------------------------------------------------------
|
---|
| 19 | ;"LaunchIntr(JobNum) -- create interrupt message to job, then start listening
|
---|
| 20 | ;" for requests for control from interrupted process
|
---|
| 21 | ;"------------------------------------------------------------
|
---|
| 22 | ;"Dependencies
|
---|
| 23 | ;" TMGIDE4
|
---|
| 24 | ;" TMGKERNL
|
---|
| 25 | ;" %ZISUTL
|
---|
| 26 | ;" TMGUSRIF
|
---|
| 27 |
|
---|
| 28 | PICKINTR
|
---|
| 29 | ;"Purpose: To show currently running jobs, and allow user to start
|
---|
| 30 | ;" debugging them (tapping into process currently running)
|
---|
| 31 | ;"Called from TMGIDE
|
---|
| 32 | ;
|
---|
| 33 | new array
|
---|
| 34 | do MJOBS^TMGKERNL(.array)
|
---|
| 35 | kill array($J) ;"don't show this process
|
---|
| 36 | new Menu,UsrSlct
|
---|
| 37 | new i,j set i="",j=1
|
---|
| 38 | for set i=$order(array(i)) quit:(i="") do
|
---|
| 39 | . set Menu(j)="Job "_$get(array(i))_$char(9)_i
|
---|
| 40 | . set j=j+1
|
---|
| 41 | if $data(Menu)=0 do goto PIDone
|
---|
| 42 | set Menu(0)="Pick Job to Debug"
|
---|
| 43 | ;
|
---|
| 44 | M1 set UsrSlct=$$Menu^TMGUSRIF(.Menu,"^")
|
---|
| 45 | ;
|
---|
| 46 | if UsrSlct="^" goto PIDone
|
---|
| 47 | if UsrSlct=0 set UsrSlct="" goto M1
|
---|
| 48 | if UsrSlct=+UsrSlct do LaunchIntr(UsrSlct)
|
---|
| 49 | goto M1
|
---|
| 50 | ;
|
---|
| 51 | PIDone quit
|
---|
| 52 | ;
|
---|
| 53 | LaunchIntr(JobNum)
|
---|
| 54 | ;"Purpose: To create interrupt message to job, then start listening
|
---|
| 55 | ;" for requests for control from interrupted process
|
---|
| 56 | if +$get(JobNum)'>0 quit
|
---|
| 57 | set tmgDbgRemoteJob=JobNum
|
---|
| 58 | set ^XUTL("XUSYS","TMG COMMAND")="INTRPT"
|
---|
| 59 | zsystem "mupip intrpt "_JobNum
|
---|
| 60 | do Controller^TMGIDE3 ;"launch the controller
|
---|
| 61 | set ^XUTL("XUSYS","TMG COMMAND")=""
|
---|
| 62 | quit
|
---|
| 63 | ;
|
---|
| 64 | INTERUPT
|
---|
| 65 | ;"Purpose: To respond to mupip interrupt for a process, turning control
|
---|
| 66 | ;" over to a remote control process
|
---|
| 67 | ;"NOTE: This will be called by a modified version of JOBEXAM^ZU
|
---|
| 68 | if $get(TMGDEBUG) write !,"Sending INQ to connect to remote controller..."
|
---|
| 69 | new TMGR set TMGR=$$MessageOut^TMGIDE4("INQ "_$J,30)
|
---|
| 70 | if TMGR="" goto Int2
|
---|
| 71 | if $get(TMGDEBUG) do
|
---|
| 72 | . write !
|
---|
| 73 | . write "*****************************************************",!
|
---|
| 74 | . write "* INTERRUPT RECEIVED. Transferring control to *",!
|
---|
| 75 | . write "* a remote controller. That is process ",$$LJ^XLFSTR($piece(TMGR," ",2),5),?52,"*",!
|
---|
| 76 | . write "* *",!
|
---|
| 77 | . write "* Please switch to that process window for control. *",!
|
---|
| 78 | . write "*****************************************************",!
|
---|
| 79 | set TMGR=$$MessageOut^TMGIDE4("WRITE Notice: Controlling interrupted job #"_$J,,0)
|
---|
| 80 | set $ZSTEP="N TMGTrap S TMGTrap=$$STEPTRAP^TMGIDE4($ZPOS) zstep:(TMGTrap=1) into zstep:(TMGTrap=2) over zcontinue"
|
---|
| 81 | set TMGStepMode="into"
|
---|
| 82 | zstep into quit
|
---|
| 83 | Int2 quit
|
---|
| 84 | ;
|
---|