RMPVDRV ; OIT/JDA - SCAMP runtime support; Nov 17, 2024@23:35:37
;;1.0;PROSTHETICS VISION 4 SIGHT II;**2**;Jan 31, 2025;Build 38
;
Q
RUN(CALL,DRVNAME) ;primary entry point
S $EC=""
S ^TMP($J,"RMPV","DRVNAME")=DRVNAME
N TMPFILE,OLDIO
S OLDIO=$IO
I $G(^TMP($J,"RMPV","SILENT"),1) S IOP="NULL",%ZIS=0 D ^%ZIS I '$G(POP,1) U IO
D INIT^@DRVNAME
D ; scope variables
. ;N (DUZ,CALL)
.N %request,%response,%session,DFN,DRVNAME,FILE,OLDIO,REQUEST,SUSP,U,XX,pX,responses,tRedirected ; Protect %response
.N response,vArray,iter,request,pResponse,element,I,RMPR60,ARG
.;N INC,REQ,RESP,ARY ;testing only
.S IOF="""""",IOM=80,U="^"
.D @CALL
U OLDIO
Q
HANDLE(FROMEREF) ; handle special calls like FileMan, etc.
N RMPVREF S RMPVREF=$NA(^(0)) ; remember naked reference
N CALLBACK S CALLBACK=$G(^TMP($J,"RMPV","CB",FROMEREF))
I CALLBACK'="" D @CALLBACK
I $D(@RMPVREF) ; bring back old naked reference
Q
WRITECTL(FROMEREF,ARG) ; Write control characters, like 'W !' or 'W $2'
D CALLIO("WRITECTL")
Q
WRITEIND(FROMEREF,ARG) ; Write indirect arg, like 'W @VAR'
D CALLIO("WRITEIND")
Q
WRITE(FROMEREF,ARG) ; Write regular, like 'W "prompt"' or 'W VAR'
D CALLIO("WRITE")
Q
READCTL(FROMEREF,ARG) ; Read control characters, like 'R !'
D CALLIO("READCTL")
Q
READIND(FROMEREF,ARG) ; Write indirect arg, like 'R @VAR'
D CALLIO("READIND")
Q
READPMT(FROMEREF,ARG) ; Read statements, like 'R "prompt:"'
D CALLIO("READPMT")
Q
READ(FROMEREF,ARG) ; Read statements, other
S ARG="" ; TODO - handle unhandled reads
D CALLIO("READ")
Q
CALLIO(WHAT) ; Input/output handler
N RMPVREF S RMPVREF=$NA(^(0)) ; remember naked reference
N CALLBACK S CALLBACK="%"_WHAT_"^"_^TMP($J,"RMPV","DRVNAME")
D:$L($T(@CALLBACK)) @(CALLBACK_"(FROMEREF,.ARG)")
I $D(@RMPVREF) ; bring back old naked reference
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRMPVDRV 1850 printed May 25, 2026@12:51:02 Page 2
RMPVDRV ; OIT/JDA - SCAMP runtime support; Nov 17, 2024@23:35:37
+1 ;;1.0;PROSTHETICS VISION 4 SIGHT II;**2**;Jan 31, 2025;Build 38
+2 ;
+3 QUIT
RUN(CALL,DRVNAME) ;primary entry point
+1 SET $ECODE=""
+2 SET ^TMP($JOB,"RMPV","DRVNAME")=DRVNAME
+3 NEW TMPFILE,OLDIO
+4 SET OLDIO=$IO
+5 IF $GET(^TMP($JOB,"RMPV","SILENT"),1)
SET IOP="NULL"
SET %ZIS=0
DO ^%ZIS
IF '$GET(POP,1)
USE IO
+6 DO INIT^@DRVNAME
+7 ; scope variables
Begin DoDot:1
+8 ;N (DUZ,CALL)
+9 ; Protect %response
NEW %request,%response,%session,DFN,DRVNAME,FILE,OLDIO,REQUEST,SUSP,U,XX,pX,responses,tRedirected
+10 NEW response,vArray,iter,request,pResponse,element,I,RMPR60,ARG
+11 ;N INC,REQ,RESP,ARY ;testing only
+12 SET IOF=""""""
SET IOM=80
SET U="^"
+13 DO @CALL
End DoDot:1
+14 USE OLDIO
+15 QUIT
HANDLE(FROMEREF) ; handle special calls like FileMan, etc.
+1 ; remember naked reference
NEW RMPVREF
SET RMPVREF=$NAME(^(0))
+2 NEW CALLBACK
SET CALLBACK=$GET(^TMP($JOB,"RMPV","CB",FROMEREF))
+3 IF CALLBACK'=""
DO @CALLBACK
+4 ; bring back old naked reference
IF $DATA(@RMPVREF)
+5 QUIT
WRITECTL(FROMEREF,ARG) ; Write control characters, like 'W !' or 'W $2'
+1 DO CALLIO("WRITECTL")
+2 QUIT
WRITEIND(FROMEREF,ARG) ; Write indirect arg, like 'W @VAR'
+1 DO CALLIO("WRITEIND")
+2 QUIT
WRITE(FROMEREF,ARG) ; Write regular, like 'W "prompt"' or 'W VAR'
+1 DO CALLIO("WRITE")
+2 QUIT
READCTL(FROMEREF,ARG) ; Read control characters, like 'R !'
+1 DO CALLIO("READCTL")
+2 QUIT
READIND(FROMEREF,ARG) ; Write indirect arg, like 'R @VAR'
+1 DO CALLIO("READIND")
+2 QUIT
READPMT(FROMEREF,ARG) ; Read statements, like 'R "prompt:"'
+1 DO CALLIO("READPMT")
+2 QUIT
READ(FROMEREF,ARG) ; Read statements, other
+1 ; TODO - handle unhandled reads
SET ARG=""
+2 DO CALLIO("READ")
+3 QUIT
CALLIO(WHAT) ; Input/output handler
+1 ; remember naked reference
NEW RMPVREF
SET RMPVREF=$NAME(^(0))
+2 NEW CALLBACK
SET CALLBACK="%"_WHAT_"^"_^TMP($JOB,"RMPV","DRVNAME")
+3 if $LENGTH($TEXT(@CALLBACK))
DO @(CALLBACK_"(FROMEREF,.ARG)")
+4 ; bring back old naked reference
IF $DATA(@RMPVREF)
+5 QUIT