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

ORAERPT.m

Go to the documentation of this file.
  1. ORAERPT ; SPFO/AJB - Alert Enhancements Reports ;Dec 18, 2019@08:09:39
  1. ;;3.0;ORDER ENTRY/RESULTS REPORTING;**518**;Dec 17, 1997;Build 11
  1. Q
  1. EN ; main entry point
  1. N DATA,DTRG,MENU,SETUP,TIME,TMP,TMP1,TOP10,TOTNTF,X,Y
  1. D PREP^XGF W IOCUON
  1. ; S DATA="DATA",TMP="TMP" ; use tmp global for safety
  1. S DATA=$NA(^TMP($J,"ORAERPT",$H)),TMP=$NA(^TMP($J,"ORAETMP",$H)),TMP1=$NA(^TMP($J,"ORMDIV",$H))
  1. EN1 ; entry point for re-entering a date range
  1. D ASKRNG I '+DTRG("Start")!('+DTRG("Stop")) W ! Q ; get date range
  1. W @IOF,!,"Gathering notification data..."
  1. S TIME("Start")=$$NOW^XLFDT
  1. S TOTNTF=0 D REPORT^ORALEAPI(.DATA,DTRG("Start"),DTRG("Stop"),"") ; get data for report
  1. S X=0 F S X=$O(@DATA@(X)) Q:'+X D
  1. . ; set data fields, use z to put blank entries at end of lists
  1. . N USR S USR=$P(@DATA@(X),U,2),USR=$S(USR="":"z<blank>",1:USR)
  1. . N TTL S TTL=$P(@DATA@(X),U,3),TTL=$S(TTL="":"z<blank>",1:TTL)
  1. . N SRV S SRV=$P(@DATA@(X),U,4),SRV=$S(SRV="":"z<blank>",1:SRV)
  1. . N DTE S DTE=$P(@DATA@(X),U,6),DTE=$S(DTE="":"z<date unknown>",1:DTE)
  1. . N NTF S NTF=$P(@DATA@(X),U,7),NTF=$S(NTF="":"z<blank>",1:NTF)
  1. . N DIV S DIV=$P(@DATA@(X),U,8),DIV=$S(DIV="":"z<blank>",1:DIV)
  1. . N LOC S LOC=$P(@DATA@(X),U,9),LOC=$S(LOC="":"z<blank>",1:LOC)
  1. . ; set ALL index
  1. . S @TMP@("ALL",USR,TTL,SRV,NTF,DIV,LOC)=$S($D(@TMP@("ALL",USR,TTL,SRV,NTF,DIV,LOC)):@TMP@("ALL",USR,TTL,SRV,NTF,DIV,LOC)+1,1:1)
  1. . ; total counts by type
  1. . S @TMP@("USR",USR)=$S($D(@TMP@("USR",USR)):@TMP@("USR",USR)+1,1:1)
  1. . S @TMP@("TTL",TTL)=$S($D(@TMP@("TTL",TTL)):@TMP@("TTL",TTL)+1,1:1)
  1. . S @TMP@("DTE",DTE)=$S($D(@TMP@("DTE",DTE)):@TMP@("DTE",DTE)+1,1:1)
  1. . S @TMP@("SRV",SRV)=$S($D(@TMP@("SRV",SRV)):@TMP@("SRV",SRV)+1,1:1)
  1. . S @TMP@("NTF",NTF)=$S($D(@TMP@("NTF",NTF)):@TMP@("NTF",NTF)+1,1:1)
  1. . S @TMP@("DIV",DIV)=$S($D(@TMP@("DIV",DIV)):@TMP@("DIV",DIV)+1,1:1)
  1. . S @TMP@("LOC",LOC)=$S($D(@TMP@("LOC",LOC)):@TMP@("LOC",LOC)+1,1:1)
  1. . ; total counts by division
  1. . S @TMP1@(DIV,"USR",USR)=$S($D(@TMP1@(DIV,"USR",USR)):@TMP1@(DIV,"USR",USR)+1,1:1)
  1. . S @TMP1@(DIV,"TTL",TTL)=$S($D(@TMP1@(DIV,"TTL",TTL)):@TMP1@(DIV,"TTL",TTL)+1,1:1)
  1. . S @TMP1@(DIV,"DTE",DTE)=$S($D(@TMP1@(DIV,"DTE",DTE)):@TMP1@(DIV,"DTE",DTE)+1,1:1)
  1. . S @TMP1@(DIV,"SRV",SRV)=$S($D(@TMP1@(DIV,"SRV",SRV)):@TMP1@(DIV,"SRV",SRV)+1,1:1)
  1. . S @TMP1@(DIV,"NTF",NTF)=$S($D(@TMP1@(DIV,"NTF",NTF)):@TMP1@(DIV,"NTF",NTF)+1,1:1)
  1. . S @TMP1@(DIV,"DIV",DIV)=$S($D(@TMP1@(DIV,"DIV",DIV)):@TMP1@(DIV,"DIV",DIV)+1,1:1)
  1. . S @TMP1@(DIV,"LOC",LOC)=$S($D(@TMP1@(DIV,"LOC",LOC)):@TMP1@(DIV,"LOC",LOC)+1,1:1)
  1. . ; total # of notifications
  1. . S @TMP@(1,"TOTAL")=$S($D(@TMP@(1,"TOTAL")):(@TMP@(1,"TOTAL")+1),1:1)
  1. ;
  1. S TIME("Stop")=$$NOW^XLFDT,TIME("Total")=$FN($$FMDIFF^XLFDT(TIME("Start"),TIME("Stop"),2),"-") ; timing information
  1. S TIME("Minutes")=TIME("Total")\60,TIME("Seconds")=TIME("Total")#60,TIME("Elapsed")=""
  1. S:+TIME("Minutes") TIME("Elapsed")=TIME("Minutes")_" minute(s) "
  1. S:+TIME("Seconds") TIME("Elapsed")=TIME("Elapsed")_TIME("Seconds")_" second(s)"
  1. S:+TIME("Elapsed")=0 TIME("Elapsed")="<1 second" S:+TIME("Total")=0 TIME("Total")=1
  1. ;
  1. I DTRG("Stop")[".999999" S $P(DTRG("Stop"),".",2)="2400"
  1. W IOCUON
  1. I +$G(@TMP@(1,"TOTAL"))=0 D G EN1 ; re-enter date range for zero results
  1. . W !!,"No results found. Please enter another date range.",!
  1. ;
  1. ;D
  1. ;. N AVG,DIFF S DIFF=$$FMDIFF^XLFDT(DTRG("Stop"),DTRG("Start"),1) S DIFF=DIFF_$S(DIFF>1:" days",1:" day")
  1. ;. I +DIFF=0 S DIFF=$$FMDIFF^XLFDT(DTRG("Stop"),DTRG("Start"),2),DIFF=DIFF/3600_" hours" S:+DIFF=1 DIFF="1 hour" S:+DIFF=24 DIFF="1 day"
  1. ;. W !!," Elapsed Time:",?(38+$L(TOTNTF)-$S(+TIME("Elapsed"):$L(+TIME("Elapsed")),1:2)),TIME("Elapsed")
  1. ;. W !," Length of Date Range: ",?(38+$L(TOTNTF)-$L(+DIFF)),DIFF
  1. ;. W !," Notifications Searched: ",TOTNTF
  1. ;. W !," Notifications Searched/Second: ",?(38+$L(TOTNTF)-$L($FN(TOTNTF/TIME("Total"),"",0))),$FN(TOTNTF/TIME("Total"),"",0)
  1. ;. W !," OE/RR & TIU Notifications Found: ",?(38+$L(TOTNTF)-$L(@TMP@(1,"TOTAL"))),@TMP@(1,"TOTAL")
  1. ;. S AVG("TOTAL")=TOTNTF\$S(DIFF["hour":1,1:+DIFF),AVG("ORTIU")=@TMP@(1,"TOTAL")\$S(DIFF["hour":1,1:+DIFF)
  1. ;. W !," Average Notifications/Day: ",?(38+$L(TOTNTF)-$L(AVG("ORTIU"))),AVG("ORTIU"),!
  1. ;
  1. N DIR,DIRUT,DTOUT,DUOUT,X,Y
  1. D CRTOP10 ; pre-load top10 list for filter default values (default is highest by count per type)
  1. F D Q:$D(DIRUT)!$D(DTOUT)!$D(DUOUT)
  1. . S DIR(0)="SA^S:SUMMARY;T:TOP10;F:FILTERED;Q:QUIT"
  1. . S DIR("A")="Select report type: ",DIR("B")="SUMMARY"
  1. . W:'+TOTNTF @IOF S TOTNTF=""
  1. . D ^DIR Q:$D(DIRUT)!$D(DTOUT)!$D(DUOUT) I Y(0)="QUIT" S DTOUT=1 Q
  1. . I Y(0)="TOP10" S Y(0)="TOP10(0)"
  1. . I Y(0)="FILTERED" S Y(0)="FILTERED^ORAERPT1"
  1. . D @Y(0)
  1. ;
  1. K @DATA,@TMP,@TMP1 D CLEAN,CLEAN^XGF ; clean up
  1. Q
  1. SETUP ; create entries in PROTOCOL file
  1. ; adds menus and actions based on data for filter selection
  1. Q:+$G(SETUP) ; don't do it again if you've alredy done it
  1. N ACTION,MENU,TYP
  1. F TYP="FILTER","NTF","USR","TTL","SRV","DIV","LOC" D
  1. . ; create a MENU for each type
  1. . S MENU(TYP)=$$GIEN("ORAE MENU "_TYP_" "_$J)
  1. . N ERR,FDA
  1. . S FDA(101,MENU(TYP)_",",4)="M"
  1. . S FDA(101,MENU(TYP)_",",5)=DUZ
  1. . D UPDATE^DIE("","FDA","","ERR")
  1. . ; create an ACTION for each type (except FILTER)
  1. . I TYP="FILTER" Q
  1. . S ACTION(TYP)=$$GIEN("ORAE ACTION "_TYP_" "_$J)
  1. . S FDA(101,ACTION(TYP)_",",1)=$S(TYP="NTF":"NOTIFICATION",TYP="USR":"RECIPIENT",TYP="TTL":"TITLE",TYP="SRV":"SERVICE",TYP="DIV":"DIVISION",TYP="LOC":"LOCATION",1:"FILTER")
  1. . S FDA(101,ACTION(TYP)_",",4)="A"
  1. . S FDA(101,ACTION(TYP)_",",5)=DUZ
  1. . S FDA(101.02,"+1,"_ACTION(TYP)_",",.01)=TYP
  1. . D UPDATE^DIE("","FDA","","ERR") D
  1. . . ; add ACTION to FILTER MENU
  1. . . S FDA(101.01,"+1,"_MENU("FILTER")_",",.01)=ACTION(TYP)
  1. . . D UPDATE^DIE("","FDA","","ERR")
  1. . ; add data entries as ACTIONs
  1. . N CNT,IEN,ITM S CNT=0,ITM="" F S ITM=$O(@TMP@(TYP,ITM)) Q:ITM="" D
  1. . . S CNT=CNT+1
  1. . . N ENTRY S ENTRY=$$GIEN("ORAE "_TYP_" "_$TR(ITM,"z<","<")_" "_$J)
  1. . . S FDA(101,ENTRY_",",1)=$TR(ITM,"z<","<") ; item text
  1. . . S FDA(101,ENTRY_",",3)=CNT ; sequence
  1. . . S FDA(101,ENTRY_",",4)="A" ; type
  1. . . S FDA(101,ENTRY_",",5)=DUZ ; creator
  1. . . D UPDATE^DIE("","FDA","IEN","ERR")
  1. . . S FDA(101.01,"+1,"_MENU(TYP)_",",.01)=ENTRY
  1. . . S FDA(101.01,"+1,"_MENU(TYP)_",",2)=CNT
  1. . . D UPDATE^DIE("","FDA","","ERR")
  1. S SETUP=1
  1. Q
  1. GIEN(NAME) ; get an IEN from #101
  1. N DA,DO,DIC,DLAYGO,X,Y
  1. S (DIC,DLAYGO)=101,DIC(0)="F",X=NAME D FILE^DICN
  1. Q +Y
  1. SUMMARY(MDIV) ;
  1. N CNT,SAVE,TXT,X,Y
  1. I +$G(MDIV) S SAVE("TXT")="" D DPSUMM(.TXT) W ! D EN^XUTMDEVQ("DISPLAY^ORAERPT(.TXT)","Summary Report",.SAVE) Q
  1. W ! I '$$READ^ORPARMG1("Y","Would you like SUMMARY data by DIVISION","NO") D SUMMARY(1) Q
  1. N DEFAULT D SETUP ; create entries in protocol file, in case filtered option/top10 hasn't been run yet
  1. S DEFAULT=$P(TOP10("DIV",1),U)
  1. S MDIV=$$ASK^ORAERPT(.MDIV,"A",DEFAULT,"ORAE MENU DIV "_$J,"DIVISION: ","D HELP1^ORAEHLP") Q:MDIV'>0
  1. I +MDIV,$P(MDIV(1),U,4)="ALL" D DPSUMM(.TXT) W ! D EN^XUTMDEVQ("DISPLAY^ORAERPT(.TXT)","Summary Report",.SAVE) Q ; don't bother if they select ALL, normal summary
  1. ;
  1. S MDIV=0 F S MDIV=$O(MDIV(MDIV)) Q:'+MDIV D
  1. . N DIV S DIV=$P(^ORD(101,$P(MDIV(MDIV),U,2),0),U,2) Q:DIV="" ; set to data from File #101
  1. . D DPSUMM(.TXT,DIV)
  1. W ! D EN^XUTMDEVQ("DISPLAY^ORAERPT(.TXT)","Summary Report",.SAVE)
  1. Q
  1. DPSUMM(TXT,DIV) ; setup summary data to display
  1. N CNT,LOC,X,Y
  1. S CNT=+$O(TXT(""),-1) ; get last line number
  1. S CNT=CNT+1,TXT(CNT)=$$CJ^XLFSTR("Notification Data [SUMMARY"_$S($G(DIV)="":"]",1:" for "_DIV_"]"),IOM),CNT=CNT+1,TXT(CNT)=""
  1. S CNT=CNT+1,TXT(CNT)=$$CJ^XLFSTR($$FMTE^XLFDT(DTRG("Start"))_" to "_$$FMTE^XLFDT(DTRG("Stop")),IOM),CNT=CNT+1,TXT(CNT)=""
  1. S LOC=$S(+$D(DIV):TMP1,1:TMP) S:$G(DIV)'="" $P(LOC,")")=$P(LOC,")")_",DIV" ; set where to look at the data
  1. F X="NTF","USR","TTL","SRV","DIV","LOC" D
  1. . S Y=$S(X="NTF":"Notification",X="USR":"Recipient",X="TTL":"Title",X="SRV":"Service",X="DIV":"Division",X="LOC":"Location")
  1. . S CNT=CNT+1,TXT(CNT)=Y,TXT(CNT)=$$SETSTR^VALM1("Total",TXT(CNT),34,5),TXT(CNT)=$$SETSTR^VALM1(Y,TXT(CNT),40,$L(Y)),TXT(CNT)=$$SETSTR^VALM1("Total",TXT(CNT),75,5)
  1. . S $P(TXT,"=",IOM-1)="",$P(TXT,"=",39)=" ",CNT=CNT+1,TXT(CNT)=TXT
  1. . N I S I=0,Y="" F S Y=$O(@LOC@(X,Y)) Q:Y="" D
  1. . . S I=I+1
  1. . . I I#2'=0 S CNT=CNT+1,TXT(CNT)=$S($E(Y)="z":$E(Y,2,31),1:$E(Y,1,30)),TXT(CNT)=$$SETSTR^VALM1(@LOC@(X,Y),TXT(CNT),(39-$L(@LOC@(X,Y))),$L(@LOC@(X,Y)))
  1. . . I I#2=0 S TXT(CNT)=$$SETSTR^VALM1($S($E(Y)="z":$E(Y,2,31),1:$E(Y,1,30)),TXT(CNT),40,$L(Y)),TXT(CNT)=$$SETSTR^VALM1(@LOC@(X,Y),TXT(CNT),(IOM-$L(@LOC@(X,Y))),$L(@LOC@(X,Y)))
  1. . S CNT=CNT+1,TXT(CNT)=""
  1. S CNT=CNT+1,TXT(CNT)="Total Notifications: "_$S($G(DIV)="":@LOC@(1,"TOTAL"),1:@LOC@("DIV",DIV)),CNT=CNT+1,TXT(CNT)=" "
  1. Q
  1. TOP10(MDIV) ;
  1. N CNT,SAVE,TXT,X,Y
  1. I +$G(MDIV) S SAVE("TXT")="" D DPTOP10(.TXT) W ! D EN^XUTMDEVQ("DISPLAY^ORAERPT(.TXT)","Top 10 Report",.SAVE) Q
  1. W ! I '$$READ^ORPARMG1("Y","Would you like TOP 10 data by DIVISION","NO") D TOP10(1) Q
  1. N DEFAULT D SETUP ; create entries in protocol file, in case the filtered option hasn't been run yet
  1. S DEFAULT=$P(TOP10("DIV",1),U)
  1. S MDIV=$$ASK^ORAERPT(.MDIV,"A",DEFAULT,"ORAE MENU DIV "_$J,"DIVISION: ","D HELP1^ORAEHLP") Q:MDIV'>0
  1. I +MDIV,$P(MDIV(1),U,4)="ALL" D DPTOP10(.TXT) W ! D EN^XUTMDEVQ("DISPLAY^ORAERPT(.TXT)","Top 10 Report",.SAVE) Q ; don't bother if they select ALL, just do the normal TOP 10
  1. ;
  1. S MDIV=0 F S MDIV=$O(MDIV(MDIV)) Q:'+MDIV D
  1. . N DIV S DIV=$P(^ORD(101,$P(MDIV(MDIV),U,2),0),U,2) Q:DIV="" ; set to data from File #101
  1. . N TOP10,X,Y F X="NTF","USR","TTL","SRV","DIV","LOC" F Y=1:1:10 S TOP10(X,Y)=$$SETSTR^VALM1(" ","",20,1) ; set blank list
  1. . N CNT,ITM,TYP S TYP="" F S TYP=$O(@TMP1@(DIV,TYP)) Q:TYP="" S ITM="" F S ITM=$O(@TMP1@(DIV,TYP,ITM)) Q:ITM="" D
  1. . . S TOP10("TMP",TYP,@TMP1@(DIV,TYP,ITM),ITM)=""
  1. . F X="NTF","USR","TTL","SRV","DIV","LOC" S CNT=0,Y="" F S Y=$O(TOP10("TMP",X,Y),-1) Q:'+Y!(CNT'<10) S USR="" F S USR=$O(TOP10("TMP",X,Y,USR)) Q:USR=""!(CNT'<10) D
  1. . . S CNT=CNT+1,TOP10(X,CNT)=USR_U_Y ; only save 10 at most of descending values
  1. . K TOP10("TMP")
  1. . D DPTOP10(.TXT,DIV)
  1. . S CNT=$O(TXT(""),-1) S CNT=CNT+1,TXT(CNT)=" ",CNT=CNT+1,TXT(CNT)=" " ; add blank lines
  1. S SAVE("TXT")="" W ! D EN^XUTMDEVQ("DISPLAY^ORAERPT(.TXT)","Top 10 Report",.SAVE)
  1. Q
  1. CRTOP10 ; create the default top 10 list, highest values by type are default selections for the filtered search
  1. N CNT,ITM,TYP,USR,X,Y
  1. F X="NTF","USR","TTL","SRV","DIV","LOC" F Y=1:1:10 S TOP10(X,Y)=" " ; set blank list
  1. S TYP="ALL" F S TYP=$O(@TMP@(TYP)) Q:TYP="" S ITM="" F S ITM=$O(@TMP@(TYP,ITM)) Q:ITM="" D
  1. . S TOP10("TMP",TYP,@TMP@(TYP,ITM),ITM)="" ; put all types in order, temporary list
  1. F X="NTF","USR","TTL","SRV","DIV","LOC" S CNT=0,Y="" F S Y=$O(TOP10("TMP",X,Y),-1) Q:'+Y!(CNT'<10) S USR="" F S USR=$O(TOP10("TMP",X,Y,USR)) Q:USR=""!(CNT'<10) D
  1. . S CNT=CNT+1,TOP10(X,CNT)=USR_U_Y ; only save 10 at most of descending values
  1. K TOP10("TMP") ; kill temporary list
  1. Q
  1. DPTOP10(TXT,DIV) ; setup the top 10 list to display
  1. N CNT,X,Y
  1. S CNT=+$O(TXT(""),-1) ; get last line number
  1. S CNT=CNT+1,TXT(CNT)=$$CJ^XLFSTR("Top 10"_$S($D(DIV):" ["_DIV_"]",1:""),IOM),CNT=CNT+1,TXT(CNT)=" "
  1. ;S CNT=CNT+1,TXT(CNT)=$$CJ^XLFSTR("[Descending Order]",IOM),CNT=CNT+1,TXT(CNT)=""
  1. F X=1:1:3 F Y=1:1:10 D I Y=10 S CNT=CNT+1,TXT(CNT)=""
  1. . I Y=1 S CNT=CNT+1,TXT(CNT)=$S(X=1:"Notification",X=2:"Title",X=3:"Division"),TXT(CNT)=$$SETSTR^VALM1("Total",TXT(CNT),34,5)
  1. . I S TXT=$S(X=1:"Recipient",X=2:"Service",X=3:"Location"),TXT(CNT)=$$SETSTR^VALM1(TXT,TXT(CNT),40,$L(TXT)),TXT(CNT)=$$SETSTR^VALM1("Total",TXT(CNT),75,5)
  1. . I S CNT=CNT+1,$P(TXT(CNT),"=",IOM-1)="",$P(TXT(CNT),"=",39)=" "
  1. . S CNT=CNT+1
  1. . S TXT=$NA(TOP10($S(X=1:"NTF",X=2:"TTL",X=3:"DIV"),Y))
  1. . S TXT(CNT)=$P(@TXT,U),TXT(CNT)=$S($E(TXT(CNT))="z":$E(TXT(CNT),2,32),1:TXT(CNT))
  1. . S TXT=$P(@TXT,U,2),TXT(CNT)=$$SETSTR^VALM1(TXT,TXT(CNT),(39-$L(TXT)),$L(TXT))
  1. . S TXT=$NA(TOP10($S(X=1:"USR",X=2:"SRV",X=3:"LOC"),Y))
  1. . S TXT(CNT)=$$SETSTR^VALM1($S($E($P(@TXT,U))="z":$E($P(@TXT,U),2,32),1:$P(@TXT,U)),TXT(CNT),40,$L($P(@TXT,U)))
  1. . S TXT(CNT)=$$SETSTR^VALM1($P(@TXT,U,2),TXT(CNT),(IOM-$L($P(@TXT,U,2))),$L($P(@TXT,U,2)))
  1. ;S CNT=CNT+1,TXT(CNT)="Total Notifications: "_@TMP1@(DIV,"DIV",DIV)
  1. S CNT=CNT+1,TXT(CNT)="Total Notifications: "_$S($G(DIV)="":@TMP@(1,"TOTAL"),1:@TMP1@(DIV,"DIV",DIV))
  1. Q
  1. ASKRNG ; ask user for the date range
  1. W "Enter the desired date range for the notification search.",!!
  1. W "Search times typically vary from 30-90 seconds for each day searched.",!
  1. S (DTRG("Start"),DTRG("Stop"))=""
  1. D I '+DTRG("Start")!('+DTRG("Stop")) W ! Q
  1. . N %DT,DIR,X,Y S %DT(0)=-$$DT^XLFDT_".24",%DT="AETX",%DT("A")="Select Beginning DATE: ",%DT("B")=$$FMTE^XLFDT($$FMADD^XLFDT(DT,-30))
  1. . D ^%DT K %DT Q:Y<0 S DTRG("Start")=Y
  1. . S %DT(0)=DTRG("Start"),%DT="AETX",%DT("A")=" Ending DATE: ",%DT("B")=$$FMTE^XLFDT(DT)
  1. . W ! D ^%DT Q:Y<0 S DTRG("Stop")=Y S:$P(DTRG("Stop"),".",2)="" $P(DTRG("Stop"),".",2)="999999"
  1. Q
  1. CLEAN ; S DATA=$NA(^TMP($J,"ORAERPT",$H)),TMP=$NA(^TMP($J,"ORAETMP",$H))
  1. N DA,DIK,NAME,IEN,X,Y
  1. S NAME="ORAE" F S NAME=$O(^ORD(101,"B",NAME)) Q:NAME'["ORAE" S IEN=0 F S IEN=$O(^ORD(101,"B",NAME,IEN)) Q:'+IEN D
  1. . Q:NAME'[$J
  1. . S DA=IEN,DIK="^ORD(101," D ^DIK
  1. Q
  1. ASK(Y,PARAM,DEFAULT,MENU,PROMPT,HELP) ;
  1. N I,X,XQORM
  1. S XQORM=+$O(^ORD(101,"B",MENU,0))_";ORD(101,"
  1. I '+XQORM Q "-1^Menu entry not found."
  1. S XQORM(0)=$G(PARAM),XQORM("A")=PROMPT,XQORM("B")=DEFAULT,XQORM("?")=$S($G(HELP)="":"D HELP^ORAEHLP",1:HELP)
  1. D EN^XQORM
  1. Q $G(Y)
  1. DISPLAY(OUTPUT) ;
  1. N END,Y S (END,Y)=0
  1. D:$E(IOST,1,2)="C-" HDR2
  1. F S Y=$O(OUTPUT(Y)) Q:'+Y!(+END) D
  1. . D HDR1:$Y+3>IOSL Q:+END W OUTPUT(Y),!
  1. Q:+END
  1. I $E(IOST,1,2)="C-",IOSL'>24 F Q:$Y+3>IOSL W !
  1. R:$E(IOST,1,2)="C-" !,"Report Complete. Press <Enter> to continue ",X:DTIME
  1. Q
  1. HDR1 ;
  1. I $E(IOST,1,2)="C-" D
  1. . R !,"Press <ENTER> to continue or '^' to exit ",X:DTIME S END='$T!(X=U)
  1. Q:+END
  1. HDR2 ;
  1. I $E(IOST,1,2)="C-" D
  1. . W @IOF
  1. . I +$D(HDR) S X=0 F S X=$O(HDR(X)) Q:'+X W HDR(X),!
  1. W IOUOFF
  1. Q