1 | FSCRPXG ;SLC/STAFF-NOIS RPC Driver - General Use ;1/13/98 16:36
|
---|
2 | ;;1.1;NOIS;;Sep 06, 1998
|
---|
3 | ;
|
---|
4 | RPC(OUTPUT,INPUT) ;
|
---|
5 | ; routes all NOIS Workstation Calls
|
---|
6 | ; ensures user is authorized to use NOIS
|
---|
7 | ; input array sent from client should be within a safe partition size
|
---|
8 | ; IN and OUT arrays are not being used, param passing uses TMP instead
|
---|
9 | N FSCDEV,FIRSTNUM,INLINE,IN,MAX,NUM,OK,OUT,OUTLINE,RTN,START K IN,OUT
|
---|
10 | S MAX=30 ; max # lines that can be sent to client
|
---|
11 | S FSCDEV=1
|
---|
12 | S FIRSTNUM=+$O(INPUT(""))
|
---|
13 | S INLINE=$G(INPUT(FIRSTNUM))
|
---|
14 | S OK=1
|
---|
15 | I $P(INLINE,U,10)=1 D I 'OK Q ; 1st input
|
---|
16 | .K ^TMP("FSCRPC",$J)
|
---|
17 | .I $$SHUTDOWN D Q
|
---|
18 | ..S OK=0
|
---|
19 | ..S ^TMP("FSCRPC",$J,"OUTPUT",0)="^1"
|
---|
20 | ..S OUTPUT=$NA(^TMP("FSCRPC",$J,"OUTPUT"))
|
---|
21 | .M ^TMP("FSCRPC",$J,"INPUT")=INPUT
|
---|
22 | E D
|
---|
23 | .I $P(INLINE,U,4) D ; more input being sent
|
---|
24 | ..S START=$O(^TMP("FSCRPC",$J,"INPUT",""),-1)
|
---|
25 | ..S NUM=0 F S NUM=$O(INPUT(NUM)) Q:NUM<1 D
|
---|
26 | ...S START=START+1
|
---|
27 | ...S ^TMP("FSCRPC",$J,"INPUT",START)=INPUT(NUM)
|
---|
28 | K INPUT,OUTPUT
|
---|
29 | S OUTLINE="^0"
|
---|
30 | S OK=1
|
---|
31 | I $E($P(INLINE,U,2),1,6)="FSCRPC" D I 'OK Q
|
---|
32 | .S RTN=$P(INLINE,U,1,2)
|
---|
33 | .;I '$L($T(@RTN)) S $P(OUTLINE,U,3)=1 Q ; cancel if invalid routine
|
---|
34 | .I $P(INLINE,U,4) Q ; don't process until no more input
|
---|
35 | .I $P(INLINE,U,5) D MORE(MAX,OUTLINE,.OUTPUT) S OK=0 Q ; send more output
|
---|
36 | .K ^TMP("FSCRPC",$J,"OUTPUT")
|
---|
37 | .S RTN=RTN_"(.IN,.OUT)" D @RTN
|
---|
38 | .;D MENUS^FSCRPXM(DUZ,.OUTLINE)
|
---|
39 | .K ^TMP("FSCRPC",$J,"INPUT")
|
---|
40 | I +$G(^TMP("FSCRPC",$J,"OUTPUT"))<MAX D
|
---|
41 | .S ^TMP("FSCRPC",$J,"OUTPUT",0)=OUTLINE
|
---|
42 | .S OUTPUT=$NA(^TMP("FSCRPC",$J,"OUTPUT"))
|
---|
43 | E D MORE(MAX,OUTLINE,.OUTPUT)
|
---|
44 | Q
|
---|
45 | ;
|
---|
46 | MORE(MAX,OUTLINE,OUTPUT) ;
|
---|
47 | N CNT,COUNT,LINE,NUM
|
---|
48 | K ^TMP("FSCRPC",$J,"OUTPUTLONG")
|
---|
49 | S (CNT,NUM)=0 F S NUM=$O(^TMP("FSCRPC",$J,"OUTPUT",NUM)) Q:NUM<1 Q:CNT'<MAX S LINE=^(NUM) D
|
---|
50 | .S CNT=CNT+1
|
---|
51 | .S ^TMP("FSCRPC",$J,"OUTPUTLONG",CNT)=LINE
|
---|
52 | .K ^TMP("FSCRPC",$J,"OUTPUT",NUM)
|
---|
53 | I $O(^TMP("FSCRPC",$J,"OUTPUT",0))>0 S $P(OUTLINE,U,5)=1 ; more to come
|
---|
54 | E S $P(OUTLINE,U,5)=0 K ^TMP("FSCRPC",$J,"INPUT"),^TMP("FSCRPC",$J,"OUTPUT")
|
---|
55 | S ^TMP("FSCRPC",$J,"OUTPUTLONG",0)=OUTLINE
|
---|
56 | S OUTPUT=$NA(^TMP("FSCRPC",$J,"OUTPUTLONG"))
|
---|
57 | Q
|
---|
58 | ;
|
---|
59 | TEST(X) ; $$(routine entry) -> 0 or 1 if exists on system
|
---|
60 | X ^%ZOSF("TEST") Q $T
|
---|
61 | ;
|
---|
62 | SHUTDOWN() ; $$ -> 1 or 0 to shutdown applications
|
---|
63 | I $P($G(^FSC("PARAM",1,2)),U) Q 1
|
---|
64 | Q 0
|
---|