cABIEMGS ;Import/Export GLOBAL SAVE ;%ABIEMGS; [ 02/06/01 11:26 AM ] ; MSM S %GBLFMT="MSM" G BEGIN ; Write MSM or type defined by %GBLFMT. ANSI S %GBLFMT="ANSI" ; Write ANSI X11/88-14 format. BEGIN ; Top of global save routine. S %GBLFMT=$G(%GBLFMT,"MSM") ; Default format type. S:"/ANSI/MSM/"'[("/"_%GBLFMT_"/") %GBLFMT="MSM" ; Check validity. S $ZT="ERR^%ABIEMGS",%INT=0 ;S OS=$ZB($V(0,-4,2),#F,1) SDEV D OUT^%ABIEMSD Q:$D(QUIT) S %QUIT=0 SIZE ; K %SIZE ; I OS=8,%DEVTYPE="HFS",%FN?1A1":"1.ANP DO I %SIZE<1 W !!,"No space on disk" G SDEV ; .S %X=$E(%FN,1) NEW %A,%B,%C,%Y ; .S %Y=$ZOS(9,%X) F %I=1:1:3 S @("%"_$C(64+%I))=$P(%Y,"^",%I) ; .S %SIZE=%A*%B*%C\1024 ; available space in kbytes ;SIZE1 S %SIZE=$S($D(%SIZE):%SIZE*1024,1:1024*1024*#100000) G RCMT ; max=1TB ; RCMT S %CMT=$G(%ABIE("COM"),"Export from "_$ZU(0)) I 'quiet R !,"Enter comment for dump header : ",%CMT G SDEV:%CMT="^",CNT1:%CMT'="?" W !,"The comment will be displayed with the date and time before the globals",!,"are restored." G RCMT CNT1 I 'quiet D INT^%GSEL I quiet K ^UTILITY($J) M ^UTILITY($J)=@%ABIE("SEL") S %GTEMP="^UTILITY($J)" START S %GBLFMT=$G(%GBLFMT,"MSM") D 0^%GPROC G:'$D(%GN) EXIT D INT^%D,INT^%T S %GPR="PROC^%ABIEMGS",%GUD="UNDEF^%ABIEMGS",%GNV="NOVAL^%ABIEMGS",%GBR="BREAK^%ABIEMGS",%GPRALL="WHOLE^%ABIEMGS" I %DEVTYPE="HFS" S %DLMS=44 D GETDLM^%RR1 S %SEQ=1 I 'quiet U 0 W !!,"Saving ...",! U %DEV W:'%DEV ! W %TIM1_" "_%DAT1_" ("_%GBLFMT_" format)",! W %CMT,! S %NEW=1 D 1^%GPROC U %DEV I %GBLFMT="MSM" W "**",!,"**" W !! S %ZA=$ZA I 'quiet U 0 W !!,"Save complete. " EXIT U 0 I $D(%DEV),$P'=%DEV,+%DEV C %DEV I $G(%DEVTYPE)="HFS",$ZA=-1 s:$d(%msysadm) %mQ=-1 W !!,"Cannot write end of file. Last part of save may be corrupted." K OS,QUIT,%QUIT,%DEV,%FN,%GN,%GNUM,%DAT,%DAT1,%TIM,%TIM1,%CMT,%GPR,%GUD,%GNV,%GBR,%INT,%NAM,%NEW,%RSC,%SBP,%SEQ,%SIZE,%X,%ZA Q CLR ; Clear the zero length file that was created I OS=8&($G(%DEVTYPE)="HFS") S X=$ZOS(2,%FN) I OS=3&($G(%DEVTYPE)="HFS") Q:$E(%FN,1,5)="/dev/" Q:%FN["*" S CMD="rm -f "_%FN,X=$$TERMINAL^%HOSTCMD(CMD) Q WHOLE ; Process an entire global F %GI1=0:0 S (%GT,%GV)=$ZO(@%GT) Q:%GT="" D PROC Q:%GPRQ Q PROC ; S %J=$S($E(%GT,2)="[":"^"_$P(%GT,"]",2,999),1:%GT) I TRT="C",$E(%J,1,2)="^%" S %J="^c"_$E(%J,3,$L(%J)) I TRF'=TRT X RULE(0) U %DEV W %J,! S %DATA=@%GV I TRF'=TRT X GLOTR I %DEVTYPE="HFS",%DATA[%DLMS DO .U 0 W !,"WARNING: Stripping delimiter characters from node "_%GT .U %DEV F %X=1:1:$L(%DATA,%DLMS) W $P(%DATA,%DLMS,%X) .W ! E W %DATA,! I $ZC U 0 W !!,"End of file reached unexpectedly; last portion of save could be corrupted!",*7,!,"Save terminated on record:",%GT G EOF I %SIZE-$ZB>512 Q:'%NEW!'%DEV U 0 W:'quiet !,$P(%GT,"(") S %NEW=0 Q U %DEV W "*E",! C %DEV D NEXTVOL Q:'%QUIT EOF S %GT="^zzzzzzzz",%DGV=11,%P=1,%RG=0 K ^UTILITY($J) ; terminate %GPROC Q UNDEF U 0 W *7,%GT," is undefined." S %NEW=1 Q NOVAL U 0 W *7,%GT," does not have a value." S %NEW=1 Q BREAK Q:%QUIT I %GBLFMT="MSM" U %DEV W "*",!,"*",! S %NEW=1 Q ERR ; I $F($ZE,"") U 0 W !!,"...Aborted." D EXIT ZQ 0 D EXIT ZQ 1 NEXTVOL ; S %SEQ=%SEQ+1 U 0 W !,"Sequence #",%SEQ-1," is full, if using removeable media, please put in the next one" NEXTVOL1 ; R !,"Enter 'GO' to proceed: ",%X I %X="?" W !!,"Remove sequence #",%SEQ-1,", and put the next disk or tape into the drive. If you are",!,"not using removeable media, you should abort this save by typing 'control C';",!,"your data will still be good up to this point." G NEXTVOL1 I %X'="GO" W " ??" G NEXTVOL1 O @%DEVOARG U %DEV I $ZA U 0 W !,"Cannot access ",%FN," please correct" G NEXTVOL1 W %SEQ,! S %X=$ZC U 0 I %X W !,"Cannot write to ",%FN," please correct" G NEXTVOL1 S QUIT=0 Q NEXTTAPE ; U 0 W !,"Tape sequence number ",%SEQ," is full. Last node was ",%GT,"." W !,"After this tape rewinds, mount the next tape.",! S %SEQ=%SEQ+1 U %DEV W *9 NT0 U %DEV W *16 U 0 NT1 W !,"Enter 'GO' when tape sequence number ",%SEQ R " is ready: ",%X I %X="?" W !,"Mount the next tape (sequence number ",%SEQ,") and enter 'GO' when it is ready.",!,"Or enter '^' to abort the save.",! G NT1 I %X["^" S QUIT=1 Q I %X'="GO",%X'="go" W *7," ??" G NT1 U %DEV W *10 I @(%MTON_"=0") U 0 W *7,!,"Tape is not ready" G NT1 I @%MTWLK U 0 W *7,!,"Tape is write protected" G NT0 W %TIM1_" "_%DAT1_" (sequence "_%SEQ_")",!,%CMT,! U 0 W !,"Saving ",$P(%GT,"(") S QUIT=0 Q