Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ZISHONT

ZISHONT.m

Go to the documentation of this file.
  1. %ZISH ;IHS/PR,SFISC/AC - Host File Control for Cache for VMS/NT/UNIX ;05/22/12 11:01
  1. ;;8.0;KERNEL;**34,65,84,104,191,306,385,440,518,524,546,599,1017,1018**;JUL 10, 1995;Build 8
  1. ;THIS ROUTINE CONTAINS IHS MODIFICATIONS BY TASSC/MFD
  1. ;
  1. ;TASSC/MFD Many mods to enable functioning on Cache, Windows or Unix.
  1. ; This routine no longer calls any other routines.
  1. ;
  1. ; ZEXCEPT: IOM,IOSL,IOT,POP
  1. OPEN(X1,X2,X3,X4,X5,X6) ;SR. Open Host File
  1. I '$D(X4) Q $$OPENI(X1,X2,X3) ;TASSC/MFD added call
  1. ;X1=handle name
  1. ;X2=directory name \dir\
  1. ;X3=file name
  1. ;X4=file access mode e.g.: W for write, R for read, A for append.
  1. ;X5=Max record size for a new file, X6=Subtype
  1. N %,%1,%2,%I,%ZOS,%T,%ZA,%ZISHIO,$ET
  1. S $ET="D OPNERR^%ZISH"
  1. S U="^",%I=$I,%T=0,POP=0,X2=$$DEFDIR($G(X2)),%ZOS=$$OS^%ZOSV M %ZISHIO=IO
  1. I %ZOS'="VMS" S %1=$S(X4["A":"AW",X4["W":"WN",1:"R")_$S(X4["B":"U",1:"S") ;NT & Unix
  1. I %ZOS="VMS" S %1=$S(X4["A":"AW",X4["W":"WN",1:"RH")_$S(X4["B":"U",1:"S")
  1. ;The next line eliminates the <ENDOFFILE> error for sequential files for the current process.
  1. S %ZA=$$ENDOFILE^%ZISUTL ;p599 Work like DSM
  1. S %=X2_X3 O %:(%1):2 I '$T S POP=1 Q
  1. S IO=%,IO(1,IO)="",IOT="HFS",IOM=80,IOSL=60,POP=0 D SUBTYPE^%ZIS3($G(X6,"P-OTHER"))
  1. I $G(X1)]"" D SAVDEV^%ZISUTL(X1)
  1. Q
  1. ;
  1. OPNERR ;Handle open error
  1. ; ZEXCEPT: POP
  1. S POP=1,$ECODE=""
  1. ;I $L($G(%I)) U %I
  1. Q
  1. ;
  1. CLOSE(X) ;SR. Close HFS device not opened by %ZIS.
  1. ;X=HANDLE NAME
  1. ;IO=Device
  1. N %
  1. I $L($G(IO)) C IO K IO(1,IO)
  1. I $L($G(X)) D RMDEV^%ZISUTL(X)
  1. ;Only reset home if one setup.
  1. I $D(IO("HOME"))!$D(^XUTL("XQ",$J,"IOS")) D HOME^%ZIS
  1. Q
  1. ;
  1. OPENERR ;
  1. Q 0
  1. ;
  1. ;----- BEGIN IHS MODIFICATION - XU*8.0*1018
  1. DEL(%ZX1,%ZX2) ;ef,SR. Del fl(s)
  1. ;S Y=$$DEL^ZOSHMSM("\dir\",$NA(array))
  1. ;TASSC/MFD modified to accommodate IHS calls without $NA array in %ZX2
  1. ;in addition the VA quits 0 if failure whereas IHS quits 0 success
  1. N %,%ZISH,ZOSHDA,ZOSHF,ZOSHX,ZOSHQ,ZOSHDF,ZOSHC,%ZISHDC,%ZISHT,X
  1. S %ZX1=$$DEFDIR($G(%ZX1))
  1. ;Get fls to act on
  1. ;No '*' allowed
  1. I %ZX2["*" Q 1 ;TASSC/MFD
  1. S %ZISHDC=$S($ZV["UNIX":"rm ",1:"del ") ;TASSC/MFD
  1. S %ZISHT=$ZT,X="*DELI",@^%ZOSF("TRAP") ;TASSC/MFD, 9/9/02 added * to not unwind stack
  1. I $D(@%ZX2)<10 G DELI ;TASSC/MFD
  1. S %ZISH="" F S %ZISH=$O(@%ZX2@(%ZISH)) Q:'%ZISH I %ZISH["*" S ZOSHQ=1 Q
  1. I $D(ZOSHQ) S X=%ZISHT,@^%ZOSF("TRAP") Q 0
  1. S %ZISH="" F S %ZISH=$O(@%ZX2@(%ZISH)) Q:%ZISH="" D
  1. . S %=$S(%ZISH[%ZX1:%ZISH,1:%ZX1_%ZISH)
  1. . S %=$ZF(-1,%ZISHDC_%) ;TASSC/MFD changed del to a variable to allow Unix or Windows
  1. S X=%ZISHT,@^%ZOSF("TRAP") Q 1
  1. ;-------------------------------
  1. ; Commented out below VA modification, and re-introduced IHS mods above.
  1. ;-------------------------------
  1. ;
  1. ;DEL(%ZX1,%ZX2) ;ef,SR. Del files, return 1 if deleted all requested.
  1. ;;S Y=$$DEL^%ZISH("dir path",$NA(array))
  1. ;; will invoke an OS command to delete file(s)
  1. ;; UNIX: rm -f filespec[ ...]
  1. ;; VMS: del filespec[,...]
  1. ;N %ZARG,%ZXDEL,%ZOS,%ZDELIM,%ZCOMND,%ZLIST
  1. ;S %ZARG="",%ZXDEL=1
  1. ;S %ZX1=$$DEFDIR($G(%ZX1))
  1. ;S %ZOS=$$OS^%ZOSV
  1. ;S %ZDELIM=$S(%ZOS="UNIX":" ",1:",")
  1. ;S %ZCOMND=$S(%ZOS="UNIX":"rm -f ",1:"del ")
  1. ;D
  1. ;. N $ETRAP,$ESTACK S $ETRAP="D DELERR^%ZISH"
  1. ;. N %,%ZI,%ZISH,%ZX,%ZFOUND S %ZISH=""
  1. ;. F %ZI=1:1 S %ZISH=$O(@%ZX2@(%ZISH)) Q:%ZISH="" D
  1. ;. . N $ETRAP,$ESTACK S $ETRAP="D DELERR^%ZISH"
  1. ;. . I %ZISH["*" S %ZXDEL=0 Q ; Wild card not allowed.
  1. ;. . S %ZX=$S(%ZISH[%ZX1:%ZISH,1:%ZX1_%ZISH) ; prepend directory path
  1. ;. . I %ZOS="VMS",%ZX'[";" S %ZX=%ZX_";*"
  1. ;. . S %ZFOUND=$ZSEARCH(%ZX)]"" ; File exists
  1. ;. . S:%ZFOUND %ZARG=$S(%ZARG="":%ZX,1:%ZARG_%ZDELIM_%ZX) ; join files
  1. ;. . I $L(%ZARG)>2000 S %=$ZF(-1,%ZCOMND_%ZARG),%ZARG="" H 1 ; delete files at a time
  1. ;. ;
  1. ;. I $L(%ZARG) S %=$ZF(-1,%ZCOMND_%ZARG) ; delete remaining files
  1. ;;
  1. ;I %ZXDEL S %ZXDEL='$$LIST(%ZX1,%ZX2,"%ZLIST")
  1. ;Q %ZXDEL
  1. ;;
  1. ;DELERR ;Trap any $ETRAP error, unwind and return.
  1. ;; ZEXCEPT: %ZARG,%ZXDEL
  1. ;S $ETRAP="D UNWIND^%ZTER"
  1. ;S %ZXDEL=0,%ZARG=""
  1. ;D UNWIND^%ZTER
  1. ;Q
  1. ;;
  1. ;DEL1(%ZX3) ;ef,SR. Delete one file
  1. ;N %ZI1,%ZI2
  1. ;D SPLIT(%ZX3,.%ZI1,.%ZI2) S %ZI2(%ZI2)=""
  1. ;Q $$DEL(%ZI1,$NA(%ZI2))
  1. ;;
  1. ;SPLIT(%I,%O1,%O2) ;Split to path,file
  1. ;N %ZOS,%D,D S %ZOS=$$OS^%ZOSV
  1. ;I %ZOS["VMS" D Q
  1. ;. S D=$S(%I["]":"]",1:":")
  1. ;. S %O1=$P(%I,D,1)_D,%O2=$P(%I,D,2)
  1. ;. Q
  1. ;S %D=$S(%ZOS="UNIX":"/",%ZOS="NT":"\",1:""),%O1="",%O2="" Q:%D=""
  1. ;S D=$L(%I,%D),%O1=$P(%I,%D,1,D-1),%O2=$P(%I,%D,D)
  1. ;Q
  1. ;;
  1. ;FEXIST(%PATH,%FL) ;Check if files exsist.
  1. ;;S Y=$$DTEST("/usr/var",$NA(array))
  1. ;N %ZISH,%ZISHY
  1. ;S %ZISH=$$LIST(%PATH,%FL,"%ZISHY")
  1. ;Q %ZISH
  1. ;;
  1. ;----- END IHS MODIFICATION XU*8.0*1018
  1. ;
  1. LIST(%ZX1,%ZX2,%ZX3) ;ef,SR. Create a local array holding file names
  1. ;S Y=$$LIST^%ZISH("\dir\",$NA(array),$NA(return array)) Return 1 if found anything
  1. ;
  1. N %ZISH,%ZISHN,%ZX,%ZISHY,%ZY,%ZOS
  1. S %ZX1=$$DEFDIR($G(%ZX1)),%ZOS=$$OS^%ZOSV
  1. ;S %ZX1=$$TRNLNM(%ZX1)
  1. ;
  1. ;----- BEGIN IHS MODIFICATION - XU*8.0*1018
  1. ;TASSC/MFD added LISTI sub to accommodate IHS call without $NA array in %ZX2
  1. S %ZISHT=$ZT,X="*LISTI",@^%ZOSF("TRAP") ;TASSC/MFD, 9/9/02 added * to not unwind stack
  1. I %ZX2'["*",$D(@%ZX2)<10 G LISTI ;TASSC/MFD
  1. I %ZX2["*",$D(@%ZX2)<10 G LISTI ;TASSC/MFD
  1. ;----- END IHS MODIFICATION - XU*8.0*1018
  1. ;
  1. ;Get fls to act on
  1. S %ZISH="" F S %ZISH=$O(@%ZX2@(%ZISH)) Q:%ZISH="" D
  1. . S %ZISHY=$P(%ZISH,"*")
  1. . I %ZOS="VMS",%ZISH'["." S %ZISH=%ZISH_".*" ;Allways upper
  1. . ;NT, display case, ignore for lookup
  1. . S %ZX=%ZX1_%ZISH
  1. . F %ZISHN=0:1 D Q:(%ZX="")
  1. . . S %ZX=$ZSEARCH($S(%ZISHN:"",1:%ZX))
  1. . . ;Q:(%ZX="")!($$UP^XLFSTR(%ZX)'[%ZISHY)!(%ZX?.E1.2".")
  1. . . Q:(%ZX="")!(%ZX?.E1.2".")
  1. . . I %ZOS="VMS" S %ZX=$P(%ZX,"]",2),@%ZX3@(%ZX)=""
  1. . . I %ZOS="NT" S %ZY=$P(%ZX,"\",$L(%ZX,"\")),@%ZX3@(%ZY)=""
  1. . . I %ZOS="UNIX" S %ZY=$P(%ZX,"/",$L(%ZX,"/")) Q:%ZX'[%ZISHY S @%ZX3@(%ZY)=""
  1. . . Q
  1. S X=%ZISHT,@^%ZOSF("TRAP") ;TASSC/MFD reset trap
  1. Q $O(@%ZX3@(""))]""
  1. ;
  1. ;----- BEGIN IHS MODIFICATION - XU*8.0*1018
  1. ; Re-introducing IHS code
  1. MV(X1,X2,Y1,Y2) ;ef,SR. Rename a fl
  1. ;S Y=$$MV^ZOSHDOS("\dir\","fl","\dir\","fl")
  1. ;
  1. ;----- BEGIN IHS MODIFICATION - XU*8.0*1008
  1. ;This subroutine is rewritten to make sure the correct path is used
  1. ;when renaming or moving a file. IHS/ITSC/AEF/04/28/03
  1. N X,Y,%ZISHMVC
  1. S X1=$$DEFDIR($G(X1)),Y1=$$DEFDIR($G(Y1))
  1. S X=X1_X2,Y=Y1_Y2
  1. S %ZISHMVC=$S($ZV["UNIX":"mv",1:"move")
  1. Q $$JOBWAIT^%HOSTCMD(%ZISHMVC_" "_X_" "_Y)
  1. ;----- END IHS MODIFICATION - XU*8.0*1008
  1. N %,%ZB,%ZC,%ZISHDV1,%ZISHDV2,%ZISHFN1,%ZISHFN2,%ZISHPCT,%ZISHSIZ,%ZISHX,X,Y,%ZISHMVC
  1. S X1=$$DEFDIR($G(X1)),Y1=$$DEFDIR($G(Y1))
  1. S X=X1_X2,Y=Y1_Y2
  1. S %ZISHMVC=$S($ZV["UNIX":"cp ",1:"copy ") ;TASSC/MFD added line to allow cp on UNIX
  1. S %=$ZF(-1,%ZISHMVC_X_" "_Y) ;TASSC/MFD changed X1/Y1 to X/Y
  1. S %ZISHX(X2)="" S Y=$$DEL^%ZISH(X1,$NA(%ZISHX))
  1. Q 1
  1. ;
  1. S (%ZISHPCT,%ZB,%ZC)=0
  1. D SLOWCOPY S %ZISHX(X2)="" S Y=$$DEL^%ZISH(X1,$NA(%ZISHX))
  1. Q 1
  1. ;
  1. SLOWCOPY ; Copy without view buffer
  1. N X,Y
  1. O %ZISHDV1:(%ZISHFN1:"R"::::""),%ZISHDV2:(%ZISHFN2:"W"::::"")
  1. FOR DO Q:%ZC!(%ZB=%ZISHSIZ)
  1. . U %ZISHDV1 R X#1024 Q:$L(X)=0
  1. . U %ZISHDV2 W X S %ZB=$ZB,%ZC=$ZC Q:%ZC
  1. . I %ZB=%ZISHSIZ C %ZISHDV2 S %ZC=($ZA=-1)
  1. . S X=%ZB/%ZISHSIZ*100\1 ; %done
  1. . Q:X=%ZISHPCT S %ZISHPCT=X
  1. . Q ;U 0 W $J(%ZISHPCT,3),*13
  1. Q
  1. ;
  1. ;---------------------------------------------
  1. ; Commented below VA logic due to unknown side effects IHS/OIT/FBD
  1. ;MV(X1,X2,Y1,Y2) ;ef,SR. Rename a fl
  1. ;;S Y=$$MV^ZOSHDOS("\dir\","fl","\dir\","fl")
  1. ;N X,Y,%ZISHMVC
  1. ;S X1=$$DEFDIR($G(X1)),Y1=$$DEFDIR($G(Y1))
  1. ;S X=X1_X2,Y=Y1_Y2
  1. ;S %ZISHMVC=$S($ZV["UNIX":"mv",1:"move")
  1. ;Q $$JOBWAIT^%HOSTCMD(%ZISHMVC_" "_X_" "_Y)
  1. ;;----- END IHS MODIFICATION - XU*8.0*1008
  1. ;;
  1. ;;Unix use mv, NT/VMS use COPY and DEL
  1. ;N %,X,Y,%ZOS,%ZISHX S %ZOS=$$OS^%ZOSV
  1. ;S X1=$$DEFDIR($G(X1)),Y1=$$DEFDIR($G(Y1))
  1. ;S X=$ZSEARCH(X1_X2),Y=Y1_Y2 ;move X to Y
  1. ;I X="" Q 0
  1. ;;Move to same place can delete file. Since at destination return 1
  1. ;I $P(X,";")=Y Q 1
  1. ;S %=$ZF(-1,$S(%ZOS="UNIX":"mv ",1:"copy ")_X_" "_Y) ;Use NT/VMS copy
  1. ;I %ZOS'="UNIX" D
  1. ;. S X2=$P(X,X1,2),%ZISHX(X2)=""
  1. ;. S Y=$$DEL^%ZISH(X1,$NA(%ZISHX))
  1. ;Q 1
  1. ;;
  1. ;----- END IHS MODIFICATION - XU*8.0*1018
  1. ;-----------------------------------------------------
  1. ; BEGIN IHS MODIFICATION - XU*8.0*1018
  1. ; Re-introduce IHS code and comment VA modifications - IHS/OIT/FBD
  1. ;
  1. PWD(X) ;ef,SR. Print working directory ;TASSC/MFD parameter put back in for IHS
  1. N Y
  1. S Y=$$DEFDIR("")
  1. I Y="" S Y=$ZSEARCH("*")
  1. S X(1)=$P(Y,".",1)
  1. Q X(1) ;TASSC/MFD changed to subscripted return var
  1. ;
  1. ; Commented below VA code - IHS/OIT/FBD - XU*8.0*1018
  1. ;PWD() ;ef,SR. Print working directory
  1. ;N Y,%ZOS
  1. ;S Y=$$DEFDIR(""),%ZOS=$$OS^%ZOSV
  1. ;I Y="" S Y=$ZSEARCH("*")
  1. ;Q $S(%ZOS["VMS":Y,1:$P(Y,".",1))
  1. ; - END IHS MODIFICATION - XU*8.0*1018
  1. ;
  1. TRNLNM(PATH) ;ef. Expand logical path
  1. N %ZOS,P1,P2
  1. S %ZOS=$$OS^%ZOSV,PATH=$G(PATH)
  1. I %ZOS="VMS" D Q PATH
  1. . S P1=PATH_$S(PATH[":":"*.*",1:":*.*")
  1. . S P2=$ZSEARCH(P1)
  1. . S:$L(P2) PATH=$S(P2["]":$P(P2,"]",1,$L(P2,"]")-1)_"]",1:$P(P2,":",1)_":")
  1. . Q
  1. I %ZOS="NT" D Q PATH
  1. . S P1=PATH_$S($E(PATH,$L(PATH))'="\":"\*",1:"*"),P2=$ZSEARCH(P1)
  1. . S:$L(P2) PATH=$P(P2,"\",1,$L(P2,"\")-1)_"\"
  1. . Q
  1. ;Unix Cache $ZSEARCH uses % around an environment variable
  1. I %ZOS="UNIX" D Q PATH
  1. . S P1=PATH_$S($E(PATH,$L(PATH))'="/":"/*",1:"*"),P2=$ZSEARCH(P1)
  1. . S:$L(P2) PATH=$P(P2,"/",1,$L(P2,"/")-1)_"/"
  1. . Q
  1. Q PATH
  1. ;
  1. DEFDIR(DF) ;ef. Default Dir and frmt
  1. ;Need to handle NT, VMS and Linux
  1. N %ZOS,P1,P2 S %ZOS=$$OS^%ZOSV,DF=$G(DF)
  1. Q:DF="." "" ;Special way to get current dir.
  1. S:DF="" DF=$G(^XTV(8989.3,1,"DEV")),DF=$P(DF,"^",$S($$PRI^%ZOSV<2:1,1:2))
  1. Q:DF="" ""
  1. ;Check syntax, VMS needs disk:[dir] or logical:
  1. I %ZOS="VMS" D
  1. . I DF[":" S P1=$P(DF,":")_":",P2=$P(DF,":",2)
  1. . E S P1="",P2=DF
  1. . I P1="",P2["$" S P1=P2,P2="" ;Could be a logical
  1. . I $L(P2) S:P2'["[" P2="["_P2 S:P2'["]" P2=P2_"]"
  1. . S DF=P1_P2 S:DF'[":" DF=DF_":"
  1. . Q
  1. ;Check syntax, Unix needs /mnt/fl, ./fl, ~/fl %HOME%/fl
  1. I %ZOS="UNIX" D
  1. . S DF=$TR(DF,"\","/")
  1. . S:$E(DF,$L(DF))'="/" DF=DF_"/"
  1. . Q
  1. ;Check syntax, NT needs c:\dir\ or \\server\folder\
  1. I %ZOS="NT" D
  1. . N P1,P2
  1. . I '(DF?1(1A1":\",1"\\").E) S DF=$$DEFDIR("")
  1. . S P1="",P2=DF
  1. . I DF[":" S P1=$P(DF,":")_":",P2=$P(DF,":",2)
  1. . S P2=$TR(P2,"/","\")
  1. . I $L(P2) S:".\"'[$E(P2,1) P2="\"_P2 S:$E(P2,$L(P2))'="\" P2=P2_"\"
  1. . S DF=P1_P2
  1. . Q
  1. S DF=$$TRNLNM(DF) ;Resolve logicals
  1. Q DF
  1. ; BEGIN IHS MODIFICATION - XU*8.0*1018
  1. DF(X) ;Dir frmt ;TASSC/MFD added DF+2
  1. Q:X=""
  1. I $ZV["UNIX" S X=$TR(X,"\","/") S:$E(X,$L(X))'="/" X=X_"/" Q ;TASSC/MFD added line for UNIX sys
  1. S X=$TR(X,"/","\")
  1. I $E(X,$L(X))'="\" S X=X_"\" Q
  1. Q
  1. ; END IHS MODIFICATION - XU*8.0*1018
  1. FL(X) ;Fl len
  1. N ZOSHP1,ZOSHP2
  1. S ZOSHP1=$P(X,"."),ZOSHP2=$P(X,".",2)
  1. I $L(ZOSHP1)>8 S X=4 Q
  1. I $L(ZOSHP2)>3 S X=4 Q
  1. Q
  1. ;
  1. STATUS() ;ef,SR. Return EOF status
  1. U $I
  1. Q $$EOF($ZEOF)
  1. ;
  1. EOF(X) ;Eof flag, pass in $ZEOF
  1. ;Q (X=-1) ;XU*8.0*1018 - ORIGINAL LINE - COMMENTED OUT
  1. Q $ZEOF ;TASSC/MFD check for $ZEOF rather than ENDOFFILE error XU*8.0*1018
  1. ;
  1. MAKEREF(HF,IX,OVF) ;Internal call to rebuild global ref.
  1. ;Return %ZISHF,%ZISHO,%ZISHI,%ZISUB
  1. ; ZEXCEPT: %ZISHF,%ZISHI,%ZISHO,%ZISUB
  1. N I,F,MX
  1. S OVF=$G(OVF,"%ZISHOF")
  1. S %ZISHI=$QS(HF,IX),MX=$QL(HF) ;
  1. S F=$NA(@HF,IX-1) ;Get first part
  1. I IX=1 S %ZISHF=F_"(%ZISHI" ;Build root, IX=1
  1. I IX>1 S %ZISHF=$E(F,1,$L(F)-1)_",%ZISHI" ;Build root
  1. S %ZISHO=%ZISHF_","_OVF_",%OVFCNT)" ;Make overflow
  1. F I=IX+1:1:MX S %ZISHF=%ZISHF_",%ZISUB("_I_")",%ZISUB(I)=$QS(HF,I)
  1. S %ZISHF=%ZISHF_")"
  1. Q
  1. ;
  1. READNXT(REC) ;Read any sized record into array. %ZB has terminator
  1. ; ZEXCEPT: %ZB
  1. N %,I,X,$ES,$ET S REC="",$ET="D READNX^%ZISH Q"
  1. U IO R X:5 S %ZB=$A($ZB),REC=$E(X,1,255)
  1. Q:$L(X)<256
  1. S %=256 F I=1:1 Q:$L(X)<% S REC(I)=$E(X,%,%+254),%=%+255
  1. Q
  1. READNX ;Check for EOF
  1. ; ZEXCEPT: %ZA
  1. ;I $ZE["ENDOFFILE" S %ZA=-1 ;TASSC/MFD commented out
  1. ;S $EC="" ;IHS/OIT/FBD - COMMENTED OUT XU*8.0*1018
  1. I $ZEOF S %ZA=-1 ;TASSC/MFD added line since we are checking for $ZEOF
  1. Q
  1. ;
  1. FTG(%ZX1,%ZX2,%ZX3,%ZX4,%ZX5) ;ef,SR. Unload contents of host file into global
  1. ;p1=hostf file directory
  1. ;p2=host file name
  1. ;p3= $NAME REFERENCE INCLUDING STARTING SUBSCRIPT
  1. ;p4=INCREMENT SUBSCRIPT
  1. ;p5=Overflow subscript, defaults to "OVF"
  1. N %ZA,%ZB,%ZC,%XX,%OVFCNT,%ZISHF,%ZISHO,POP,%ZISUB,$ES,$ET
  1. N I,%ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHOF,%ZISHOX,%ZISHS,%ZX,%ZISHY
  1. S %ZX1=$$DEFDIR($G(%ZX1)),%ZISHOF=$G(%ZX5,"OVF")
  1. D MAKEREF(%ZX3,%ZX4,"%ZISHOF")
  1. D OPEN^%ZISH(,%ZX1,%ZX2,"R")
  1. I POP Q 0
  1. S %ZC=1,%ZA=0,$ET="S %ZC=0,%ZA=-1,$EC="""" Q"
  1. S X="ERREOF^%ZISH",@^%ZOSF("TRAP") ;IHS/OIT/FBD - XU*8.0*1018 - Added line from IHS side
  1. U IO F K %XX D READNXT(.%XX) Q:$$EOF($ZEOF)!%ZA D
  1. . S @%ZISHF=%XX
  1. . I $D(%XX)>2 F %OVFCNT=1:1 Q:'$D(%XX(%OVFCNT)) S @%ZISHO=%XX(%OVFCNT)
  1. . S %ZISHI=%ZISHI+1
  1. . Q
  1. D CLOSE() ;Normal exit
  1. Q %ZC
  1. ;
  1. GTF(%ZX1,%ZX2,%ZX3,%ZX4) ;ef,SR. Load contents of global to host file.
  1. ;p1=$NAME of global reference
  1. ;p2=incrementing subscript
  1. ;p3=host file directory
  1. ;p4=host file name
  1. N %ZISHY,%ZISHOX
  1. S %ZISHY=$$MGTF(%ZX1,%ZX2,%ZX3,%ZX4,"W")
  1. Q %ZISHY
  1. ;
  1. GATF(%ZX1,%ZX2,%ZX3,%ZX4) ;ef,SR. Append to host file.
  1. ;
  1. ;p1=$NAME of global reference
  1. ;p2=incrementing subscript
  1. ;p3=host file directory
  1. ;p4=host file name
  1. N %ZISHY
  1. S %ZISHY=$$MGTF(%ZX1,%ZX2,%ZX3,%ZX4,"A")
  1. Q %ZISHY
  1. ;
  1. MGTF(%ZX1,%ZX2,%ZX3,%ZX4,%ZX5) ;
  1. ;p1=$NAME of global reference
  1. ;p2=incrementing subscript
  1. ;p3=host file directory
  1. ;p4=host file name
  1. ; ZEXCEPT: %ZISHF,POP
  1. N %ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHS,%ZISHOX,IO,%ZX,Y,%ZC
  1. D MAKEREF(%ZX1,%ZX2)
  1. D OPEN^%ZISH(,$G(%ZX3),%ZX4,%ZX5) ;Default dir set in open
  1. I POP Q 0
  1. ;----- BEGIN IHS MODIFICATION - XU*8.0*1018 IHS/OIT/FBD
  1. ; commented VA code and added IHS logic
  1. ;N $ETRAP S $ETRAP="S $EC="""" D CLOSE^%ZISH() Q 0"
  1. N X S X="ERREOF^%ZISH",@^%ZOSF("TRAP")
  1. ;----- END IHS MODIFICATION - XU*8.0*1018
  1. F Q:'($D(@%ZISHF)#2) S %ZX=@%ZISHF,%ZISHI=%ZISHI+1 U IO W %ZX,!
  1. D CLOSE()
  1. Q 1
  1. ;
  1. ; BEGIN IHS MODIFICATION - XU*8.0*1018
  1. ;
  1. ; TASSC/MFD all subs below are IHS-added
  1. ;
  1. OPENI(X1,X2,X3) ; called from OPEN sub above, or can be called directly
  1. N %,%1,%2,%I,%T,%ZA,%ZISHIO
  1. S %I=$I,%T=0,POP=0,X1=$$DEFDIR($G(X1)) M %ZISHIO=IO ;TASSC/MFD 11/15/02 uncommented and changed X2= to X1= to get \ appended to directory variable X1
  1. S %1=$S(X3["A":"AW",X3["W":"WN",1:"R")_$S(X3["B":"U",1:"S") ;$$MODE^%ZISF(X2_X3,X4)
  1. S %=X1_X2 O %:(%1):2 I '$T S POP=1 Q 1
  1. U % S %ZA=$ZA
  1. I %ZA=-1 U:%I]"" %I C % S POP=1 Q 1
  1. S IO=%,IO(1,IO)="",IOT="HFS",POP=0
  1. ;I $G(X1)]"" D SAVDEV^%ZISUTL(X1)
  1. I '$D(ZTQUEUED) U IO(0)
  1. Q 0
  1. ;
  1. DELI ; called from DEL sub above
  1. S X=%ZISHT,@^%ZOSF("TRAP") ; reset the trap
  1. S %ZISH=%ZX2,%=$S(%ZISH[%ZX1:%ZISH,1:%ZX1_%ZISH) D
  1. . S %=$ZF(-1,%ZISHDC_%)
  1. Q %
  1. LISTI ;List files, put in %ZX3 array
  1. ; called from LIST sub above
  1. ; reset trap first
  1. S X=%ZISHT,@^%ZOSF("TRAP") ;TASSC/MFD reset trap
  1. S VAR=1 ;VAR=1 means no files or a problem
  1. I $G(%ZX1)']""!($G(%ZX2)']"") Q
  1. S %ZX=%ZX1_%ZX2,%ZISHY=$$UP^XLFSTR($P(%ZX,"*"))
  1. F %ZISHN=0:1 D Q:(%ZX="")
  1. . S %ZX=$ZSEARCH($S(%ZISHN:"",1:%ZX))
  1. . Q:(%ZX="")!($$UP^XLFSTR(%ZX)'[%ZISHY)!(%ZX?.E1.2".")
  1. . I $ZV["UNIX" S %ZY=$P(%ZX,"/",$L(%ZX,"/")),%ZX3(%ZISHN+1)=%ZY
  1. . I $ZV["Windows" S %ZY=$P(%ZX,"\",$L(%ZX,"\")),%ZX3(%ZISHN+1)=%ZY
  1. ;S VAR='$D(%ZX3)
  1. Q '$D(%ZX3)
  1. ;
  1. SEND(ZISH1,ZISH2,ZISH3,ZISHPARM) ;Send UNIX or Windows fl
  1. ; S Y=$$SEND^%ZISH("/dir/","fl","mach","ftpsend param")
  1. ; "fl*"
  1. ; .array
  1. ; TASSC/MFD added ZISHPARM as a 4th parameter, parameters for send scripts
  1. ;
  1. NEW ZISH
  1. S ZISH1=$G(ZISH1) ; If directory not passed, use system.
  1. I '$L($G(ZISH2)) Q "-1^<file not specified>"
  1. I '$L($G(ZISH3)) Q "-1^<destination not specified>"
  1. S Y=$$LIST(.ZISH1,ZISH2,.ZISH2) ; Put array of files in ZISH2()
  1. I '$L($G(ZISHPARM)) S ZISHPARM="-a" ; -a for ascii mode with ftpsend
  1. S ZISHC="cd /usr/spool/uucppublic; ftpsend " ;TASSC/MFD moved script into a var
  1. ; -n = suppress sending results in UNIX mail message to the user
  1. ; -c = pack file(s) with 'compress' before sending
  1. ;I $ZV["Windows" S ZISHC="sendto " ;TASSC/MFD accommodate Windows, use full path names on files ;IHS/OIT/FBD - XU*8.0*1018 - ORIGNAL LINE - COMMENTED OUT & REPLACED WITH FOLLOWING 'IF' BLOCK
  1. I $ZV["Windows" D ;IHS/OIT/FBD - XU*8.0*1018 - WINDOWS-SPECIFIC MODIFICATIONS
  1. . S ZISHC="sendto " ;IHS/OIT/FBD - XU*8.0*1018 - ADDED LINE - STRIP PATH SPECIFICATION FROM COMMAND LINE CALL
  1. . F ZISH=1:1 Q:'$D(ZISH2(ZISH)) D ;IHS/OIT/FBD - XU*8.0*1018 - ADDED LINE - SCROLL THROUGH LIST OF FILES
  1. .. S ZISH2(ZISH)=ZISH1_ZISH2(ZISH) ;IHS/OIT/FBD - XU*8.0*1018 - ADDED LINE - AND APPEND PATH TO FILE NAMES
  1. F ZISH=1:1 Q:'$D(ZISH2(ZISH)) D
  1. . S ZISHC=ZISHC_ZISHPARM_" "_ZISH3_" "_ZISH2(ZISH)
  1. . D JW ;IHS/AAO/RPL 4/9/99 ftpsend after cd to public or nothing gets sent.
  1. Q ZISHX ;IHS/AAO/RPL moved down from above line
  1. ;
  1. JW ; -- Cache extrinsic.
  1. S ZISHX=$$JOBWAIT^%HOSTCMD(ZISHC)
  1. ; Excepted from SAC 6.1.5, 6.1.2.2 and 6.1.2.3 memo dated 16Nov93.
  1. Q
  1. ;
  1. IP() ; return underlying connections ip address
  1. Q $P($ZU(54,13,$P($ZIO,"/")),",")
  1. HOST() ; return underlying host name
  1. ;----- BEGIN IHS MODIFICATION - XU*8.0*1008
  1. ;The line below is commented out and replaced by new line to return
  1. ;the underlying Cache server name. IHS/ITSC/AEF/05-01-03
  1. ;Q $P($ZU(54,13,$P($ZIO,"/")),",",2)
  1. Q $ZU(110)
  1. ;
  1. ;New subroutine CLIENT is added to return the underlying Cache
  1. ;client name
  1. CLIENT() ;return underlying client name - only works if reverse DNS
  1. ;available
  1. Q $P($ZU(54,13,$P($ZIO,"/")),",",2)
  1. ;----- END IHS MODIFICATION - XU*8.0*1008
  1. ;
  1. SENDTO1(ZISH1,ZISH2) ;use sendto1 script
  1. Q $$SENDTO1^ZISHMSMU(ZISH1,ZISH2)
  1. ;
  1. ERREOF D CLOSE() ;IHS/OIT/FBD - XU*8.0*1018 - Error close and exit
  1. Q 0
  1. ;
  1. ;----- END IHS MOD - XU*8.0*1018