%ZISH ;IHS/PR,SFISC/AC ; HOST COMMANDS - UNIX (MSU); [ 04/02/2003 8:29 AM ]
;;8.0;KERNEL;**1001,1002,1003,1004,1005,1007**;APR 1, 2003
;;8.0;KERNEL;;JUL 10, 1995
;THIS ROUTINE CONTAINS IHS MODIFICATIONS BY IHS/ADC/GTH 11/25/96; IHS/ANMC/LJF 12/11/96; TASSC/DFM; IHS/OIRM/DSD/AEF/12/19/02 ;IHS/OIRM/DSD/AEF/1/21/03
;THIS IS ROUTINE ZISHMSU
;
; For unix operating systems.
;
; Save in MGR uci as %ZISH.
;
; IHS/ADC/GTH 11-25/96 - Intercepts added for IHS calls that are
; not compatible with VA calls. See $$IHS^ZISHMSMU if any options
; need to be added for your site.
;
;IHS/ANMC/LJF 12/11/96
; -- checked for passing of 4th parameter, if not sent use IHS code
; -- redirected PWD call to IHS code
;
;
OPEN(X1,X2,X3,X4) ;
I '$D(X4) Q $$OPEN^ZISHMSMU(X1,X2,X3) ;IHS/ANMC/LJF 12/11/96
;I $$IHS^ZISHMSMU Q $$OPEN^ZISHMSMU(X1,X2,X3) ; IHS/ADC/GTH 10-28-96
;X1=handle name
;X2=directory name /dir/
;X3=file name
;X4=file access mode e.g.: W for write, R for read, A for append.
N %,%1,%I
S %I=$I
F %=51:1:54 O %::0 S %T=$T Q:%T
I %T S IO=%,IO(1,IO)="",POP=0
; E U:$D(IO(1,%I) %I S POP=1 Q ; IHS/ADC/GTH 11-25-96
E U:$D(IO(1,%I)) %I S POP=1 Q ; IHS/ADC/GTH 11-25-96
S %1=$$MODE^%ZISF(X2_X3,X4)
S %=%_":"_%1
U @% S %ZA=$ZA
I %ZA=-1 U %I C IO K IO(1,IO) S POP=1 Q ;Q 0
;S IO=%,IO(1,IO)=""
I $G(X1)]"" D SAVDEV^%ZISUTL(X1)
Q ;Q 1
;
CLOSE(X) ;Close HFS device not opened by %ZIS.
;X=HANDLE NAME
N %
I $G(X)]"" C IO K IO(1,IO) D RMDEV^%ZISUTL(X),HOME^%ZIS Q
C IO K IO(1,IO) D HOME^%ZIS
Q
;
OPENERR ;
Q 0
;
DEL(%ZISHX1,%ZISHX2) ;Del fl(s)
I $$IHS^ZISHMSMU Q $$DEL^ZISHMSMU(%ZISHX1,%ZISHX2) ; IHS/ADC/GTH - 10-28-96
;S Y=$$DEL^ZOSHMSM("/dir/","fl")
; ,.array)
;Changed param 2 to a $NAME string.
N %ZISH,%ZISHLGR
N ZOSHDA,ZOSHF,ZOSHX,ZOSHQ,ZOSHDF,ZOSHC
;
;Dir frmt
;D DF(.ZOSH1) CHANGE TO USE $TR
S %ZISHX1=$TR(%ZISHX1,"\","/")
;
;Get fls to act on
;No '*' allowed
S %ZISHLGR=$$LGR^%ZOSV ;if possible, save off last global reference
S %ZISH="" F S %ZISH=$O(@%ZISHX2@(%ZISH)) Q:'%ZISH I %ZISH["*" S ZOSHQ=1 Q
I $D(ZOSHQ) X "I $G(%ZISHLGR)]"""",$D(@%ZISHLGR)" Q 0
S %ZISH="" F S %ZISH=$O(@%ZISHX2@(%ZISH)) Q:%ZISH="" D
.S ZOSHC="rm "_%ZISHX1_%ZISH
.;S ZOSHC=$ZOS(2,%ZOSHX1_%ZISH)
.D JW
I $G(%ZISHLGR)]"",$D(@%ZISHLGR)
Q 1
;
;
LIST(%ZISHX1,%ZISHX2,%ZISHX3) ;Create a local array holding fl names
I $$IHS^ZISHMSMU Q $$LIST^ZISHMSMU(%ZISHX1,%ZISHX2,.%ZISHX3) ; IHS/ADC/GTH - 10-28-96
;S Y=$$LIST^ZOSHDOS("\dir\","fl",".return array")
; "fl*",
; .array,
;
;Change X2 = $NAME OF CLOSE ROOT
;Change X3 = $NAME OF CLOSE ROOT
;
N %ZISH,%ZISHLGR,%ZISHN,%ZISHX,%ZISXX,%ZISHY
S %ZISHLGR=$$LGR^%ZOSV ;if possible, save off last global reference
S ZOSHC="rm ZOSHAUTO."_$J
D JW
S %ZISHN=0
;Get fls to act on
S %ZISH="" F S %ZISH=$O(@%ZISHX2@(%ZISH)) Q:%ZISH="" D
.S %ZISHX=%ZISHX1_%ZISH
.S ZOSHC="ls -d "_%ZISHX_" >> ZOSHAUTO."_$J
.D JW
D OPEN("","","ZOSHAUTO."_$J,"R")
F ZOSHLN=1:1 U IO R %ZISHXX Q:$$STATUS=-1 D
.S %ZISHY=$P(%ZISHXX,"/",$L(%ZISHXX,"/"))
.I %ZISHY]"" S @%ZISHX3@(%ZISHY)=""
C IO K IO(1,IO)
;Remove ZOSHAUTO.$J
S ZOSHC="rm ZOSHAUTO."_$J
D JW
I $G(%ZISHLGR)]"",$D(@%ZISHLGR)
Q $O(@%ZISHX3@(""))]""
;
MV(X1,X2,X3,X4) ;Rename a fl
I $$IHS^ZISHMSMU Q $$MV^ZISHMSMU(X1,X2,X3,X4) ; IHS/ADC/GTH - 10-28-96
;S Y=$$MV^ZOSHMSM("/dir/","fl","/dir/","fl")
;
N %,%1
N ZOSHC,ZOSHX
;
;Dir frmt
D DF(.X1)
D DF(.X3)
;
;Pbv or qit
I $O(X2(0))!($O(X4(0))) S ZOSHX=3 X "I $G(%ZISHLGR)]"""",$D(@%ZISHLGR)" Q ZOSHX
;
;Check for 'from' and 'to' directory
;
;S ZOSHC="mv "_X1_X2_" "_X3_X4
S ZOSHC="cp "_X1_X2_" "_X3_X4_" ; rm "_X1_X2
D JW
I $G(%ZISHLGR)]"",$D(@%ZISHLGR)
Q 1 ;ZOSHX
;
PWD(X) ;Print working directory
Q $$PWD^ZISHMSMU(.X) ;IHS/ANMC/LJF 12/11/96
I $$IHS^ZISHMSMU Q $$PWD^ZISHMSMU(.X) ; IHS/ADC/GTH - 10-28-96
;
N %,%IS,POP,X,Y,ZOSHC,ZOSHDA,ZOSHDF,ZOSHF,ZOSHIOP,ZOSHLN,ZOSHQ,ZOSHX,ZOSHSYFI,ZOSHIOP1
;
;Init ZOSHAUTO.$J
S ZOSHC="rm ZOSHAUTO."_$J
D JW
;
S ZOSHC="pwd > ZOSHAUTO."_$J
D JW
;
;Open ZOSHAUTO.$J to read.
;Create the 'Return Array' to pass back to user
D OPEN^%ZISH("","ZOSHAUTO."_$J,"R") I POP Q ""
F %1=1:1 U IO R % Q:$$STATUS=-1 S Y=%
D CLOSE^%ZISH("")
;
;Remove ZOSHAUTO.$J
S ZOSHC="rm ZOSHAUTO."_$J
D JW
;
S Y=Y_$S($E(Y,$L(Y))'="/":"/",1:"")
Q Y
;
JW ;msm extrinsic
S ZOSHX=$$JOBWAIT^%HOSTCMD(ZOSHC)
Q
DF(X) ;Dir frmt
Q:X=""
S X=$TR(X,"\","/")
I $E(X,$L(X))'="/" S X=X_"/"
Q
;----- BEGIN IHS MODIFICATION - XU*8.0*1007
;ORIGINAL MODIFICATION BY IHS/OIRM/DSD/AEF 12/19/02
;ADDED SUBROUTINE DEFDIR TO PREVENT <LINER>CHKNM+3^%ZISF ERROR
;AT THE 'Enter a Host File:' PROMPT WHEN A PATH IS NOT SPECIFIED
DEFDIR(DF) ;ef. Default Dir and frmt
Q:DF="." "" ;Special way to get current dir.
S:DF="" DF=$G(^XTV(8989.3,1,"DEV"))
I $E(DF,$L(DF))'="/" S DF=DF_"/"
Q DF
;----- END IHS MODIFICATION
STATUS() ;Eof flag
Q $ZC
QL(X) ;Qlfrs
Q:X=""
S:$E(X)'="-" X="-"_X
Q
FL(X) ;Fl len
N ZOSHP1,ZOSHP2
S ZOSHP1=$P(X,"."),ZOSHP2=$P(X,".",2)
;----- BEGIN IHS MODIFICATION - XU*8*1007
;THESE TWO LINES ARE COMMENTED OUT, FILE LENGTH IS NO LONGER AN ISSUE.
;ORIGINAL MODIFICATION BY TASSC/MFD
;I $L(ZOSHP1)>14 S X=4 Q
;I $L(ZOSHP2)>8 S X=4 Q
;----- END IHS MODIFICATION
Q
;
FTG(%ZISHX1,%ZISHX2,%ZISHX3,%ZISHX4,%ZISHX5) ;Unload contents of host file into global
;p1=hostf file directory
;p2=host file name
;p3= NOW $NAME REFERENCE INCLUDING STARTING SUBSCRIPT
;p4=INCREMENT SUBSCRIPT
;p5=Overflow subscript, defaults to "OVF"
N %ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHLGR,%ZISHS,ZISHIO,%ZISHOVL,%ZISHX,ZISHY
S %ZISHLGR=$$LGR^%ZOSV ;if possible, save off last global reference
S %ZISHOVL=$G(%ZISHOVL,"OVF")
S %ZISHI=$$QS^XLFUTL(%ZISHX3,%ZISHX4)
S %ZISHL=$$QL^XLFUTL(%ZISHX3)
I %ZISHX4=(%ZISHL+1),%ZISHI="" S %ZISHI=1
S %ZISH1=$NA(@%ZISHX3,%ZISHX4-1)
F %ZISH=%ZISHX4+1:1:%ZISHL S %ZISHS(%ZISH)=$$QS^XLFUTL(%ZISHX3,%ZISH)
D OPEN^%ZISH("",%ZISHX1,%ZISHX2,"R")
S %ZISHX="",%ZPZB="",%ZPL="",%OVLCNT=0,%CONT=0,%ZISHNREC=1
U IO F D READNXT(.%XX) Q:$$STATUS&'$L(%XX) D ;U 0 W !,"%ZB="_%ZB,!,"%ZPZB+%ZL="_(%ZPZB+%ZL),!,"%ZPZB="_%ZPZB_" %ZL="_%ZL U IO S %ZISHNREC=$S(%ZB'=(%ZPZB+%ZL):1,1:0) S:%ZISHNREC %ZISHI=%ZISHI+1 S %ZPZB=$ZB,%ZPL=%ZL
.I %ZISHNREC D
..;U 0 W !,"NEWRECORD" U IO ;XU*8.0*1007;IHS/OIRM/DSD/AEF - 1/21/03 COMMENTED OUT TO PREVENT <NOPEN> ERROR IN RPC BROKER
..S %ZISHX=%XX
..S %ZISH2=$NA(@%ZISH1@(%ZISHI))
..S %ZISH=%ZISH+1
..F %ZISH=%ZISHX4+1:1:%ZISHL S %ZISH2=$NA(@%ZISH2@(%ZISHS(%ZISH)))
..S @%ZISH2=$E(%ZISHX,1,255)
..S %OVLCNT=0,%CONT=0
..Q:%ZL'>255
..D LOOP
.E D
..;U 0 W !,"CONTINUATION RECORD" U IO ;XU*8.0*1007;IHS/OIRM/DSD/AEF - 1/21/03 COMMENTED OUT TO PREVENT <NOPEN> ERROR IN RPC BROKER
..S %ZL2=$L(%ZISHX),%ZISHX=%ZISHX_$E(%XX,1,255-%ZL2)
..D SETOVL
..S %XX=$E(%XX,256-%ZL2,$L(%XX))
..S %ZISHX=%XX
..D:%ZISHX]"" SETOVL
..I $L(%ZISHX)>255 D LOOP
.;U 0 W !,"%ZB="_%ZB,!,"%ZPZB+%ZL="_(%ZPZB+%ZL),!,"%ZPZB="_%ZPZB_" %ZL="_%ZL U IO ;XU*8.0*1007;IHS/OIRM/DSD/AEF - 1/21/03 COMMENTED OUT TO PREVENT <NOPEN> ERROR IN RPC BROKER
.S %ZISHNREC=$S(%ZB'=(%ZPZB+%ZL):1,1:0)
.I %ZISHNREC D
..S %ZISHI=%ZISHI+1 ;B:%ZISHI=2
.S %ZPZB=$ZB,%ZPL=%ZL
;I %ZISHX]"",%ZISHNREC D SETOVL
EOF2 C IO K IO(1,IO)
I $G(%ZISHLGR)]"",$D(@%ZISHLGR) ;restore last global reference.
Q 1
LOOP S %CONT=1 F Q:$L(%ZISHX)'>255 D
.S %ZISHX=$E(%ZISHX,256,$L(%ZISHX))
.D SETOVL:$L(%ZISHX)>255
Q
NEXTLUP F Q:%ZA=%ZL D
.D READNXT(.%XX) Q:$$STATUS
.S %ZL2=$L(%ZISHX),%ZISHX=%ZISHX_$E(%XX,1,255-%L2)
.D SETOVL
.S %XX=$E(%XX,256-%L2,$L(%XX))
.I $L(%XX)>255 S %ZISHX=%XX D LOOP
.E S %ZISHX=%XX D SETOVL
Q
READNXT(%XX) ;
U IO R %XX Q:$$STATUS S %ZA=$ZA,%ZB=$ZB,%ZL=$L(%XX)
Q
SETOVL ;
S %OVLCNT=%OVLCNT+1
S @$NA(@%ZISH1@(%ZISHI))@(%ZISHOVL,%OVLCNT)=$E(%ZISHX,1,255)
Q
Q 1
GTF(%ZISHX1,%ZISHX2,%ZISHX3,%ZISHX4) ;Load contents of global to host file.
;p1=$NAME of global reference
;p2=incrementing subscript
;p3=host file directory
;p4=host file name
;
N %ZISHLGR,%ZISHY
S %ZISHLGR=$$LGR^%ZOSV ;if possible, save off last global reference
S %ZISHY=$$MGTF(%ZISHX1,%ZISHX2,%ZISHX3,%ZISHX4,"W")
Q %ZISHY
GATF(%ZISHX1,%ZISHX2,%ZISHX3,%ZISHX4) ;Load contents of global to host file.
;p1=$NAME of global reference
;p2=incrementing subscript
;p3=host file directory
;p4=host file name
N %ZISHLGR,%ZISHY
S %ZISHLGR=$$LGR^%ZOSV ;if possible, save off last global reference
S %ZISY=$$MGTF(%ZISHX1,%ZISHX2,%ZISHX3,%ZISHX4,"A")
I $G(%ZISHLGR)]"",$D(@%ZISHLGR)
Q %ZISHY
;
MGTF(%ZISHX1,%ZISHX2,%ZISHX3,%ZISHX4,%ZISHX5) ;Load contents of global to host file.
;p1=$NAME of global reference
;p2=incrementing subscript
;p3=host file directory
;p4=host file name
;p5=access mode
N %ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHS,%ZISHIO,%ZISHX,%ZISHY
S %I=$$QS^XLFUTL(%ZISHX1,%ZISHX2)
S %L=$$QL^XLFUTL(%ZISHX1)
S %1=$NA(@%ZISHX1,%ZISHX2-1)
F %ZISH=%ZISHX2+1:1:%ZISHL S %ZISHS(%ZISH)=$$QS^XLFUTL(%ZISHX1,%ZISH)
D OPEN^%ZISH("",%ZISHX3,%ZISHX4,%ZISHX5)
S %ZISHX="EOF3^%ZISH"
F D Q:'($D(@%ZISH2)#2) S %ZISHX=@%ZISH2,%ZISHI=%ZISHI+1 U IO W %ZISHX,!
.S %ZISH2=$NA(@%ZISH1@(%ZISHI))
.F %ZISH=%ZISHX2+1:1:%ZISHL S %ZISH2=$NA(@%ZISH2@(%ZISHS(%ZISH)))
;C %ZISHIO
D CLOSE^%ZISH("")
Q 1
Q
;
FROM(ZISH1,ZISH2,ZISH3,ZISH4,ZISH5) ; ----- Get unix file(s) from.
;
Q $$FROM^ZISHMSMU(ZISH1,ZISH2,ZISH3,ZISH4,ZISH5)
;
;
SEND(ZISH1,ZISH2,ZISH3) ;Send unix fl
;
Q $$SEND^ZISHMSMU(ZISH1,ZISH2)
;----- BEGIN IHS MODIFICATION - XU*8.0*1007
;Subroutine SENDTO1 is added to use sendto1 script to send file
SENDTO1(ZISH1,ZISH2) ;Use sendto1 script to send unix file
;
Q $$SENDTO1^ZISHMSMU(ZISH1,ZISH2)
;----- END IHS MODIFICATION