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