1 | SPNAHOC0 ;HISC/DAD-AD HOC REPORTS: MAIN REPORT DRIVER ;9/11/96 14:58
|
---|
2 | ;;2.0;Spinal Cord Dysfunction;**11,14,19**;01/02/1997
|
---|
3 | ;
|
---|
4 | ;Required / Optional Variables
|
---|
5 | ;
|
---|
6 | ; SPNDIC = File NUMBER of the file to print from.
|
---|
7 | ; SPNMRTN = Entry point to setup the SPNMENU array (Format TAG^ROUTINE)
|
---|
8 | ; SPNORTN = Entry point to set up other FileMan EN1^DIP variables (opt)
|
---|
9 | ; SPNMHDR = Text to be used as the sort/print menu screen header.
|
---|
10 | ; Header appears as === SPNMHDR Ad Hoc Report Generator ===
|
---|
11 | ; Set SPNMHDR = @ to suppress the header. (Maximum 45 chars)
|
---|
12 | ;
|
---|
13 | ;Menu Array Format (Set up by D @SPNMRTN)
|
---|
14 | ;
|
---|
15 | ; SPNMENU() = Sort ^ Menu text ^ ~Field # ^ DIR(0)
|
---|
16 | ; Sort = Allow sorting: 1 - Yes, 0 - No.
|
---|
17 | ; Menu text = Menu text as it will appear to the user (Max 30 char).
|
---|
18 | ; ~Field # = Any valid EN1^DIP BY/FLDS string. The ~ is replaced by
|
---|
19 | ; the sort/print prefixes entered by the user or null.
|
---|
20 | ; Any ;"TEXT" appended to the BY/FLDS string should be
|
---|
21 | ; in the last ';' piece.
|
---|
22 | ; DIR(0) = The DIR(0) string used when the user is prompted for a
|
---|
23 | ; from/to range on the sort. DIR(0) should have a third
|
---|
24 | ; '^' piece (input transform) that always returns the
|
---|
25 | ; external form of the data or -1 in the variable Y.
|
---|
26 | ; DIR("S") = A DIR("S") screen. This is the second '|' piece of
|
---|
27 | ; the line.
|
---|
28 | ;
|
---|
29 | G:$$GET1^DID(+$G(SPNDIC),"","","NAME")="" EXIT
|
---|
30 | G:$S($G(SPNMRTN)="":1,$D(SPNORTN)#2:SPNORTN="",1:0) EXIT
|
---|
31 | D SETUP^SPNAHOC5 G:(SPNMMAX'>0)!(SPNSORT'>0) EXIT
|
---|
32 | ;
|
---|
33 | F SPNTYPE="S","P" D G:SPNQUIT EXIT
|
---|
34 | . I SPNTYPE="S" S SPNTYPE(0)="sort",SPNTYPE(1)="Sort"
|
---|
35 | . I SPNTYPE="P" S SPNTYPE(0)="print",SPNTYPE(1)="Print"
|
---|
36 | . S (SPNMLOAD,SPNMOUTP,SPNMSAVE)=0 K SPNCHOSN
|
---|
37 | . F SPNSEQ=1:1 D ENASK^SPNAHOC1 Q:SPNNEXT
|
---|
38 | . S SPNNUMOP(SPNTYPE)=SPNSEQ-1 Q:SPNQUIT
|
---|
39 | . I 'SPNMLOAD,SPNMSAVE D SAVE^SPNAHOC3
|
---|
40 | . I SPNMOUTP D EN2^SPNAHOC4
|
---|
41 | . Q
|
---|
42 | OTHER ; *** Execute OTHER entry point in the Ad Hoc interface routine
|
---|
43 | K DCOPIES,DHD,DHIT,DIASKHD,DIOBEG,DIOEND,DIS,DISTOP,DQTIME,IOP,PG
|
---|
44 | I $D(SPNORTN)#2 S SPNQUIT=0 D @SPNORTN G:SPNQUIT EXIT
|
---|
45 | DHD ; *** Prompt for report header
|
---|
46 | I $D(DIASKHD)=0,$E($G(DHD),1,2)'="W " D G:SPNQUIT EXIT
|
---|
47 | . K DIR S DIR(0)="FAO^0:60^D DHDCHK^SPNAHOC0"
|
---|
48 | . S DIR("A",1)=" Enter special report header, if desired (maximum of 60 characters)."
|
---|
49 | . S DIR("A")="Header: ",DIR("?")="^D EN^SPNAHOCH(""H5"")"
|
---|
50 | . S X=$P($$DHD^SPNAHOC4($G(SPNMACRO("P"))),U) S:X="" X=$G(DHD)
|
---|
51 | . I X]"" S DIR("B")=X
|
---|
52 | . W ! D ^DIR K DHD S:Y]"" DHD=Y
|
---|
53 | . I $D(DIROUT)!$D(DTOUT)!$D(DUOUT) S SPNQUIT=1 Q
|
---|
54 | . I $G(DHD)]"" D SAVDHD^SPNAHOC5($G(SPNMACRO("P")),DHD)
|
---|
55 | . Q
|
---|
56 | DIPCRIT ; *** Sort criteria in report header
|
---|
57 | F D Q:%
|
---|
58 | . W !!?3,"Include the sort criteria in the header"
|
---|
59 | . S %=$P($$DIPCRIT^SPNAHOC4($G(SPNMACRO("S"))),U)
|
---|
60 | . I '% S %=$S($D(DIPCRIT):1,1:2)
|
---|
61 | . D YN^DICN I '% D EN^SPNAHOCH("H11")
|
---|
62 | . Q
|
---|
63 | I %=-1 S SPNQUIT=1 G EXIT
|
---|
64 | K DIPCRIT I %=1 S DIPCRIT=1
|
---|
65 | D SAVDIPCR^SPNAHOC5($G(SPNMACRO("S")),$S(%=1:1,1:0))
|
---|
66 | BYFLDS ; *** Process BY & FLDS strings
|
---|
67 | K SPNCHOSN
|
---|
68 | F SP=1:1:SPNNUMOP("P") S SPI=$O(SPNOPTN("P",SP,"")) Q:SPI="" D
|
---|
69 | . S @$S(SP=1:"FLDS",1:"FLDS("_(SP-1)_")")=SPNOPTN("P",SP,SPI)
|
---|
70 | . S SPNCHOSN(SPI)=""
|
---|
71 | . Q
|
---|
72 | F SP=1:1:SPNNUMOP("S") S SPI=$O(SPNOPTN("S",SP,"")) Q:SPI="" D
|
---|
73 | . S X=SPNOPTN("S",SP,SPI),SPNSHD=$P(X,";",$L(X,";")),Y=$L(SPNSHD)
|
---|
74 | . I SPNSHD["""" D
|
---|
75 | .. S X=$P(X,";",1,$L(X,";")-1)
|
---|
76 | .. S SPNSHD=";"_$E(SPNSHD,1,Y-1)_$S($L(SPNSHD)>2:": """,1:"""")
|
---|
77 | .. S X=X_$S($D(SPNCHOSN(SPI))[0:SPNSHD,X[":,":"",X[":":SPNSHD,1:"")
|
---|
78 | .. Q
|
---|
79 | . I $L(BY)+$L(X)+1>255 D Q
|
---|
80 | .. W !!?3,"Sort too big !!"
|
---|
81 | .. W !?3,"Skipping sort field number ",SPI,", "
|
---|
82 | .. W $P(SPNMENU(SPI),U,2),"."
|
---|
83 | .. Q
|
---|
84 | . S BY=BY_X_","
|
---|
85 | . Q
|
---|
86 | ;1 Self Report of Function
|
---|
87 | ;2 FIM
|
---|
88 | ;3 ASIA
|
---|
89 | ;4 CHART
|
---|
90 | ;5 FAM
|
---|
91 | ;6 DIENER
|
---|
92 | ;7 DUSOI
|
---|
93 | ;8 Multiple Sclerosis
|
---|
94 | S:'$D(SPNARPT) SPNARPT=10 I SPNARPT'=10 D
|
---|
95 | .S SP=SP+1 S BY=BY_.02_","
|
---|
96 | .S X=X_SPNARPT
|
---|
97 | .S FR(SP)=SPNARPT,TO(SP)=SPNARPT
|
---|
98 | F SP=$L(BY):-1 Q:$E(X,SP)'="," S BY=$E(BY,1,SP)
|
---|
99 | K DIC S DIC=SPNDIC S:$D(L)[0 L=0
|
---|
100 | W !,"Do not queue this report if you used up-front or user selectable filters." W ! D XIT,EN1^DIP
|
---|
101 | EXIT ; *** Exit the Ad Hoc Reoprt Generator
|
---|
102 | K SPNARPT,SPNDIC,DCC,DIP,I,J,TO,FR,BY,X,Y,J,I,DIC,SP,SPI
|
---|
103 | K BY,DCOPIES,DHD,DHIT,DIASKHD,DIC,DIOBEG,DIOEND,DIPCRIT,DIS,DISPAR
|
---|
104 | K DISTOP,DISUPNO,DQTIME,FLDS,FR,IOP,L,PG,TO
|
---|
105 | K SPNDIC,SPNMHDR,SPNMMAX,SPNMRTN,SPNORTN
|
---|
106 | XIT K %,%DT,%ZIS,D0,D1,DA,DIK,DIR,DIROUT,DIRUT,DLAYGO,DR,DTOUT,DUOUT,POP
|
---|
107 | K SP,SPI,SPN,SPNAGIN,SPNBEGIN,SPNBLURB,SPNCHKSM,SPNCHOSN,SPND0,SPND1
|
---|
108 | K SPNDIR,SPNDTIME,SPNEND,SPNEXIT,SPNFIELD,SPNFLDNO,SPNLIST,SPNLST
|
---|
109 | K SPNMACRO,SPNMAXOP,SPNMENU,SPNMLOAD,SPNMOUTP,SPNMSAVE,SPNNEXT,SPNNONE
|
---|
110 | K SPNNUMOP,SPNOK,SPNOPTN,SPNORDER,SPNPREFX,SPNQUIT,SPNREPLC,SPNSELOP
|
---|
111 | K SPNSEQ,SPNSHD,SPNSORT,SPNSUFFX,SPNTAB,SPNTEMP,SPNTYP,SPNTYPE,SPNUNDL
|
---|
112 | K SPNYESNO,X,Y,ZTDESC,ZTRTN,ZTSAVE,ZTSK
|
---|
113 | Q
|
---|
114 | DHDCHK ; *** Check DHD for MUMPS code
|
---|
115 | I $S(X'?1"W ".E:1,$G(DUZ(0))["@":1,1:0) Q
|
---|
116 | N SP
|
---|
117 | F SP=1:2 Q:$S($D(X)[0:1,$P(X,"""",SP,$L(X,""""))="":1,1:0) D
|
---|
118 | . I $P($E(X,3,$L(X)),"""",SP)[" " K X
|
---|
119 | . Q
|
---|
120 | Q
|
---|