RGUTOS ;CAIRO/DKM - Platform-dependent operations;12-Oct-1998 16:40;DKM
;;2.1;RUN TIME LIBRARY;;Mar 22, 1999
;=================================================================
; Return version # of RTL
VER() Q +$P($T(RGUTOS+1),";",3)
; Set right margin
RM(X) X ^%ZOSF("RM")
Q
; Test for routine/tag
TEST(X) N Z
S:X[U Z=$P(X,U),X=$P(X,U,2)
X ^%ZOSF("TEST")
Q $S('$T:0,$G(Z)="":1,Z'?.1"%"1.AN:0,1:$T(@Z^@X)'="")
; Raise an exception
RAISE(X) ZT $G(X)
; Return code to set error trap
TRAP(X) Q $$SUBST^RGUT(^%ZOSF("TRAP"),"X",""""_X_"""")
; Check for $ET capability
ETRAP() Q $$NEWERR^%ZTER
; Open a file (extrinsic)
OPENX(X1,X2) ;
D OPEN(.X1,.X2)
Q X1
; Open a file
OPEN(X1,X2) ;
N IO,POP,X3
D PARSE(.X1,.X3),OPEN^%ZISH(X3_X1,X3,X1,$G(X2,"R"),32767)
I POP ZT "OPEN"
S ^XTMP("RGHFS",$J,IO)=X3_X1,X1=IO
Q
; Close a file
CLOSE(X) N Y
S Y=$G(^XTMP("RGHFS",$J,X)),IO=X
K ^(X)
D CLOSE^%ZISH(Y)
Q
; Close all open HFS
CLOSEALL N Z
S Z=""
F S Z=$O(^XTMP("RGHFS",$J,Z)) Q:Z="" D CLOSE(Z)
Q
; Parse out directory from filename
PARSE(X,Y) ;
N D,Z
S D=$E($$DIRDLM,3),Z=$L(X,D),Y=$P(X,D,1,Z-1)_$S(Z>1:D,1:""),X=$P(X,D,Z)
Q
; Read a line
READ(X,Y) ;
N IO,%ZA,%ZB,%ZC,%ZL
S IO=$G(Y,$I)
D READNXT^%ZISH(.X)
U IO
Q $$STATUS^%ZISH&'$L(X)
; Delete a file
DELETE(X) ;
N Z
D PARSE(.X,.Z)
S Z(X)="",Z=$$DEL^%ZISH(Z,"Z")
Q
; Rename a file
RENAME(X1,X2) ;
N X3,X4
D PARSE(.X1,.X3),PARSE(.X2,.X4)
I $$MV^%ZISH(X3,X1,X4,X2)
Q
; List files
DIR(X1,X2,X3) ;
N Z
D PARSE(.X1,.Z)
S Z(X1)="",X3=$G(X3,"^UTILITY(""DIR"",$J)")
K @X3
I $$LIST^%ZISH(Z,"Z",X3)
Q
; Force error if at EOF
EOF I $$STATUS^%ZISH ZT "EOF"
Q
; Returns true if current error is EOF
EOFERR() Q $$EC^%ZOSV["EOF"
; URL format filename-->HFS format
CVTFN(RGFIL,RGROOT) ;
N RGZ,RGZ1,RGD
S RGD=$$DIRDLM,RGROOT=$G(RGROOT)
S:$E(RGROOT,$L(RGROOT))=$E(RGD,3) RGROOT=$E(RGROOT,1,$L(RGROOT)-1)
S RGZ=$L(RGFIL,"/"),RGZ1=$P(RGFIL,"/",1,RGZ-1),RGFIL=$P(RGFIL,"/",RGZ)
S:$L(RGZ1) RGROOT=RGROOT_$E(RGD,$S($L(RGROOT):2,1:1))_$TR(RGZ1,"/.-",$E(RGD,2))
Q RGROOT_$S($L(RGROOT):$E(RGD,3),1:"")_RGFIL
; Return directory delimiters
DIRDLM() N X
S X=$$PWD^%ZISH
Q $S(X["[":"[.]",X["\":"\\\",1:"///")
; FTP file transfer
FTP(X1,X2,X3,X4,X5,X6,X7) ;
D:$$VERSION^%ZOSV(1)["DSM" VMS^RGUTFTP(.X1,.X2,.X3,.X4,.X5,.X6,.X7)
Q
; Parse error data
ERR(X1,X2,X3) ;
N X
S X=$$EC^%ZOSV,X1=$$VERSION^%ZOSV(1)
G ERRMSM:X1["MSM",ERRDSM:X1["DSM"
S (X1,X2,X3)=""
Q
ERRMSM S X1=$E($P(X,">"),2,99),X2=$P($P(X,">",2),":"),X3=X1
S:X2["*" X2=""
S:$E(X1)="Z" X3=$E(X1,2,99),X1="ZTRAP"
Q
ERRDSM S X1=$P($P(X,", ",2),"-",3),X2=$P($P(X,", "),":"),X3=$$TRIM^RGUT($P(X,", ",$S(X1="ZTRAP":4,1:3)))
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRGUTOS1 2773 printed Nov 22, 2024@17:47:23 Page 2
RGUTOS ;CAIRO/DKM - Platform-dependent operations;12-Oct-1998 16:40;DKM
+1 ;;2.1;RUN TIME LIBRARY;;Mar 22, 1999
+2 ;=================================================================
+3 ; Return version # of RTL
VER() QUIT +$PIECE($TEXT(RGUTOS+1),";",3)
+1 ; Set right margin
RM(X) XECUTE ^%ZOSF("RM")
+1 QUIT
+2 ; Test for routine/tag
TEST(X) NEW Z
+1 if X[U
SET Z=$PIECE(X,U)
SET X=$PIECE(X,U,2)
+2 XECUTE ^%ZOSF("TEST")
+3 QUIT $SELECT('$TEST:0,$GET(Z)="":1,Z'?.1"%"1.AN:0,1:$TEXT(@Z^@X)'="")
+4 ; Raise an exception
RAISE(X)
*** ERROR ***
+1 ; Return code to set error trap
TRAP(X) QUIT $$SUBST^RGUT(^%ZOSF("TRAP"),"X",""""_X_"""")
+1 ; Check for $ET capability
ETRAP() QUIT $$NEWERR^%ZTER
+1 ; Open a file (extrinsic)
OPENX(X1,X2) ;
+1 DO OPEN(.X1,.X2)
+2 QUIT X1
+3 ; Open a file
OPEN(X1,X2) ;
+1 NEW IO,POP,X3
+2 DO PARSE(.X1,.X3)
DO OPEN^%ZISH(X3_X1,X3,X1,$GET(X2,"R"),32767)
+3 IF POP