| 1 | FSCRPX ;SLC/STAFF-NOIS RPC Process ;03/16/2005  08:58
 | 
|---|
| 2 |  ;;1.1;NOIS;**2**;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,IN,INLINE,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 |  .D SHUTDOWN(INLINE,$G(INPUT(1)),.OK)
 | 
|---|
| 18 |  .I 'OK D  Q
 | 
|---|
| 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),FSCZZRTN=RTN ;****
 | 
|---|
| 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,INLINE)
 | 
|---|
| 39 |  .K ^TMP("FSCRPC",$J,"INPUT")
 | 
|---|
| 40 |  S OUTLINE=$G(^TMP("FSCRPC",$J,"OUTPUT"))_OUTLINE,^TMP("FSCRPC",$J,"OUTPUT")="" ;*2
 | 
|---|
| 41 |  ;I +$G(^TMP("FSCRPC",$J,"OUTPUT"))<MAX D  ;*2
 | 
|---|
| 42 |  I +OUTLINE<MAX D  ;*2
 | 
|---|
| 43 |  .S ^TMP("FSCRPC",$J,"OUTPUT",0)=OUTLINE
 | 
|---|
| 44 |  .S OUTPUT=$NA(^TMP("FSCRPC",$J,"OUTPUT"))
 | 
|---|
| 45 |  E  D MORE(MAX,OUTLINE,.OUTPUT)
 | 
|---|
| 46 |  Q
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 | MORE(MAX,OUTLINE,OUTPUT) ;
 | 
|---|
| 49 |  N CNT,COUNT,LINE,NUM
 | 
|---|
| 50 |  K ^TMP("FSCRPC",$J,"OUTPUTLONG")
 | 
|---|
| 51 |  S (CNT,NUM)=0 F  S NUM=$O(^TMP("FSCRPC",$J,"OUTPUT",NUM)) Q:NUM<1  Q:CNT'<MAX  S LINE=^(NUM) D
 | 
|---|
| 52 |  .S CNT=CNT+1
 | 
|---|
| 53 |  .S ^TMP("FSCRPC",$J,"OUTPUTLONG",CNT)=LINE
 | 
|---|
| 54 |  .K ^TMP("FSCRPC",$J,"OUTPUT",NUM)
 | 
|---|
| 55 |  I $O(^TMP("FSCRPC",$J,"OUTPUT",0))>0 S $P(OUTLINE,U,5)=1 ; more to come
 | 
|---|
| 56 |  E  S $P(OUTLINE,U,5)=0 K ^TMP("FSCRPC",$J,"INPUT"),^TMP("FSCRPC",$J,"OUTPUT")
 | 
|---|
| 57 |  S ^TMP("FSCRPC",$J,"OUTPUTLONG",0)=OUTLINE
 | 
|---|
| 58 |  S OUTPUT=$NA(^TMP("FSCRPC",$J,"OUTPUTLONG"))
 | 
|---|
| 59 |  Q
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | SHUTDOWN(INLINE,ONELINE,OK) ; 'OK to shutdown applications
 | 
|---|
| 62 |  N MSG,NOW,RTN,VERSION
 | 
|---|
| 63 |  I $P($G(^FSC("PARAM",1,2)),U) S OK=0 D  Q
 | 
|---|
| 64 |  .S ^TMP("FSCRPC",$J,"OUTPUT",1)="NOIS server software has been turned off."
 | 
|---|
| 65 |  S RTN=$P(INLINE,U,1,2) I RTN="ALERTCHK^FSCRPC" Q
 | 
|---|
| 66 |  I $L(RTN)>1 D  I 'OK Q
 | 
|---|
| 67 |  .S NOW=$$NOW^XLFDT
 | 
|---|
| 68 |  .I $E($P(RTN,U,2),1,6)'="FSCRPC" D  Q
 | 
|---|
| 69 |  ..S OK=0
 | 
|---|
| 70 |  ..S ^XTMP("FSCRPC","##"_RTN_"##",DUZ,NOW)=""
 | 
|---|
| 71 |  .I RTN="STARTUP^FSCRPC" D  Q
 | 
|---|
| 72 |  ..I $D(^VA(200,"E",1,DUZ)) S ^XTMP("FSCRPC","##"_DUZ_"##",NOW)="",OK=0 D  Q  ; this is a menu screen on Forum to restrict NON GOV users
 | 
|---|
| 73 |  ...S ^TMP("FSCRPC",$J,"OUTPUT",1)="You do not have access to NOIS."
 | 
|---|
| 74 |  ..S ^XTMP("FSCRPC","<STARTUP>",-NOW,DUZ)=""
 | 
|---|
| 75 |  ..S VERSION=ONELINE
 | 
|---|
| 76 |  ..S ^XTMP("FSCRPC","<VERSION>",DUZ)=VERSION
 | 
|---|
| 77 |  ..D BADVER(VERSION,.OK,.MSG)
 | 
|---|
| 78 |  ..I 'OK S ^TMP("FSCRPC",$J,"OUTPUT",1)=MSG
 | 
|---|
| 79 |  .S ^(RTN)=1+$G(^XTMP("FSCRPC",RTN))
 | 
|---|
| 80 |  .S ^(RTN)=1+$G(^XTMP("FSCRPC","ZZUSER",DUZ,RTN))
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 | BADVER(VERSION,OK,MSG) ;
 | 
|---|
| 84 |  N SVERSION
 | 
|---|
| 85 |  S SVERSION=$P($G(^FSC("PARAM",1,2)),U,7)
 | 
|---|
| 86 |  S OK=1,MSG=""
 | 
|---|
| 87 |  I '$L(SVERSION) Q
 | 
|---|
| 88 |  I VERSION["T" S VERSION=+VERSION-.01+($P(VERSION,"T",2)*.001)
 | 
|---|
| 89 |  I SVERSION'>+VERSION Q
 | 
|---|
| 90 |  S OK=0
 | 
|---|
| 91 |  S MSG=$P($G(^FSC("PARAM",1,3)),U)
 | 
|---|
| 92 |  I '$L(MSG) S MSG="You're software must be updated to "_SVERSION_"."
 | 
|---|
| 93 |  Q
 | 
|---|