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

BGULIST.m

Go to the documentation of this file.
BGULIST ; IHS/OIT/MJL - GENERAL FILE LISTER ;
 ;;1.5;BGU;;MAY 26, 2005
 ;
EN(BGUARRAY,BGUFILE,BGUIEN,BGUMORE,BGUCRFS,BGUMAX,BGUBEGIN,BGUEND,BGUVLST,BGUDIR,BGUSCR,BGUID,BGUCNDS) ;PEP FROM REMOTE PROCEDURE BGU GENLIST
 ;;1.102;BGU;;JUL 23, 2001
 ;
 ; BGUARRAY - The array where the data is returned - ^TMP(I/P address
 ;          - of the client)
 ; BGUFILE - Primary file providing the data e.g. 2 for ^DPT
 ;         - can be the file name or number e.g. VA PATIENT or 2
 ; BGUIEN - Internal Entry Number - If this is set fields specific only
 ;          to this record are returned.
 ;          If it is null then program is in list mode.
 ; BGUMORE - Flag is set on (=1) if you want the program to start from
 ;           where it left off on the previous call.  If this flag
 ;           isn't set then the program will start at the beginning
 ;           determined by the value of BGUBEGIN.
 ; BGUCRFS - The cross-reference that is used to access the main file
 ;           (or Lookup routine i.e. SC:TAG|ROUTINE)
 ; BGUMAX - The number of records to return on a call (default = 25)
 ; BGUBEGIN - The starting position in the cross-reference file if one
 ;            is specified, otherwise the starting point in the main
 ;            file.  This parameter is only used when in list mode.
 ; BGUEND - The opposite of BGUBEGIN.
 ;          (BGUBEGIN and BGUEND are used inclusively)
 ; BGUVLST - The variable list - a list of fileman field numbers
 ;         - separated by commas.  If a field is from the primary file
 ;           just the field number is entered.  If a field was returned
 ;           by a lookup into another file then the field number is
 ;           prefixed with the file number and a semicolan, e.g. 60:.01
 ; BGUDIR - Direction the program is traversing through the file F for
 ;          forward and B for backward (default = F)
 ; BGUSCR - Mumps executable code for screening valid data.  If a
 ;          screen is defined only data that passes the screen is
 ;          returned.
 ; BGUID - Identification parameter - the I/P address plus time
 ;         including seconds
 ; BGUCNDS - English like condition for screening data eg.:
 ;         SEX .EQ. "M" AND AGE > 40
 ;
CTL ;
 S XWBWRAP=1,BGUID=$G(BGUID,$J) S:BGUID="" BGUID=$J ;S BGUARRAY="^TMP(""BGULIST"","_$S(BGUID=+BGUID:BGUID,1:""""_BGUID_"""")_")"
 S BGUARRAY=$NA(@"^TMP(""BGULIST"",BGUID)")
 D
 .I $D(^TMP("BGUSAVE",BGUID)) D RESTORE^BGULIST2 Q
 .K BGULAST S BGUSTART=1
 I 'BGUFILE,BGUFILE'="" S BGUFILE=$$GETFID(BGUFILE) I BGUFILE="" S BGUERMSG="Invalid File Requested!" D ERROR,KILL Q
 D KILL:$G(BGULFILE)'=BGUFILE,KILL1,INIT^BGULIST2
 I BGUERROR D ERROR,KILL Q
 D
 .I BGULAST="",BGULDIR=BGUDIR Q:BGUMORE  Q:BGUDIR="B"
 .I BGULAST="UNDEF" Q:BGUDIR="B"  S BGULAST=""
 .I BGUIEN=""!(BGUCRFS'="") D  Q
 ..I '$D(BGUDRIVR) D LIST Q
 ..S BGUGBL=BGUMGBL,BGULEV=1,BGUCRFS="",BGUMAX=9999999,(BGUCRFS,BGUBEGIN,BGUEND)="",BGUDIR1=1,BGUDIR="F" D @BGUDRIVR
 .D
 ..I 'BGUSTART,$G(BGULIEN)="" S BGULFRST=BGUFIRST,BGULLAST=BGULAST D FIELDS S BGUFIRST=BGULFRST,BGULAST=BGULLAST Q
 ..D ^BGULIST1
 I BGULAST="",'BGUICNT S BGUFIRST="",BGUFIEN=""
 S BGULDIR=BGUDIR,BGULFILE=BGUFILE,BGULVLST=BGUVLST,BGULCRFS=BGUCRFS,BGULIEN=BGUIEN,BGULCNDS=BGUCNDS
 D:BGUICNT
 .S BGUDAT=BGUICNT
 .I BGUIEN="",BGULAST'="",'$$END($$DOLRO(BGUSTLEV,BGUDIR1)) S BGUDAT=BGUDAT_U_1
 .D SETDATA(BGUDAT,0,0)
 D SAVE^BGULIST2,KILL
 Q
 ;
 ; Returns a list of records - invoked only if BGUIEN is null
LIST ;
 D
 .I BGUSTART S BGUSTLEV=1,BGUCHNG=1 I '$D(BGUDRIVR) S:BGUCRFS'="" BGUSTLEV=2,BGUSUB(1)=BGUCRFS1,BGUGBL=BGUCGBL S BGUSUB(BGUSTLEV)=$S(BGUDIR1=1:$$BEGIN(BGUBEGIN),BGULDIR'=BGUDIR:BGUFIRST,1:BGUEND),BGUSTART=0,(BGUFIEN,BGULSIEN)="" Q
 .S BGUSUB(BGUSTLEV)=$S(BGULDIR=BGUDIR:BGULAST,1:BGUFIRST) I BGUCHNG,BGULDIR'=BGUDIR,BGUFIRST'="",BGUCRFS'="",BGUVLST'="" S BGUCHNG=0
 S (BGUFSET,BGULICNT)=0 F  D  Q:BGUSUB(BGUSTLEV)=""!(BGUICNT#BGUMAX=0&BGUICNT)
 .I BGUICNT,'BGUDSET S:BGULICNT<BGUICNT BGUICNT=BGUICNT-1
 .I BGUICNT,'BGUFSET S BGUFIRST=BGUSUB(BGUSTLEV),BGUFSET=1
 .S BGUDSET=0,BGULEV=BGUSTLEV,BGULICNT=BGUICNT S:BGUCHNG BGUSUB(BGUSTLEV)=$$DOLRO(BGUSTLEV,BGUDIR1) I BGUSUB(BGUSTLEV)="" S BGULAST="" Q
 .I $S(BGUDIR1=1:BGUEND'="",1:BGUBEGIN'=""),$$END(BGUSUB(BGUSTLEV)) S BGUSUB(BGUSTLEV)="",BGULAST="" Q
 .I BGUFMCK,$E(BGUSUB(BGUSTLEV),1,BGUFMCK)'=BGUBEGIN Q
 .I BGUVLST="" D  Q
 ..I BGUCRFS="" S BGUDAT=$$GETDATA(0) D  Q
 ...I BGUDCK#2 D COUNT,SETDATA($C(175)_BGUSUB(BGULEV)_$C(20)_"0"_$C(25)_BGUDAT,BGUICNT1,BGUCNT) Q
 ..S BGUTIEN=$O(@BGUGREF@("")),BGUDAT=$$GETDATA(BGUTIEN) I BGUDCK#2 D COUNT,SETDATA($C(175)_BGUTIEN_$C(20)_"0"_$C(25)_BGUDAT,BGUICNT1,BGUCNT) Q
 .D FIELDS
 S BGULAST=BGUSUB(BGUSTLEV)
 Q
 ;
FIELDS ;EP GENERAL CALL FROM BPC,BGU NAMESPACE
 S BGUPFILE=BGUGREF,BGUSLEV=BGULEV,BGUN=""
 M BGUSVSUB=BGUSUB
 D ^BGULIST1
 S BGUGREF=BGUPFILE,BGULEV=BGUSLEV
 K BGUPFILE,BGUSLEV,BGUSUB
 M BGUSUB=BGUSVSUB
 K BGUSVSUB
 Q
 ;
DOLRO(BGUX,BGUDIRX) ;INTERNAL EP
 S:BGULLEV'=BGUX BGUGREF=$$SETGREF(BGUGBL),BGULLEV=BGUX
 S BGUDIRX=$G(BGUDIRX,1),BGUY=$O(@BGUGREF,BGUDIRX)
 Q BGUY
 ;
SETGREF(BGUX) ;INTERNAL EP
 S BGUY=""
 F BGUN=1:1:BGULEV S:BGUN>1 BGUY=BGUY_"," S BGUY=BGUY_"BGUSUB("_BGUN_")"
 S BGUY=BGUX_BGUY_")"
 Q BGUY
 ;
GETDATA(BGUX) ;INTERNAL EP
 I $D(BGUX) S BGUDCK=$D(@BGUGREF@(BGUX)),BGUY=$G(^(BGUX)) Q BGUY
 S BGUDCK=$D(@BGUGREF),BGUY=$G(^(BGUSUB(BGULEV))) Q BGUY
 Q BGUY
 ;
SETDATA(BGUX,BGUXN,BGUXN1) ;INTERNAL EP
 S ^TMP("BGULIST",BGUID,BGUXN,BGUXN1)=BGUX
 Q
 ;
BEGIN(BGUX) ;INTERNAL EP
 Q:BGUX="" ""
 Q:BGUX=0 ""
 I BGUX,BGUX=+BGUX Q BGUX-1
 Q $E(BGUX,1,$L(BGUX)-1)_$C($A($E(BGUX,$L(BGUX)))-1)_"~"
 ;
END(BGUX) ;INTERNAL EP
 D
 .I BGUDIR1=1 D  Q
 ..I BGUEND="" S BGUY=BGUX="" Q
 ..I BGUX,BGUEND,BGUX=+BGUX,BGUEND=+BGUEND S BGUY=BGUX>BGUEND Q
 ..S BGUY=BGUX]]BGUEND
 .I BGUX="" S BGUY=1 Q
 .I BGUX,BGUBEGIN,BGUX=+BGUX,BGUBEGIN=+BGUBEGIN S BGUY=BGUX<BGUBEGIN Q
 .S BGUY=BGUBEGIN]]BGUX
 Q BGUY
 ;
 ; Input: FileMan name    Returns: FileMan file number
GETFID(BGUX) ;INTERNAL EP
 S:'BGUX BGUX=$O(^DIC("B",BGUX,"")) Q:BGUX="" ""
 I '$D(^DIC(BGUX)) Q ""
 Q BGUX
 ;
COUNT ;
 S BGUICNT=BGUICNT+1,BGUICNT1=BGUICNT,BGUCNT=1 S:BGUDIR1<0 BGUICNT1=BGUMAX+1-BGUICNT1
 Q
 ;
ERROR ;
 D SETDATA(-1,0,0),SETDATA(BGUERMSG,0,1)
 Q
 ;
KILL1 ;
 K BGUARSBS,BGUASBS,BGUCNT,BGUDAT,BGUDATP,BGUDCK,BGUDIR1,BGUDIRX,BGUDNODE,BGUDSET,BGUFILE1,BGUFN,BGUFN1,BGUFSET,BGUGLEV,BGUGNODE,BGUGOTD,BGUICNT,BGUICNT1,BGUIDX,BGULFRST,BGULICNT,BGULIEN,BGULLAST,BGULLEV,BGUN,BGUOFL
 K BGUOFN,BGUPFIL1,BGUPFILE,BGULKU,BGULKUA,BGUREF,BGUSBS,BGUSETD,BGUSLEV,BGUSLEV1,BGUTDLM,BGUTVSET,BGUV,BGUX,BGUX1,BGUXAR,BGUXFN1,BGUXLFID,BGUXN,BGUXN1,BGUXNE1,BGUXNE2,BGUXSBNS,BGUXSBS,BGUY,BGUYP
 Q
 ;
KILL ;
 K BGUDRIVR,BGUDRVRR,BGUARSBS,BGUASBS,BGUCGBL,BGUCGREF,BGUCHNG,BGUCNT,BGUCRFS1,BGUDAT,BGUDATP,BGUDCK,BGUDIR1,BGUDIRX,BGUDSET,BGUERMSG,BGUERROR,BGUFGBL,BGUFIEN,BGUFILE1,BGUFIRST,BGUFLDS,BGUFMCK,BGUFN,BGUFN1,BGUFSET,BGUGBL,BGUGNODE
 K BGUGOTD,BGUGREF,BGUICNT,BGUICNT1,BGUIDX,BGUIVS,BGULAST,BGULCNDS,BGULCRFS,BGULDIR,BGULEV,BGULFILE,BGULICNT,BGULIEN,BGULKU,BGULKUA,BGULLEV,BGULSIEN,BGULVLST,BGUMGBL,BGUN,BGUN1,BGUN2,BGUOFILE,BGUOFL,BGUOFN,BGUOLEV,BGUOVS
 K BGUPFIL1,BGUPFILE,BGUPTR,BGUSBS,BGUSETD,BGUSF,BGUSLEV,BGUSLEV1,BGUSTART,BGUSTLEV,BGUSUB,BGUSVSB1,BGUSVSUB,BGUTDLM,BGUTIEN,BGUTNODE,BGUTNOLV,BGUTVSET,BGUV,BGUX,BGUX1,BGUXAR,BGUXFN1,BGUXN,BGUXN1,BGUXSBS,BGUXX,BGUY,BGUYP
 K BGUYY
 D:$G(BGUCNDS)'="" KILL^BGUCND
 Q