- %AUPTFXS ;BRJ/IHS OHPD STACK FILE/$O/DA VARIABLE TABLES [ 03/17/87 10:39 AM ]
- W !,*7,"%AUPTFXS cannot be run stand-alone. Check your documentation!"
- Q
- EN ;ENTRY FROM ^%AUPTFX DRIVER
- NEW AUPTPGM S AUPTPGM="<"_$T(+0)_">"
- D STACK,LOOPIT
- Q
- STACK ;STACK ALL FILES WITH "PT" NODES (POINTING OR POINTED TO)
- S AUPTI1=0,AUPTI2=1
- F L=0:0 S AUPTI1=$O(AUPTFSTK(AUPTI1)) Q:'+AUPTI1 S AUPTDDFL=AUPTFSTK(AUPTI1),AUPTPTFL="" F L=0:0 S AUPTPTFL=$O(^DD(AUPTDDFL,0,"PT",AUPTPTFL)) Q:'+AUPTPTFL D STACKIT
- Q
- STACKIT ;GET FIELD NUMBER FOR STACK
- S AUPTPTFD=""
- F L=0:0 S AUPTPTFD=$O(^DD(AUPTDDFL,0,"PT",AUPTPTFL,AUPTPTFD)) Q:'+AUPTPTFD S ^AUPTSTCK(AUPTPTFL,AUPTPTFD)="" I AUPTPTFD=.01 S AUPTI2=AUPTI2+1 S AUPTFSTK(AUPTI2)=AUPTPTFL
- Q
- LOOPIT ;LOOP THRU SUB-ROUTINES AND SWAP DATA VALUES
- ;LOOP THROUGH "PT" NODES OF SELECTED FILEMAN FILE
- S AUPTHIT=0,AUPTPFL=""
- F L=0:0 S AUPTSKIP=0,(AUPTPFL,AUPTPSFL)=$O(^AUPTSTCK(AUPTPFL)) Q:'+AUPTPFL S AUPTPFD="" F L=0:0 S (AUPTPFD,AUPTPSFD)=$O(^AUPTSTCK(AUPTPFL,AUPTPFD)) Q:'+AUPTPFD F AUPTLBL="DDCK","BLDDA","SETGLREF","SWAP" D @(AUPTLBL):'AUPTSKIP
- I 'AUPTHIT S AUPTEC=1 D ERR^AUPTFXT
- Q
- DDCK ;CHECK ^DD FOR EXISTANCE OF FILE/FIELD '0' NODE
- I $D(^DD(AUPTPFL,AUPTPFD,0)) S AUPTHIT=1 Q
- S AUPTEC=2 D ERR^AUPTFXT
- Q
- BLDDA ;LOOP UP ^DD TO BUILD 'DA' TABLE FROM FILE/SUBFILE INFO
- S (AUPTI,AUPTDIN)=0
- I AUPTPSFD=.01&($P(^DD(AUPTPSFL,AUPTPSFD,0),U,5)["DINUM") S AUPTDIN=1,AUPTDXGL=$P(^(0),U,3) I AUPTDXGL="" S AUPTEC=7 D ERR^AUPTFXT S AUPTSKIP=1 Q
- K AUPTDAL,DA
- D TBLDA
- Q:AUPTSKIP
- UPDD ;GO UP ^DD FOR ALL SUBFILES AND ADD TO 'DA' TABLE
- F L=0:0 Q:'$D(^DD(AUPTPSFL,0,"UP")) S AUPTPSFL=^("UP"),AUPTPSNM="",AUPTPSNM=$O(^("NM",AUPTPSNM)) D UPDDNMCK Q:AUPTSKIP S AUPTPSFD="",AUPTPSFD=$O(^DD(AUPTPSFL,"B",AUPTPSNM,AUPTPSFD)) D UPDDFDCK Q:AUPTSKIP D TBLDA Q:AUPTSKIP
- S AUPTDACT=AUPTI*(-1)
- S AUPTP=$P($P(AUPTDAL(-1),";",2),U,1)
- Q
- UPDDNMCK ;CHECK IF "NM" VALUE OR ^DD(file,0,"NM" node exists
- I AUPTPSNM="" S AUPTEC=3 D ERR^AUPTFXT
- Q
- UPDDFDCK ;CHECK IF "B" VALUE OR ^DD(file,"B",name,field node exists
- I AUPTPSFD="" S AUPTEC=4 D ERR^AUPTFXT Q
- I '$D(^DD(AUPTPSFL,AUPTPSFD,0)) S AUPTEC=2 D ERR^AUPTFXT Q
- Q
- TBLDACMT ;CHECK IF THIS IS A FIELD NODE FOR THIS FILE/FIELD
- ;BUILD TABLE WITH 'DA' SUBSCRIPT AND SUBFILE;PIECE VALUES..EXAMPLE:
- ; AUPTDAL(-2)="DA(1),11;0" SUBFILE WILL HAVE '0' FOR FIELD VALUE
- ; AUPTDAL(-1)="DA,11;3" (-1) ALWAYS BOTTOM OF TABLE
- ; THERE WILL BE AS MANY ENTRIES AS THERE ARE SUBFILES
- ; **NOTE** NEGATIVE SUBSCRIPTS - TABLE IS BUILT FROM BOTTOM TO TOP -
- ; THEREBY FACILITATING A TOP-DOWN $O LATER ON TO BUILD THE FILE'S
- ; GLOBAL NODE
- TBLDA ;
- I '$D(^DD(AUPTPSFL,0,"UP")) I '$D(^DIC(AUPTPSFL,0)) S AUPTEC=8 D ERR^AUPTFXT Q
- S AUPTI=AUPTI-1,AUPTDAL(AUPTI)=$S(AUPTI<(-1):"DA("_((AUPTI*-1)-1)_")",1:"DA"),AUPTDAL(AUPTI)=AUPTDAL(AUPTI)_U_$P(^DD(AUPTPSFL,AUPTPSFD,0),U,4)
- TBLDAFL ;ADD THE FILE NAME AND NUMBER TO THE 'DA' TABLE ENTRY
- S AUPTDAL(AUPTI)=AUPTDAL(AUPTI)_U_AUPTPSFL_U_$S('$D(^DD(AUPTPSFL,0,"UP")):$P(^DIC(AUPTPSFL,0),U,1),1:$P(^DD(AUPTPSFL,0),U,1))
- S:AUPTI=(-1) AUPTDAL(-1)=AUPTDAL(-1)_U_AUPTPSFD_U_$P(^DD(AUPTPSFL,AUPTPSFD,0),U,1)
- Q
- SETGLREF ;GET GLOBAL REFERENCE FROM ^DIC FOR THIS FILE OR SUBFILE
- I '$D(^DIC(AUPTPSFL,0,"GL")) S AUPTEC=6 D ERR^AUPTFXT Q
- S (AUPTORGG,AUPTPGL)=^("GL")
- S AUPTCOMA=1 S:AUPTORGG["," AUPTCOMA=0
- ;SET GLOBAL NODE SUBSCRIPTS FOR FILE TO BE PROCESSED
- K AUPTO S AUPTI=""
- F AUPTL=1:1:AUPTDACT S AUPTI=$O(AUPTDAL(AUPTI)),AUPTPGL=AUPTPGL_$P(AUPTDAL(AUPTI),U,1)_","_$P($P(AUPTDAL(AUPTI),";",1),U,2),AUPTPGL=$S(AUPTI<(-1):AUPTPGL_",",1:AUPTPGL_")") D BLDSERCH
- Q
- BLDSERCH ;BUILD SEARCH $O ARRAY USED TO POSITION DATA GLOBAL FOR FILE/SUBFILE
- S AUPTDA=$P(AUPTDAL(AUPTI),U,1)
- S AUPTO(AUPTL,0)="S "_AUPTDA_$S(AUPTL=AUPTDACT:"=0",1:"=""""")
- S AUPTO(AUPTL,1)=$S(AUPTL=1:"S "_AUPTDA_"=$O("_AUPTORGG_AUPTDA_"))",1:"S "_AUPTDA_"="_$P($P(AUPTO((AUPTL-1),1),"))",1),"=",2)_"),"_$P($P(AUPTDAL(AUPTI-1),";",1),U,2)_","_AUPTDA_"))")
- S AUPTO(AUPTL,1)=$S(AUPTI'=(-1):AUPTO(AUPTL,1)_" S AUPTI=$S(+"_AUPTDA_":AUPTI+1,1:AUPTI-1)",1:AUPTO(AUPTL,1)_" S:'+DA AUPTI=AUPTI-1")
- Q
- SWAP ;CALL ^%AUPTFXX to exchange data values
- D EN^AUPTFXX,GET^AUPTFXD:AUPTDIN&$D(^AUPTFXD(AUPTPSFL,AUPTPSFD))
- Q
- %AUPTFXS ;BRJ/IHS OHPD STACK FILE/$O/DA VARIABLE TABLES [ 03/17/87 10:39 AM ]
- +1 WRITE !,*7,"%AUPTFXS cannot be run stand-alone. Check your documentation!"
- +2 QUIT
- EN ;ENTRY FROM ^%AUPTFX DRIVER
- +1 NEW AUPTPGM
- SET AUPTPGM="<"_$TEXT(+0)_">"
- +2 DO STACK
- DO LOOPIT
- +3 QUIT
- STACK ;STACK ALL FILES WITH "PT" NODES (POINTING OR POINTED TO)
- +1 SET AUPTI1=0
- SET AUPTI2=1
- +2 FOR L=0:0
- SET AUPTI1=$ORDER(AUPTFSTK(AUPTI1))
- IF '+AUPTI1
- QUIT
- SET AUPTDDFL=AUPTFSTK(AUPTI1)
- SET AUPTPTFL=""
- FOR L=0:0
- SET AUPTPTFL=$ORDER(^DD(AUPTDDFL,0,"PT",AUPTPTFL))
- IF '+AUPTPTFL
- QUIT
- DO STACKIT
- +3 QUIT
- STACKIT ;GET FIELD NUMBER FOR STACK
- +1 SET AUPTPTFD=""
- +2 FOR L=0:0
- SET AUPTPTFD=$ORDER(^DD(AUPTDDFL,0,"PT",AUPTPTFL,AUPTPTFD))
- IF '+AUPTPTFD
- QUIT
- SET ^AUPTSTCK(AUPTPTFL,AUPTPTFD)=""
- IF AUPTPTFD=.01
- SET AUPTI2=AUPTI2+1
- SET AUPTFSTK(AUPTI2)=AUPTPTFL
- +3 QUIT
- LOOPIT ;LOOP THRU SUB-ROUTINES AND SWAP DATA VALUES
- +1 ;LOOP THROUGH "PT" NODES OF SELECTED FILEMAN FILE
- +2 SET AUPTHIT=0
- SET AUPTPFL=""
- +3 FOR L=0:0
- SET AUPTSKIP=0
- SET (AUPTPFL,AUPTPSFL)=$ORDER(^AUPTSTCK(AUPTPFL))
- IF '+AUPTPFL
- QUIT
- SET AUPTPFD=""
- FOR L=0:0
- SET (AUPTPFD,AUPTPSFD)=$ORDER(^AUPTSTCK(AUPTPFL,AUPTPFD))
- IF '+AUPTPFD
- QUIT
- FOR AUPTLBL="DDCK","BLDDA","SETGLREF","SWAP"
- IF 'AUPTSKIP
- DO @(AUPTLBL)
- +4 IF 'AUPTHIT
- SET AUPTEC=1
- DO ERR^AUPTFXT
- +5 QUIT
- DDCK ;CHECK ^DD FOR EXISTANCE OF FILE/FIELD '0' NODE
- +1 IF $DATA(^DD(AUPTPFL,AUPTPFD,0))
- SET AUPTHIT=1
- QUIT
- +2 SET AUPTEC=2
- DO ERR^AUPTFXT
- +3 QUIT
- BLDDA ;LOOP UP ^DD TO BUILD 'DA' TABLE FROM FILE/SUBFILE INFO
- +1 SET (AUPTI,AUPTDIN)=0
- +2 IF AUPTPSFD=.01&($PIECE(^DD(AUPTPSFL,AUPTPSFD,0),U,5)["DINUM")
- SET AUPTDIN=1
- SET AUPTDXGL=$PIECE(^(0),U,3)
- IF AUPTDXGL=""
- SET AUPTEC=7
- DO ERR^AUPTFXT
- SET AUPTSKIP=1
- QUIT
- +3 KILL AUPTDAL,DA
- +4 DO TBLDA
- +5 IF AUPTSKIP
- QUIT
- UPDD ;GO UP ^DD FOR ALL SUBFILES AND ADD TO 'DA' TABLE
- +1 FOR L=0:0
- IF '$DATA(^DD(AUPTPSFL,0,"UP"))
- QUIT
- SET AUPTPSFL=^("UP")
- SET AUPTPSNM=""
- SET AUPTPSNM=$ORDER(^("NM",AUPTPSNM))
- DO UPDDNMCK
- IF AUPTSKIP
- QUIT
- SET AUPTPSFD=""
- SET AUPTPSFD=$ORDER(^DD(AUPTPSFL,"B",AUPTPSNM,AUPTPSFD))
- DO UPDDFDCK
- IF AUPTSKIP
- QUIT
- DO TBLDA
- IF AUPTSKIP
- QUIT
- +2 SET AUPTDACT=AUPTI*(-1)
- +3 SET AUPTP=$PIECE($PIECE(AUPTDAL(-1),";",2),U,1)
- +4 QUIT
- UPDDNMCK ;CHECK IF "NM" VALUE OR ^DD(file,0,"NM" node exists
- +1 IF AUPTPSNM=""
- SET AUPTEC=3
- DO ERR^AUPTFXT
- +2 QUIT
- UPDDFDCK ;CHECK IF "B" VALUE OR ^DD(file,"B",name,field node exists
- +1 IF AUPTPSFD=""
- SET AUPTEC=4
- DO ERR^AUPTFXT
- QUIT
- +2 IF '$DATA(^DD(AUPTPSFL,AUPTPSFD,0))
- SET AUPTEC=2
- DO ERR^AUPTFXT
- QUIT
- +3 QUIT
- TBLDACMT ;CHECK IF THIS IS A FIELD NODE FOR THIS FILE/FIELD
- +1 ;BUILD TABLE WITH 'DA' SUBSCRIPT AND SUBFILE;PIECE VALUES..EXAMPLE:
- +2 ; AUPTDAL(-2)="DA(1),11;0" SUBFILE WILL HAVE '0' FOR FIELD VALUE
- +3 ; AUPTDAL(-1)="DA,11;3" (-1) ALWAYS BOTTOM OF TABLE
- +4 ; THERE WILL BE AS MANY ENTRIES AS THERE ARE SUBFILES
- +5 ; **NOTE** NEGATIVE SUBSCRIPTS - TABLE IS BUILT FROM BOTTOM TO TOP -
- +6 ; THEREBY FACILITATING A TOP-DOWN $O LATER ON TO BUILD THE FILE'S
- +7 ; GLOBAL NODE
- TBLDA ;
- +1 IF '$DATA(^DD(AUPTPSFL,0,"UP"))
- IF '$DATA(^DIC(AUPTPSFL,0))
- SET AUPTEC=8
- DO ERR^AUPTFXT
- QUIT
- +2 SET AUPTI=AUPTI-1
- SET AUPTDAL(AUPTI)=$SELECT(AUPTI<(-1):"DA("_((AUPTI*-1)-1)_")",1:"DA")
- SET AUPTDAL(AUPTI)=AUPTDAL(AUPTI)_U_$PIECE(^DD(AUPTPSFL,AUPTPSFD,0),U,4)
- TBLDAFL ;ADD THE FILE NAME AND NUMBER TO THE 'DA' TABLE ENTRY
- +1 SET AUPTDAL(AUPTI)=AUPTDAL(AUPTI)_U_AUPTPSFL_U_$SELECT('$DATA(^DD(AUPTPSFL,0,"UP")):$PIECE(^DIC(AUPTPSFL,0),U,1),1:$PIECE(^DD(AUPTPSFL,0),U,1))
- +2 IF AUPTI=(-1)
- SET AUPTDAL(-1)=AUPTDAL(-1)_U_AUPTPSFD_U_$PIECE(^DD(AUPTPSFL,AUPTPSFD,0),U,1)
- +3 QUIT
- SETGLREF ;GET GLOBAL REFERENCE FROM ^DIC FOR THIS FILE OR SUBFILE
- +1 IF '$DATA(^DIC(AUPTPSFL,0,"GL"))
- SET AUPTEC=6
- DO ERR^AUPTFXT
- QUIT
- +2 SET (AUPTORGG,AUPTPGL)=^("GL")
- +3 SET AUPTCOMA=1
- IF AUPTORGG[","
- SET AUPTCOMA=0
- +4 ;SET GLOBAL NODE SUBSCRIPTS FOR FILE TO BE PROCESSED
- +5 KILL AUPTO
- SET AUPTI=""
- +6 FOR AUPTL=1:1:AUPTDACT
- SET AUPTI=$ORDER(AUPTDAL(AUPTI))
- SET AUPTPGL=AUPTPGL_$PIECE(AUPTDAL(AUPTI),U,1)_","_$PIECE($PIECE(AUPTDAL(AUPTI),";",1),U,2)
- SET AUPTPGL=$SELECT(AUPTI<(-1):AUPTPGL_",",1:AUPTPGL_")")
- DO BLDSERCH
- +7 QUIT
- BLDSERCH ;BUILD SEARCH $O ARRAY USED TO POSITION DATA GLOBAL FOR FILE/SUBFILE
- +1 SET AUPTDA=$PIECE(AUPTDAL(AUPTI),U,1)
- +2 SET AUPTO(AUPTL,0)="S "_AUPTDA_$SELECT(AUPTL=AUPTDACT:"=0",1:"=""""")
- +3 SET AUPTO(AUPTL,1)=$SELECT(AUPTL=1:"S "_AUPTDA_"=$O("_AUPTORGG_AUPTDA_"))",1:"S "_AUPTDA_"="_$PIECE($PIECE(AUPTO((AUPTL-1),1),"))",1),"=",2)_"),"_$PIECE($PIECE(AUPTDAL(AUPTI-1),";",1),U,2)_","_AUPTDA_"))")
- +4 SET AUPTO(AUPTL,1)=$SELECT(AUPTI'=(-1):AUPTO(AUPTL,1)_" S AUPTI=$S(+"_AUPTDA_":AUPTI+1,1:AUPTI-1)",1:AUPTO(AUPTL,1)_" S:'+DA AUPTI=AUPTI-1")
- +5 QUIT
- SWAP ;CALL ^%AUPTFXX to exchange data values
- +1 DO EN^AUPTFXX
- IF AUPTDIN&$DATA(^AUPTFXD(AUPTPSFL,AUPTPSFD))
- DO GET^AUPTFXD
- +2 QUIT