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

XTVSLPD2.m

Go to the documentation of this file.
  1. XTVSLPD2 ;ALBANY FO/GTS - VistA Package Sizing Manager - Caption display APIs; 14-DEC-2018
  1. ;;7.3;TOOLKIT;**143,152**;Apr 25, 1995;Build 3
  1. ;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ;APIs 2
  1. PRIMPFX(XTA,XTB,XTJUMPIN) ; Enter/Edit Primary Prefix
  1. IF $G(XTJUMPIN) NEW DIR,X,Y,DUOUT,DIROUT,DTOUT,DIRUT
  1. NEW ADDPKG
  1. ;Package Added Indicator = 1 when Primary Primary Prefix XTVS-PARAM-CAP ^TMP global node is Null
  1. SET ADDPKG=((^TMP("XTVS-PARAM-CAP",$J,PKGNME,DATANUM,"Primary Prefix")=""))
  1. SET DIR("A")=XTA
  1. SET:XTB]"" DIR("B")=XTB
  1. SET DIR("?",1)="Enter Package Prefix from 2 to 4 characters."
  1. SET DIR("?",2)=" (1 upper case letter followed by 1 - 3 upper case letters or numbers.)"
  1. SET DIR("?",3)=" "
  1. SET DIR("?",4)="Prefixes are used to identify Routines, Options, Protocols, etc. for the"
  1. SET DIR("?")=" VistA Package Size report."
  1. SET DIR(0)="FA^2:4^K:$L(X)>4!(X'?1U1.3NU) X"
  1. DO ^DIR
  1. IF ('$D(DTOUT)&('$D(DUOUT))) DO
  1. . IF ($D(DIRUT)) DO UPDTNODE(DIRUT,EDITARY,DATANUM,DATANAME,X)
  1. . IF '$D(DIRUT),(@EDITARY@(DATANUM,DATANAME)'=X) SET @EDITARY@(DATANUM,DATANAME)=Y
  1. . KILL DIRUT
  1. IF ($D(DTOUT)!$D(DUOUT)!$D(DIROUT))&((ADDPKG)&(X="^")) DO
  1. . KILL ^TMP("XTVS-PARAM-CAP",$J,PKGNME)
  1. . DO HDR^XTVSLPDC,INIT^XTVSLPDC
  1. . SET DATANUM=999 ;Do not prompt other fields
  1. IF $D(DUOUT),(X["^"),($L(X)>1) DO
  1. . IF ADDPKG DO
  1. .. DO JUSTPAWS^XTVSLAPI(" Data Entry '^' JUMP not allowed before Primary Prefix is defined.")
  1. .. W !
  1. .. SET DATANUM=1
  1. .. KILL DUOUT
  1. . IF 'ADDPKG DO JUMP(X,DATANUM) SET DATANUM=DATANUM-1
  1. QUIT
  1. ;
  1. HILOFLE(XTA,XTB,XTJUMPIN) ; Enter/Edit High or Low File Number
  1. IF $G(XTJUMPIN) NEW DIR,X,Y,DUOUT,DIROUT,DTOUT,DIRUT
  1. SET DIR("A")=XTA
  1. SET:XTB]"" DIR("B")=XTB
  1. SET DIR("?",1)=" Enter File Number 0 - 999999999, decimals are allowed."
  1. SET DIR("?",2)=" "
  1. SET DIR("?",3)=" When File Ranges are undefined and *Lowest File# & *Highest File# are"
  1. SET DIR("?",4)=" defined, *Lowest File# - *Highest File# range is used to identify files"
  1. SET DIR("?")=" assigned to the package for the VistA Package Size report."
  1. SET DIR(0)="NOA^0:999999999:6"
  1. DO ^DIR
  1. IF ('$D(DTOUT)&('$D(DUOUT))) DO
  1. . IF ($D(DIRUT)) DO UPDTNODE(DIRUT,EDITARY,DATANUM,DATANAME,X)
  1. . IF '$D(DIRUT),(@EDITARY@(DATANUM,DATANAME)'=X) SET @EDITARY@(DATANUM,DATANAME)=Y
  1. . KILL DIRUT
  1. IF $D(DUOUT),(X["^") DO JUMP(X,DATANUM) SET DATANUM=DATANUM-1
  1. QUIT
  1. ;
  1. EXADPFX(XTA,XTB,XTJUMPIN) ; Enter/Edit Excepted or Additional Prefixes
  1. NEW LISTDATA,PPRMT
  1. IF $G(XTJUMPIN) NEW DIR,X,Y,DUOUT,DIROUT,DTOUT,DIRUT
  1. SET DIR("A")=XTA
  1. SET:XTB]"" DIR("B")=XTB
  1. SET GETOUT=0
  1. FOR QUIT:GETOUT DO ;Edit Prefix List Loop
  1. . SET LISTDATA=@EDITARY@(DATANUM,DATANAME)
  1. . DO SPLITOUT(DATANAME,LISTDATA) ;Display Listed data to screen for user
  1. . SET PPRMT="Enter "_$S(DATANUM=5:"Additional",1:"Excepted")_" Prefix: "
  1. . SET DIR("A")=PPRMT ;RESET DIR("A") default prompt
  1. . KILL DIR("B") ;No default, select from list
  1. . SET DIR("?",1)="Enter a new Prefix or one from list. [Note: Entry is case sensitive.]"
  1. . SET DIR("?",2)="Order of Prefixes listed is not significant."
  1. . SET DIR("?",3)=" "
  1. . SET DIR("?",4)="Additional and Excepted Prefixes are used to identify Routines, Options,"
  1. . SET DIR("?",5)=" Protocols, etc. for the VistA Package Size reporting tool. Additional"
  1. . SET DIR("?",6)=" Prefixes include components [that begin with the prefix] in the tally"
  1. . SET DIR("?",7)=" totals for the component. Excepted Prefixes are refinements to the"
  1. . SET DIR("?",8)=" Primary and Additional Prefixes to exclude subsets of component names"
  1. . SET DIR("?")=" [that begin with the Excepted Prefixes] from the tally totals."
  1. . SET DIR(0)="FAO^2:6^K:(X'?1U1.5NU) X"
  1. . DO ^DIR
  1. . IF (Y=-1)!(Y="")!(Y="@")!($D(DTOUT))!($D(DUOUT)) SET GETOUT=1
  1. . SET UPDATLST=0
  1. . IF 'GETOUT DO EDITPRFX(Y,.LISTDATA,.UPDATLST)
  1. . IF GETOUT,$D(DUOUT),(X["^") DO JUMP(X,DATANUM) SET DATANUM=DATANUM-1
  1. . IF UPDATLST SET @EDITARY@(DATANUM,DATANAME)=LISTDATA
  1. QUIT
  1. ;
  1. EDITPRFX(DATELEMT,LISTDATA,UPDATLST) ; Update Prefix list
  1. NEW DIR,DIRUT,DTOUT,DUOUT,X,Y,EDTELEMT,PCE
  1. SET PCE=0
  1. IF (LISTDATA["|"_DATELEMT_"|")!($P(LISTDATA,"|")=DATELEMT) SET PCE=$$PCEPOS(LISTDATA,DATELEMT)
  1. SET DIR("A")=" Prefix: "
  1. SET DIR("B")=DATELEMT
  1. SET DIR("?")=" Enter/Edit a Prefix."
  1. SET DIR(0)="FAO^2:6^K:(X'?1U1.5NU) X"
  1. DO ^DIR
  1. IF '$D(DTOUT)&'$D(DUOUT)&'$D(DIROUT) DO LSTEDT(X,PCE,DATELEMT,.LISTDATA,.UPDATLST)
  1. QUIT
  1. ;
  1. LSTEDT(EDTELEMT,PCE,DATELEMT,LISTDATA,UPDATLST) ;Edit List dialog
  1. IF (PCE>0),(EDTELEMT'="@") SET $P(LISTDATA,"|",PCE)=EDTELEMT SET UPDATLST=1 ;EDIT ENTRY
  1. IF (PCE>0),(EDTELEMT="@") DO
  1. . IF +$$YNCHK^XTVSLAPI("DELETE ENTRY") SET LISTDATA=$P(LISTDATA,DATELEMT_"|",1)_$P(LISTDATA,DATELEMT_"|",2) SET UPDATLST=1
  1. IF PCE'>0 DO
  1. . IF EDTELEMT="@" W !,"?? ...Element not in list, cannot delete!" SET EDTELEMT=DATELEMT
  1. . IF +$$YNCHK^XTVSLAPI("ADD ENTRY") SET LISTDATA=LISTDATA_EDTELEMT_"|" SET UPDATLST=1
  1. QUIT
  1. ;
  1. FLENUM(XTA,XTB,XTJUMPIN) ; Enter/Edit File number
  1. NEW LISTDATA
  1. IF $G(XTJUMPIN) NEW DIR,X,Y,DUOUT,DIROUT,DTOUT,DIRUT
  1. SET DIR("A")=XTA
  1. SET:XTB]"" DIR("B")=XTB
  1. SET GETOUT=0
  1. FOR QUIT:GETOUT DO ;Edit Prefix List Loop
  1. . SET LISTDATA=@EDITARY@(DATANUM,DATANAME)
  1. . DO SPLITOUT(DATANAME,LISTDATA) ;Display Listed data to screen for user
  1. . SET DIR("A")="Enter File Number: " ;RESET DIR("A") default prompt
  1. . KILL DIR("B") ;No default, select from list
  1. . SET DIR("?",1)="Enter a new File Number or one from the list."
  1. . SET DIR("?",2)="New file numbers only between 1.9999 and 99999999.999999"
  1. . SET DIR("?",3)="Order of File Numbers listed is not significant."
  1. . SET DIR("?",4)=" "
  1. . SET DIR("?",5)="When File Ranges and *Lowest File# & *Highest File# are undefined and"
  1. . SET DIR("?",6)=" File Numbers exist, File Numbers are used to identify files assigned"
  1. . SET DIR("?")=" to the package for the VistA Package Size report."
  1. . SET DIR(0)="NAO^1.9999:99999999.999999:6"
  1. . DO ^DIR
  1. . IF (Y=-1)!(Y="")!(Y="@")!($D(DTOUT))!($D(DUOUT)) SET GETOUT=1
  1. . SET UPDATLST=0
  1. . IF 'GETOUT DO EDITFNUM(Y,.LISTDATA,.UPDATLST)
  1. . IF GETOUT,$D(DUOUT),(X["^") DO JUMP(X,DATANUM) SET DATANUM=DATANUM-1
  1. . IF UPDATLST SET @EDITARY@(DATANUM,DATANAME)=LISTDATA
  1. QUIT
  1. ;
  1. EDITFNUM(DATELEMT,LISTDATA,UPDATLST) ; Update File list
  1. NEW DIR,DIRUT,DTOUT,DUOUT,EDTELEMT,PCE
  1. SET PCE=0
  1. IF (LISTDATA["|"_DATELEMT_"|")!($P(LISTDATA,"|")=DATELEMT) SET PCE=$$PCEPOS(LISTDATA,DATELEMT)
  1. SET DIR("A")=" File Number: "
  1. SET DIR("B")=DATELEMT
  1. SET DIR("?")=" Enter/Edit a File Number."
  1. SET DIR(0)="NAO^1.9999:99999999.999999:6"
  1. DO ^DIR
  1. IF '$D(DTOUT)&'$D(DUOUT)&'$D(DIROUT) DO LSTEDT(X,PCE,DATELEMT,.LISTDATA,.UPDATLST)
  1. QUIT
  1. ;
  1. FLERNG(XTA,XTB,XTJUMPIN) ; Enter/Edit File Range
  1. NEW LISTDATA
  1. IF $G(XTJUMPIN) NEW DIR,X,Y,DUOUT,DIROUT,DTOUT,DIRUT
  1. SET DIR("A")=XTA
  1. SET:XTB]"" DIR("B")=XTB
  1. SET GETOUT=0
  1. FOR QUIT:GETOUT DO ;Edit Prefix List Loop
  1. . SET LISTDATA=@EDITARY@(DATANUM,DATANAME)
  1. . DO SPLITOUT(DATANAME,LISTDATA) ;Display Listed data to screen for user
  1. . SET DIR("A")="Enter File Number Range: " ;RESET DIR("A") default prompt
  1. . KILL DIR("B") ;No default, select from list
  1. . SET DIR("?",1)="Enter a new File Number Range or one from the list."
  1. . SET DIR("?",2)="New file number ranges only between 1.9999 and 99999999.999999"
  1. . SET DIR("?",3)="Order of File Ranges listed is not significant."
  1. . SET DIR("?",4)="Example of a file range would be 500-501.9 with no spaces."
  1. . SET DIR("?",5)=" "
  1. . SET DIR("?",6)="If File Ranges are defined, they are used to identify files assigned to"
  1. . SET DIR("?",7)=" the package whether or not *Lowest File# & *Highest File# or File"
  1. . SET DIR("?")=" Numbers are defined."
  1. . SET DIR(0)="FAO^3:31^K:$$BADRNG^XTVSLPD1(X) X"
  1. . DO ^DIR
  1. . IF (Y=-1)!(Y="")!(Y="@")!($D(DTOUT))!($D(DUOUT)) SET GETOUT=1
  1. . SET UPDATLST=0
  1. . IF 'GETOUT DO EDITFRNG(Y,.LISTDATA,.UPDATLST)
  1. . IF GETOUT,$D(DUOUT),(X["^") DO JUMP(X,DATANUM) SET DATANUM=DATANUM-1
  1. . IF UPDATLST SET @EDITARY@(DATANUM,DATANAME)=LISTDATA
  1. QUIT
  1. ;
  1. EDITFRNG(DATELEMT,LISTDATA,UPDATLST) ; Update File Range
  1. NEW DIR,DIRUT,DTOUT,DUOUT,EDTELEMT,PCE
  1. SET PCE=0
  1. IF (LISTDATA["|"_DATELEMT_"|")!($P(LISTDATA,"|")=DATELEMT) SET PCE=$$PCEPOS(LISTDATA,DATELEMT)
  1. SET DIR("A")=" File Number Range: "
  1. SET DIR("B")=DATELEMT
  1. SET DIR("?",1)=" Enter a new File Number Range or one from the list."
  1. SET DIR("?")="New file number ranges only between 1.9999 and 99999999.999999"
  1. SET DIR(0)="FAO^3:31^K:$$BADRNG^XTVSLPD1(X) X"
  1. DO ^DIR
  1. IF '$D(DTOUT)&'$D(DUOUT)&'$D(DIROUT) DO LSTEDT(X,PCE,DATELEMT,.LISTDATA,.UPDATLST)
  1. QUIT
  1. ;
  1. PRNTPKG(XTA,XTB,XTJUMPIN) ; Enter/edit Parent Package
  1. IF $G(XTJUMPIN) NEW DIR,X,Y,DUOUT,DIROUT,DTOUT,DIRUT
  1. ;
  1. NEW ITEMNUM,SELARY
  1. SET ITEMNUM=$$SETSELAY^XTVSLPDC(.SELARY)
  1. ;
  1. SET DIR("A")=XTA
  1. SET:XTB]"" DIR("B")=XTB
  1. SET DIR("A",1)=" "
  1. SET DIR("PRE")="D PRECHK^XTVSLPD2(.X,.LASTSPKG,.SELARY,.ITEMNUM)"
  1. SET DIR("?")="^DO PKGHLP^XTVSLPD2(ITEMNUM)"
  1. SET DIR("??")="^DO LISTOUT^XTVSLAPI(.SELARY)"
  1. SET DIR(0)="FAOr^1:50^K:((X'?.ANP)&(X'?1.4N)) X"
  1. DO ^DIR
  1. ;
  1. IF ($D(X))&('$D(DTOUT)&('$D(DUOUT))) DO
  1. . IF ($D(DIRUT)) DO UPDTNODE(DIRUT,EDITARY,DATANUM,DATANAME,X)
  1. . IF '$D(DIRUT),(@EDITARY@(DATANUM,DATANAME)'=X) SET @EDITARY@(DATANUM,DATANAME)=X
  1. IF $D(DUOUT),($G(X)["^") DO JUMP(X,DATANUM) SET DATANUM=DATANUM-1
  1. QUIT
  1. ;
  1. JUMP(XVAL,XTOLDNUM) ; Jump to a data element during edit
  1. NEW DTELMT,CT,SUBRTN,XTDONE,DATANAME,DIR,DATANUM,XTFOUND
  1. SET (XTFOUND,XTDONE)=0
  1. IF (XVAL?1"^"0.1"*"1.A0.1" "1.A0.1"#"),(XVAL'="^") DO
  1. . SET XVAL=$$UP^XLFSTR($P(XVAL,"^",2))
  1. . IF (XTOLDNUM'=7),(XTOLDNUM'=8),($$CKMATCH(XVAL,"FILE ")) S DTELMT=$$FLESEL() DO:DTELMT]"" JUMPEXC SET XTDONE=1
  1. . FOR CT=2:1 SET DTELMT=$TEXT(DATANAME+CT) QUIT:$P(DTELMT," ;;",2)="QUIT" QUIT:XTDONE DO
  1. .. IF ($P($P(DTELMT," ;;",2),"^")[XVAL),($$CKMATCH(XVAL,$P($P(DTELMT," ;;",2),"^"))),($P($P(DTELMT," ;;",2),"^",2)'=XTOLDNUM) DO
  1. ... DO JUMPEXC
  1. ... SET XTDONE=1
  1. . IF 'XTFOUND W " ??" KILL DUOUT,X
  1. . IF XTFOUND W !," Return to "_$P($P($TEXT(DATANAME+XTOLDNUM)," ;;",2),"^",1)_"..."
  1. QUIT
  1. ;
  1. JUMPEXC ;Jump to selected field [from JUMP api]
  1. SET XTFOUND=1
  1. SET DATANUM=$P($P(DTELMT," ;;",2),"^",2)
  1. SET DATANAME=$O(@EDITARY@(DATANUM,""))
  1. SET DIR("A")=DATANAME_": " ;Set DIR("A") prompt
  1. SET DIR("B")=$G(@EDITARY@(DATANUM,DATANAME)) ;Set Prompt for DIR read
  1. DO @$P($P(DTELMT," ;;",2),"^",3)
  1. KILL DUOUT
  1. QUIT
  1. ;
  1. CKMATCH(XTIN,XTDATNM) ; Check for sub-string match to data element name
  1. NEW RESULT
  1. SET RESULT=(XTIN=$E(XTDATNM,1,$L(XTIN)))
  1. QUIT RESULT
  1. ;
  1. FLESEL() ; Select FILE data element for JUMP
  1. NEW RESULT,DIR,X,Y,DUOUT,DIROUT,DTOUT,DIRUT
  1. SET RESULT=""
  1. SET DIR("A")=" Data Element Number: "
  1. SET DIR("?")=" Enter number 1 or 2."
  1. SET DIR("A",1)=" "
  1. SET DIR("A",2)=" Select Data Element:"
  1. SET DIR("A",3)=" 1) File Numbers"
  1. SET DIR("A",4)=" 2) File Ranges"
  1. ;SET DIR("A",5)=" "
  1. SET DIR(0)="NA^1:2"
  1. DO ^DIR
  1. IF '$D(DIRUT) SET RESULT=$TEXT(DATANAME+(6+Y))
  1. QUIT RESULT
  1. ;
  1. UPDTNODE(UPDIRUT,EDITARY,DATANUM,DATANAME,UPDX) ;Update ^TMP("XTVS-PARAM-CAP") array node with edits
  1. IF ('$D(UPDIRUT)) SET @EDITARY@(DATANUM,DATANAME)=UPDX
  1. IF $D(UPDIRUT) DO
  1. . IF (UPDX="@"),(@EDITARY@(DATANUM,DATANAME)'="") DO
  1. .. IF +$$YNCHK^XTVSLAPI("DELETE ENTRY") SET @EDITARY@(DATANUM,DATANAME)=""
  1. . IF (UPDX'="@"),(@EDITARY@(DATANUM,DATANAME)'=UPDX) SET @EDITARY@(DATANUM,DATANAME)=UPDX
  1. QUIT
  1. ;
  1. SPLITOUT(DATANAME,LISTDATA) ; -- Split list data to separate lines as needed and output
  1. ; DATANAME - Data element name
  1. ; LISTDATA - Data element list
  1. ;
  1. NEW LINE,PCENUM,LISTPCE,NXSTPCE
  1. WRITE !!!,DATANAME_":"
  1. IF LISTDATA']"" W !,"{no data list}"
  1. IF LISTDATA]"" DO
  1. . IF $L(LISTDATA)'>79 W !,LISTDATA
  1. . IF $L(LISTDATA)>79 DO
  1. .. SET LINE=""
  1. .. SET NXSTPCE=1
  1. .. FOR PCENUM=1:1 SET LISTPCE=$P(LISTDATA,"|",PCENUM) Q:LISTPCE="" DO
  1. ... IF $L($P(LISTDATA,"|",NXSTPCE,PCENUM))>79 W !,$P(LISTDATA,"|",NXSTPCE,PCENUM-1) SET NXSTPCE=PCENUM
  1. .. W !,$P(LISTDATA,"|",NXSTPCE,999)
  1. WRITE !
  1. QUIT
  1. ;
  1. PCEPOS(LISTDATA,DATELEMT) ; Return the piece position number of DATELEMT in LISTDATA
  1. NEW PCE,DELIMPOS,ITEM
  1. FOR PCE=1:1 SET ITEM=$P(LISTDATA,"|",PCE) Q:ITEM=DATELEMT IF ITEM="" SET PCE=0 QUIT
  1. QUIT PCE
  1. ;
  1. PRECHK(X,LASTSPKG,SELARY,ITEMNUM) ; PRNTPKG X value DIR("PRE") pre-check
  1. IF (X=" "),($G(LASTSPKG)]"") SET X=LASTSPKG W " ",X
  1. IF (X'="@"),(X'["^"),($E(X,1)'["?") DO CHKX^XTVSLPD2(.X,.SELARY,.ITEMNUM)
  1. QUIT
  1. ;
  1. CHKX(X,SELARY,ITEMNUM) ;Check X for Package [called by PRECHK via DIR("PRE") in PRNTPKG]
  1. IF X'?.N DO
  1. . NEW PARAMSTR
  1. . SET PARAMSTR("ADDITM")=0 ;No adding items
  1. . SET PARAMSTR("XTUPCASE")=0 ; Case matters
  1. . SET PARAMSTR("PATRN")=".ANP"
  1. . SET PARAMSTR("MINLNG")=4
  1. . SET PARAMSTR("MAXLNG")=50
  1. . SET SELARY=""
  1. . ;
  1. . SET PARAMSTR("ITEMNUM")=ITEMNUM
  1. . DO SELLIST^XTVSLPR2(.SELARY,.ITEMNUM,.X,.PARAMSTR)
  1. ;
  1. IF $D(X),(X?.N),(X>ITEMNUM) KILL X
  1. IF $D(X),(+$G(X)>0) SET (LASTSPKG,X)=SELARY(X) W " ",X
  1. ;
  1. QUIT
  1. ;
  1. PKGHLP(ITEMUM) ; Parent Package selection help
  1. WRITE !,"Enter the name or number (1-"_ITEMNUM_") of the desired Parent Package."
  1. WRITE !," Package Name is case sensitive."
  1. WRITE !," Enter '??' for a numbered list of items OR '^' to exit.",!
  1. WRITE !,"Parent Package indicates an association with a package that may include"
  1. WRITE !," component intersections causing duplicate counting of Routines, Options,"
  1. WRITE !," Protocols, Files, etc. by the VistA Package Size report. For the VistA"
  1. WRITE !," Package Size Analysis Management tools, it is informational."
  1. WRITE !," However for VistA development management teams, it can mean more.",!
  1. QUIT
  1. ;
  1. DATANAME ; Package Parameter data element names
  1. ;;PACKAGE NAME^1^PKGNME(DIR("A"),DIR("B"),1);;<place holder if Package name becomes editable>
  1. ;;PRIMARY PREFIX^2^PRIMPFX(DIR("A"),DIR("B"),1)
  1. ;;*LOWEST FILE#^3^HILOFLE(DIR("A"),DIR("B"),1)
  1. ;;*HIGHEST FILE#^4^HILOFLE(DIR("A"),DIR("B"),1)
  1. ;;ADDITIONAL PREFIXES^5^EXADPFX(DIR("A"),DIR("B"),1)
  1. ;;EXCEPTED PREFIXES^6^EXADPFX(DIR("A"),DIR("B"),1)
  1. ;;FILE NUMBERS^7^FLENUM(DIR("A"),DIR("B"),1)
  1. ;;FILE RANGES^8^FLERNG(DIR("A"),DIR("B"),1)
  1. ;;PARENT PACKAGE^9^PRNTPKG(DIR("A"),DIR("B"),1)
  1. ;;QUIT