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

AUPTFXS.m

Go to the documentation of this file.
%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