- XMP3 ;(WASH ISC)/AML/CAP-PackMan Build Backup Msg ;04/17/2002 11:07
- ;;8.0;MailMan;;Jun 28, 2002
- ENTER ; This routine backs up what's on disk into a packman message.
- S X=""
- Q:$D(XMPKIDS)
- N XMABORT,XMANSER
- S XMABORT=0
- D QBACKUP(.XMANSER,.XMABORT) I XMABORT S X=U Q
- I 'XMANSER W !,"No backup message built.",! Q
- D BACKUP(XMDUZ,XMZ,.XMP2,.XMABORT) I XMABORT S X=U
- Q
- QBACKUP(Y,XMABORT) ;
- N DIR,DIRUT,X
- W !!,"Routines are the only parts that are backed up. NO other parts"
- W !,"are backed up, not even globals. You may use the 'Summarize Message'"
- W !,"option of PackMan to see what parts the message contains."
- W !,"Those parts that are not routines should be backed up separately"
- W !,"if they need to be preserved.",!!
- S DIR(0)="Y"
- S DIR("A")="Shall I preserve the routines on disk in a separate back-up message"
- S DIR("B")="YES"
- S DIR("?",1)="If YES I will build a MailMan message containing the routines that will"
- S DIR("?",2)="be replaced by the Install."
- S DIR("?")="If NO then you will have no automatic backup of routines."
- D ^DIR I $D(DIRUT) S XMABORT=1
- Q
- BACKUP(XMDUZ,XMZ,XMSELECT,XMABORT) ;
- ;Initialize message, reset & quit if abort
- N XMINSTR,XMPXMZ
- D BINIT(XMDUZ,.XMPXMZ,.XMINSTR,.XMABORT) Q:XMABORT
- D BTEXT(XMZ,.XMSELECT,XMPXMZ)
- D MOVEPART^XMXSEND(XMDUZ,XMPXMZ,.XMINSTR)
- D SEND^XMKP(XMDUZ,XMPXMZ,.XMINSTR)
- D CHECK^XMKPL
- D CLEANUP^XMXADDR
- W !,"PackMan backup message [",XMPXMZ,"] sent."
- Q
- BTEXT(XMZ,XMSELECT,XMPXMZ) ;
- N XCNP,XMCN,XMREC,XMTYPE
- S XCNP=1,XMCN=0
- F S XMCN=$O(^XMB(3.9,XMZ,2,XMCN)) Q:XMCN'>0 S XMREC=^(XMCN,0) D
- . Q:$E(XMREC)'="$"
- . Q:"^$TXT^$END^"[(U_$E(XMREC,1,4)_U)
- . S XMTYPE=$E(XMREC,2,4)
- . D @($S(":ROU:GLB:GLO:DDD:DAT:OPT:HEL:BUL:KEY:FUN:PKG:RTN:DIE:DIB:DIP:"[(":"_XMTYPE_":"):XMTYPE,1:"NO"))
- Q
- ROU ;save routine
- N X,XMROU
- S X=$P(XMREC," ",2) S:X[U X=$P(X,U,2)
- X ^%ZOSF("TEST") E W !,"Routine ",X," is not on the disk." Q
- I $O(XMSELECT(""))="" D BROU Q
- S XMROU=""
- F S XMROU=$O(XMSELECT(XMROU)) Q:XMROU=""!(X=XMROU) I $E(XMROU,$L(XMROU))="*" Q:$E(X,1,$L(XMROU)-1)=$E(XMROU,1,$L(XMROU)-1)
- D:XMROU'="" BROU
- Q
- BROU ;
- N DIF
- S DIF="^XMB(3.9,XMPXMZ,2,"
- S XCNP=XCNP+1
- S ^XMB(3.9,XMPXMZ,2,XCNP,0)="$ROU "_X_" (PACKMAN-BACKUP)"
- X ^%ZOSF("LOAD")
- S ^XMB(3.9,XMPXMZ,2,XCNP,0)="$END ROU "_X_" (PACKMAN-BACKUP)"
- S ^XMB(3.9,XMPXMZ,2,0)="^3.92A^"_XCNP_U_XCNP_U_DT
- Q
- GLO ;New global section
- GLB ;global...save the part to be updated
- W !,"GLOBAL..................NO BACKUP" Q
- DDD ;data dictionary...
- W !,"DATA DICTIONARY.........NO BACKUP" Q
- DAT ;fileman data...what to do
- W !,"FILEMAN DATA............NO BACKUP" Q
- OPT ;Options
- W !,"OPTIONS.................NO BACKUP" Q
- HEL ;Help Frames
- W !,"HELP FRAMES.............NO BACKUP" Q
- BUL ;Bulletins
- W !,"BULLETINS...............NO BACKUP" Q
- KEY ;Security Keys
- W !,"SECURITY KEYS...........NO BACKUP" Q
- FUN ;Functions
- W !,"FUNCTIONS...............NO BACKUP" Q
- PKG ;Package File
- W !,"PACKAGE FILE............NO BACKUP" Q
- RTN ;Routine Documentation
- W !,"ROUTINE DOCUMENTATION...NO BACKUP" Q
- DIE ;Input Templates
- W !,"INPUT TEMPLATES.........NO BACKUP" Q
- DIP ;Print Templates
- W !,"PRINT TEMPLATES.........NO BACKUP" Q
- DIB ;Sort Templates
- W !,"SORT TEMPLATES..........NO BACKUP" Q
- NO ;no way
- W !,"UNDEFINED FUNCTION" Q
- BINIT(XMDUZ,XMPXMZ,XMINSTR,XMABORT) ; setup for first routine
- N XMSUBJ,XMREC,XMDT
- D SUBJ^XMJMS(.XMSUBJ,.XMABORT) Q:XMABORT
- D CRE8XMZ^XMXSEND(XMSUBJ,.XMPXMZ,1) I XMPXMZ<1 S XMABORT=1 Q
- D INIT^XMXADDR
- D TOWHOM^XMJMT(XMDUZ,"Send",.XMINSTR,"",.XMABORT)
- I XMABORT D KILLMSG^XMXUTIL(XMPXMZ) Q
- W !,"Building PackMan backup message with subject ",XMSUBJ,!!
- S XMDT=$E($$NOW^XLFDT_"0000",1,12)
- S XMREC="PACKMAN BACKUP Created on "_$$DOW^XLFDT(XMDT)_", "_$$FMTE^XLFDT($P(XMDT,".",1),"2Z")_" at "_$E(XMDT,9,10)_":"_$E(XMDT,11,12)_" "
- I $D(DUZ),$D(^VA(200,DUZ,0)) S XMREC=XMREC_"by "_$$NAME^XMXUTIL(DUZ)_" "
- S:$D(^XMB("NETNAME")) XMREC=XMREC_"at "_$P(^("NETNAME"),U)_" "
- S ^XMB(3.9,XMPXMZ,2,0)=""
- S ^XMB(3.9,XMPXMZ,2,1,0)="$TXT "_XMREC
- Q
- XMP3 ;(WASH ISC)/AML/CAP-PackMan Build Backup Msg ;04/17/2002 11:07
- +1 ;;8.0;MailMan;;Jun 28, 2002
- ENTER ; This routine backs up what's on disk into a packman message.
- +1 SET X=""
- +2 IF $DATA(XMPKIDS)
- QUIT
- +3 NEW XMABORT,XMANSER
- +4 SET XMABORT=0
- +5 DO QBACKUP(.XMANSER,.XMABORT)
- IF XMABORT
- SET X=U
- QUIT
- +6 IF 'XMANSER
- WRITE !,"No backup message built.",!
- QUIT
- +7 DO BACKUP(XMDUZ,XMZ,.XMP2,.XMABORT)
- IF XMABORT
- SET X=U
- +8 QUIT
- QBACKUP(Y,XMABORT) ;
- +1 NEW DIR,DIRUT,X
- +2 WRITE !!,"Routines are the only parts that are backed up. NO other parts"
- +3 WRITE !,"are backed up, not even globals. You may use the 'Summarize Message'"
- +4 WRITE !,"option of PackMan to see what parts the message contains."
- +5 WRITE !,"Those parts that are not routines should be backed up separately"
- +6 WRITE !,"if they need to be preserved.",!!
- +7 SET DIR(0)="Y"
- +8 SET DIR("A")="Shall I preserve the routines on disk in a separate back-up message"
- +9 SET DIR("B")="YES"
- +10 SET DIR("?",1)="If YES I will build a MailMan message containing the routines that will"
- +11 SET DIR("?",2)="be replaced by the Install."
- +12 SET DIR("?")="If NO then you will have no automatic backup of routines."
- +13 DO ^DIR
- IF $DATA(DIRUT)
- SET XMABORT=1
- +14 QUIT
- BACKUP(XMDUZ,XMZ,XMSELECT,XMABORT) ;
- +1 ;Initialize message, reset & quit if abort
- +2 NEW XMINSTR,XMPXMZ
- +3 DO BINIT(XMDUZ,.XMPXMZ,.XMINSTR,.XMABORT)
- IF XMABORT
- QUIT
- +4 DO BTEXT(XMZ,.XMSELECT,XMPXMZ)
- +5 DO MOVEPART^XMXSEND(XMDUZ,XMPXMZ,.XMINSTR)
- +6 DO SEND^XMKP(XMDUZ,XMPXMZ,.XMINSTR)
- +7 DO CHECK^XMKPL
- +8 DO CLEANUP^XMXADDR
- +9 WRITE !,"PackMan backup message [",XMPXMZ,"] sent."
- +10 QUIT
- BTEXT(XMZ,XMSELECT,XMPXMZ) ;
- +1 NEW XCNP,XMCN,XMREC,XMTYPE
- +2 SET XCNP=1
- SET XMCN=0
- +3 FOR
- SET XMCN=$ORDER(^XMB(3.9,XMZ,2,XMCN))
- IF XMCN'>0
- QUIT
- SET XMREC=^(XMCN,0)
- Begin DoDot:1
- +4 IF $EXTRACT(XMREC)'="$"
- QUIT
- +5 IF "^$TXT^$END^"[(U_$EXTRACT(XMREC,1,4)_U)
- QUIT
- +6 SET XMTYPE=$EXTRACT(XMREC,2,4)
- +7 DO @($SELECT(":ROU:GLB:GLO:DDD:DAT:OPT:HEL:BUL:KEY:FUN:PKG:RTN:DIE:DIB:DIP:"[(":"_XMTYPE_":"):XMTYPE,1:"NO"))
- End DoDot:1
- +8 QUIT
- ROU ;save routine
- +1 NEW X,XMROU
- +2 SET X=$PIECE(XMREC," ",2)
- IF X[U
- SET X=$PIECE(X,U,2)
- +3 XECUTE ^%ZOSF("TEST")
- IF '$TEST
- WRITE !,"Routine ",X," is not on the disk."
- QUIT
- +4 IF $ORDER(XMSELECT(""))=""
- DO BROU
- QUIT
- +5 SET XMROU=""
- +6 FOR
- SET XMROU=$ORDER(XMSELECT(XMROU))
- IF XMROU=""!(X=XMROU)
- QUIT
- IF $EXTRACT(XMROU,$LENGTH(XMROU))="*"
- IF $EXTRACT(X,1,$LENGTH(XMROU)-1)=$EXTRACT(XMROU,1,$LENGTH(XMROU)-1)
- QUIT
- +7 IF XMROU'=""
- DO BROU
- +8 QUIT
- BROU ;
- +1 NEW DIF
- +2 SET DIF="^XMB(3.9,XMPXMZ,2,"
- +3 SET XCNP=XCNP+1
- +4 SET ^XMB(3.9,XMPXMZ,2,XCNP,0)="$ROU "_X_" (PACKMAN-BACKUP)"
- +5 XECUTE ^%ZOSF("LOAD")
- +6 SET ^XMB(3.9,XMPXMZ,2,XCNP,0)="$END ROU "_X_" (PACKMAN-BACKUP)"
- +7 SET ^XMB(3.9,XMPXMZ,2,0)="^3.92A^"_XCNP_U_XCNP_U_DT
- +8 QUIT
- GLO ;New global section
- GLB ;global...save the part to be updated
- +1 WRITE !,"GLOBAL..................NO BACKUP"
- QUIT
- DDD ;data dictionary...
- +1 WRITE !,"DATA DICTIONARY.........NO BACKUP"
- QUIT
- DAT ;fileman data...what to do
- +1 WRITE !,"FILEMAN DATA............NO BACKUP"
- QUIT
- OPT ;Options
- +1 WRITE !,"OPTIONS.................NO BACKUP"
- QUIT
- HEL ;Help Frames
- +1 WRITE !,"HELP FRAMES.............NO BACKUP"
- QUIT
- BUL ;Bulletins
- +1 WRITE !,"BULLETINS...............NO BACKUP"
- QUIT
- KEY ;Security Keys
- +1 WRITE !,"SECURITY KEYS...........NO BACKUP"
- QUIT
- FUN ;Functions
- +1 WRITE !,"FUNCTIONS...............NO BACKUP"
- QUIT
- PKG ;Package File
- +1 WRITE !,"PACKAGE FILE............NO BACKUP"
- QUIT
- RTN ;Routine Documentation
- +1 WRITE !,"ROUTINE DOCUMENTATION...NO BACKUP"
- QUIT
- DIE ;Input Templates
- +1 WRITE !,"INPUT TEMPLATES.........NO BACKUP"
- QUIT
- DIP ;Print Templates
- +1 WRITE !,"PRINT TEMPLATES.........NO BACKUP"
- QUIT
- DIB ;Sort Templates
- +1 WRITE !,"SORT TEMPLATES..........NO BACKUP"
- QUIT
- NO ;no way
- +1 WRITE !,"UNDEFINED FUNCTION"
- QUIT
- BINIT(XMDUZ,XMPXMZ,XMINSTR,XMABORT) ; setup for first routine
- +1 NEW XMSUBJ,XMREC,XMDT
- +2 DO SUBJ^XMJMS(.XMSUBJ,.XMABORT)
- IF XMABORT
- QUIT
- +3 DO CRE8XMZ^XMXSEND(XMSUBJ,.XMPXMZ,1)
- IF XMPXMZ<1
- SET XMABORT=1
- QUIT
- +4 DO INIT^XMXADDR
- +5 DO TOWHOM^XMJMT(XMDUZ,"Send",.XMINSTR,"",.XMABORT)
- +6 IF XMABORT
- DO KILLMSG^XMXUTIL(XMPXMZ)
- QUIT
- +7 WRITE !,"Building PackMan backup message with subject ",XMSUBJ,!!
- +8 SET XMDT=$EXTRACT($$NOW^XLFDT_"0000",1,12)
- +9 SET XMREC="PACKMAN BACKUP Created on "_$$DOW^XLFDT(XMDT)_", "_$$FMTE^XLFDT($PIECE(XMDT,".",1),"2Z")_" at "_$EXTRACT(XMDT,9,10)_":"_$EXTRACT(XMDT,11,12)_" "
- +10 IF $DATA(DUZ)
- IF $DATA(^VA(200,DUZ,0))
- SET XMREC=XMREC_"by "_$$NAME^XMXUTIL(DUZ)_" "
- +11 IF $DATA(^XMB("NETNAME"))
- SET XMREC=XMREC_"at "_$PIECE(^("NETNAME"),U)_" "
- +12 SET ^XMB(3.9,XMPXMZ,2,0)=""
- +13 SET ^XMB(3.9,XMPXMZ,2,1,0)="$TXT "_XMREC
- +14 QUIT