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

ZISHGTM.m

Go to the documentation of this file.
  1. %ZISH ;ISF/AC,RWF - GT.M for VMS/Unix Host file Control ;12/07/09 15:53
  1. ;;8.0;KERNEL;**275,306,385,524**;Jul 10, 1995;Build 15
  1. ; for GT.M for Unix/VMS, version 4.3
  1. ;
  1. OPENERR ;
  1. Q 0
  1. ;
  1. OPEN(X1,X2,X3,X4,X5,X6) ;SR. Open file
  1. ;D OPEN^%ZISH([handlename],[directory],filename,[accessmode],[recsize])
  1. ;X1=handle name
  1. ;X2=directory, X3=filename, X4=access mode
  1. ;X5=new file max record size, X6=Subtype
  1. ;
  1. N %,%1,%2,%IO,%I2,%P,%T,X,Y,$ETRAP
  1. S $ETRAP="D OPNERR^%ZISH"
  1. S U="^",X2=$$DEFDIR($G(X2)),X4=$$UP^XLFSTR(X4)
  1. S Y=$S(X4["A":"append",X4["R":"readonly",X4["W":"newversion",1:"readonly")
  1. S Y=Y_$S(X4["B":":fixed:nowrap:recordsize=512",$G(X5)&(X4["W"):":WIDTH="_+X5,1:"")
  1. S:$E(Y)=":" Y=$E(Y,2,999) S %IO=X2_X3,%I2="%IO:"_$S($L(Y):"("_Y_")",1:"")_":3"
  1. O @%I2 S %T=$T
  1. I '%T S POP=1 Q
  1. S IO=%IO,IO(1,IO)="",IOT="HFS",IOM=80,IOSL=60,POP=0 D SUBTYPE^%ZIS3($G(X6))
  1. I $G(X1)]"" D SAVDEV^%ZISUTL(X1)
  1. ;U IO U $P ;Don't do a USE.
  1. Q
  1. OPNERR ;error on open
  1. S POP=1,$ECODE=""
  1. ;U:$G(%P)]"" %P
  1. Q
  1. ;
  1. CLOSE(X) ;SR. Close HFS device not opened by %ZIS.
  1. ;X1=Handle name, IO=device
  1. I IO]"" C IO K IO(1,IO)
  1. I $G(X)]"" D RMDEV^%ZISUTL(X)
  1. I $D(IO("HOME"))!$D(^XUTL("XQ",$J,"IOS")) D HOME^%ZIS
  1. Q
  1. DEL(%ZX1,%ZX2) ;ef,SR. Del fl(s)
  1. ;S Y=$$DEL^%ZISH("dir path",$NA(array))
  1. N %ZISH,%ZISHLGR,%ZX,X,%ZXDEL
  1. S %ZX1=$$DEFDIR($G(%ZX1)),%ZXDEL=1,%ZISH=""
  1. F 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=$ZSEARCH(%ZX1_%ZISH)
  1. . Q:%ZX']"" ; File doesn't exist - not an error, just quit.
  1. . O %ZX:READONLY:0
  1. . I '$T S %ZXDEL=0 Q ; Can't open it.
  1. . C %ZX:DELETE
  1. . I $ZSEARCH(%ZX)]"" S %ZXDEL=0 ; Delete was not successful.
  1. Q %ZXDEL
  1. DELERR ;Trap any $ETRAP error, unwind and return.
  1. S $ETRAP="D UNWIND^%ZTER"
  1. S %ZXDEL=0
  1. D UNWIND^%ZTER
  1. Q
  1. ;
  1. LIST(%ZX1,%ZX2,%ZX3) ;ef,SR. Set local array holding fl names
  1. ;S Y=$$LIST^ZISH("/dir/","list_root","return_root")
  1. ;list_root can have XX("A*"), XX("test.com")...
  1. ;Both arrays passed as $NA values (closed roots).
  1. N %ZISH,%ZIX,%ZIY,POP,X
  1. N $ETRAP,$ESTACK S $ETRAP="G LSTX^%ZISH",%ZX1=$$DEFDIR($G(%ZX1))
  1. ;Get fls, Build listing in %ZISHDL1 with ls
  1. S %ZISH=""
  1. F S %ZISH=$O(@%ZX2@(%ZISH)) Q:%ZISH="" D
  1. . S %ZIX=$ZPARSE(%ZX1_%ZISH) Q:%ZIX=""
  1. . F S %ZIY=$ZSEARCH(%ZIX) Q:%ZIY="" S %ZIY=$ZPARSE(%ZIY,"NAME")_$ZPARSE(%ZIY,"TYPE"),@%ZX3@(%ZIY)=""
  1. LSTX ;
  1. S $ECODE=""
  1. Q ($Q(@%ZX3)]"")
  1. ;
  1. SPAWNERR ;TRAP ERROR OF SPAWN
  1. O %ZISHDL1:READONLY:1 I $T C %ZISHDL1:DELETE
  1. S $ECODE=""
  1. Q 0
  1. ;
  1. MV(X1,X2,Y1,Y2) ;ef,SR. Rename a fl
  1. ;S Y=$$MV^ZISH("/dir/","fl","/dir/","fl")
  1. N %Z,%C
  1. S X1=$$DEFDIR($G(X1)),Y1=$$DEFDIR($G(Y1))
  1. S %C=$S($ZV["VMS":"RENAME ",1:"mv ")
  1. ;Pbv or qit
  1. I (X2="")!(Y2="") Q 0
  1. ZSYSTEM %C_X1_X2_" "_Y1_Y2 ;Use system rename
  1. S %Z=$ZSEARCH(Y1_Y2)
  1. Q $L(%Z)>0
  1. ;
  1. PWD() ;ef,SR. Print working directory
  1. N Y
  1. S Y=$$DEFDIR("")
  1. S:Y="" Y=$ZDIR
  1. Q Y
  1. ;
  1. DEFDIR(DF) ;ef. Default Dir and frmt
  1. S DF=$G(DF) Q:DF="." "" ;Special way to get current dir.
  1. S:DF="" DF=$P($G(^XTV(8989.3,1,"DEV")),"^",1)
  1. ;Old code
  1. ;Check syntax, VMS needs : or [ ]
  1. I ^%ZOSF("OS")["VMS" D Q DF ;***EXIT FOR VMS/GTM
  1. . N P1,P2
  1. . S DF=$ZPARSE(DF)
  1. . I DF[":" S P1=$P(DF,":")_":",P2=$P(DF,":",2)
  1. . E S P1="",P2=DF
  1. . I P1="",P2["$" S DF=P2 Q ;Assume a logical
  1. . I $L(P2) S:P2'["[" P2="["_P2 S:P2'["]" P2=P2_"]"
  1. . S DF=P1_P2
  1. . Q
  1. ;
  1. ;Check syntax, Unix check leading & trailing "/"
  1. S DF=$ZPARSE(DF)
  1. I "./"'[$E(DF) S DF="/"_DF
  1. I $E(DF,$L(DF))'="/" S DF=DF_"/"
  1. Q DF
  1. STATUS() ;ef,SR. Return EOF status
  1. U $I
  1. Q $ZEOF
  1. ;
  1. EOF(X) ;Eof flag, Pass in $ZA
  1. Q X
  1. QL(X) ;Qlfrs
  1. Q:X=""
  1. S:$E(X)'="-" X="-"_X
  1. Q
  1. FL(X) ;Fl len
  1. N ZOSHP1,ZOSHP2
  1. S ZOSHP1=$P(X,"."),ZOSHP2=$P(X,".",2)
  1. I $L(ZOSHP1)>14 S X=4 Q
  1. I $L(ZOSHP2)>8 S X=4 Q
  1. Q
  1. ;
  1. MAKEREF(HF,IX,OVF) ;Internal call to rebuild global ref.
  1. ;Return %ZISHF,%ZISHO,%ZISHI,%ZISUB
  1. N I,F,MX
  1. S OVF=$G(OVF,"%ZISHOF")
  1. S %ZISHI=$$QS^DDBRAP(HF,IX),MX=$$QL^DDBRAP(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^DDBRAP(HF,I)
  1. S %ZISHF=%ZISHF_")"
  1. Q
  1. FTG(%ZX1,%ZX2,%ZX3,%ZX4,%ZX5) ;ef,SR. Unload contents of host file into global
  1. ;p1=host 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,%ZL,X,%OVFCNT,%CONT,%EXIT
  1. N I,%ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHLGR,%ZISHOF,%ZISHOX,%ZISHS,%ZX,%ZISHY,POP,%ZISUB
  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. N $ETRAP S %EXIT=0,$ETRAP="S %ZA=1,%EXIT=1,$ECODE="""" Q"
  1. U IO F K %XX D READNXT(.%XX) Q:$$EOF(%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 1
  1. ;
  1. ERREOF D CLOSE() ;Got error Reading file
  1. Q 0
  1. ;
  1. READNXT(REC) ;
  1. N T,I,X,%
  1. U IO R X:2 S %ZA=$ZEOF,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. ;
  1. GTF(%ZX1,%ZX2,%ZX3,%ZX4) ;ef,SR. Load contents of global to host file.
  1. ;Previously name LOAD
  1. ;p1=$NAME of global reference
  1. ;p2=incrementing subscript
  1. ;p3=host file directory
  1. ;p4=host file name
  1. N %ZISHY,%ZISHLGR,%ZISHOX
  1. S %ZISHY=$$MGTF(%ZX1,%ZX2,$G(%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,$G(%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. N %ZISH,%ZISH1,%ZISHI,%ZISHL,%ZISHLGR,%ZISHS,%ZISHOX,IO,%ZX,Y
  1. D MAKEREF(%ZX1,%ZX2)
  1. D OPEN^%ZISH(,%ZX3,%ZX4,%ZX5) ;Default dir set in open
  1. I POP Q 0
  1. N X
  1. N $ETRAP S $ETRAP="S $EC="""" D CLOSE^%ZISH() Q 0"
  1. F Q:'($D(@%ZISHF)#2) S %ZX=@%ZISHF,%ZISHI=%ZISHI+1 U IO W %ZX,!
  1. D CLOSE() ;Normal Exit
  1. Q 1
  1. ;