| 1 | XOBVRH ;mjk/alb - VistaLink Request Handler Utilities ; 07/27/2002  13:00 | 
|---|
| 2 | ;;1.5;VistALink;;Sep 09, 2005 | 
|---|
| 3 | ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026] | 
|---|
| 4 | ; | 
|---|
| 5 | QUIT | 
|---|
| 6 | ; | 
|---|
| 7 | ; ------------------------------------------------------------------ | 
|---|
| 8 | ;                       Message Type Handler Utilities | 
|---|
| 9 | ; ------------------------------------------------------------------ | 
|---|
| 10 | ; | 
|---|
| 11 | ; -- set up msg type info using message name | 
|---|
| 12 | MSGNAME(XOBMSG,XOBHDLR) ; -- set up msg type info | 
|---|
| 13 | QUIT $$SETMSG(XOBMSG,"NAME",.XOBHDLR) | 
|---|
| 14 | ; | 
|---|
| 15 | ; -- set up msg type info using message type | 
|---|
| 16 | MSGTYPE(XOBMSG,XOBHDLR) ; -- set up msg type info | 
|---|
| 17 | QUIT $$SETMSG(XOBMSG,"MSGTYPE",.XOBHDLR) | 
|---|
| 18 | ; | 
|---|
| 19 | ; -- set up msg type info using proprietary string | 
|---|
| 20 | MSGSINK(XOBMSG,XOBHDLR) ; -- set up msg type info | 
|---|
| 21 | QUIT $$SETMSG(XOBMSG,"D",.XOBHDLR) | 
|---|
| 22 | ; | 
|---|
| 23 | CACHE(XOBHDLR) ; -- cache req handlers | 
|---|
| 24 | NEW TYPE,TYPE0,XOBOK | 
|---|
| 25 | SET TYPE=0 | 
|---|
| 26 | SET XOBOK=1 | 
|---|
| 27 | ; | 
|---|
| 28 | ; -- load request handler info | 
|---|
| 29 | FOR  SET TYPE=$ORDER(^XOB(18.05,"AS",1,TYPE)) QUIT:'TYPE  DO  QUIT:'XOBOK | 
|---|
| 30 | . SET TYPE0=$GET(^XOB(18.05,TYPE,0)) | 
|---|
| 31 | . DO SET(TYPE,TYPE0,.XOBHDLR) | 
|---|
| 32 | . SET XOBOK=$GET(XOBHDLR(TYPE)) | 
|---|
| 33 | . IF 'XOBOK SET XOBOK=XOBOK_U_$GET(XOBHDLR,"ERROR") | 
|---|
| 34 | QUIT XOBOK | 
|---|
| 35 | ; | 
|---|
| 36 | ;  -- set up msg type info | 
|---|
| 37 | SETMSG(XOBMSG,XOBXREF,XOBHDLR) ; | 
|---|
| 38 | NEW TYPE,TYPEO | 
|---|
| 39 | KILL XOBHDLR(0) | 
|---|
| 40 | ; | 
|---|
| 41 | ; -- already cached? | 
|---|
| 42 | SET TYPE=$ORDER(XOBHDLR(XOBXREF,XOBMSG,"")) | 
|---|
| 43 | IF TYPE QUIT TYPE | 
|---|
| 44 | ; | 
|---|
| 45 | ; -- load req handler | 
|---|
| 46 | SET TYPE=+$ORDER(^XOB(18.05,XOBXREF,XOBMSG,"")) | 
|---|
| 47 | IF TYPE DO | 
|---|
| 48 | . SET TYPE0=$GET(^XOB(18.05,TYPE,0)) | 
|---|
| 49 | . DO SET(.TYPE,.TYPE0,.XOBHDLR) | 
|---|
| 50 | IF 'TYPE DO | 
|---|
| 51 | . SET XOBHDLR(0)=0 | 
|---|
| 52 | . SET XOBHDLR(0,"ERROR")="No message type defined" | 
|---|
| 53 | QUIT TYPE | 
|---|
| 54 | ; | 
|---|
| 55 | SET(TYPE,TYPE0,XOBHDLR) ; -- set nodes | 
|---|
| 56 | NEW IRTN,XOBICBK | 
|---|
| 57 | KILL XOBHDLR(TYPE) | 
|---|
| 58 | SET IRTN=$$IRTN(TYPE0) | 
|---|
| 59 | IF IRTN="" DO  GOTO SETQ | 
|---|
| 60 | . SET XOBHDLR(TYPE)=0 | 
|---|
| 61 | . IF TYPE0="" SET XOBHDLR(TYPE,"ERROR")="No entry for message type ["_TYPE_"]" QUIT | 
|---|
| 62 | . IF IRTN="" SET XOBHDLR(TYPE,"ERROR")="Invalid interface routine specified ["_$PIECE(TYPE0,U,5)_"]" QUIT | 
|---|
| 63 | ; | 
|---|
| 64 | SET XOBHDLR(TYPE)=1 | 
|---|
| 65 | SET XOBHDLR(TYPE,"AUTHENTICATE")=+$PIECE(TYPE0,U,4) | 
|---|
| 66 | SET XOBHDLR(TYPE,"REQHDLR")="DO REQHDLR^"_IRTN_"(.XOBDATA)" | 
|---|
| 67 | SET XOBHDLR(TYPE,"READER")="DO READER^"_IRTN_"(.XOBX,.XOBDATA)" | 
|---|
| 68 | IF $PIECE(TYPE0,U,1)]"" SET XOBHDLR("NAME",$PIECE(TYPE0,U,1),TYPE)="" | 
|---|
| 69 | IF $PIECE(TYPE0,U,2)]"" SET XOBHDLR("MSGTYPE",$PIECE(TYPE0,U,2),TYPE)="" | 
|---|
| 70 | IF $PIECE(TYPE0,U,7)]"" SET XOBHDLR("D",$PIECE(TYPE0,U,7),TYPE)="" | 
|---|
| 71 | ; | 
|---|
| 72 | ; -- set up SAX callbacks | 
|---|
| 73 | SET XOBHDLR(TYPE,"CB","ELEST")="QUIT" | 
|---|
| 74 | SET XOBHDLR(TYPE,"CB","ELEND")="QUIT" | 
|---|
| 75 | SET XOBHDLR(TYPE,"CB","CHR")="QUIT" | 
|---|
| 76 | ; | 
|---|
| 77 | XECUTE "DO CALLBACK^"_IRTN_"(.XOBICBK)" | 
|---|
| 78 | IF $DATA(XOBICBK("STARTELEMENT")) SET XOBHDLR(TYPE,"CB","ELEST")="DO "_XOBICBK("STARTELEMENT")_"(.ELE,.ATR)" | 
|---|
| 79 | IF $DATA(XOBICBK("ENDELEMENT")) SET XOBHDLR(TYPE,"CB","ELEND")="DO "_XOBICBK("ENDELEMENT")_"(.ELE)" | 
|---|
| 80 | IF $DATA(XOBICBK("CHARACTERS")) SET XOBHDLR(TYPE,"CB","CHR")="DO "_XOBICBK("CHARACTERS")_"(.TXT)" | 
|---|
| 81 | SETQ ; | 
|---|
| 82 | QUIT | 
|---|
| 83 | ; | 
|---|
| 84 | ; -- get interface routine and test for existence | 
|---|
| 85 | IRTN(XOBTYPE0) ; | 
|---|
| 86 | NEW X,RTN | 
|---|
| 87 | SET RTN="" | 
|---|
| 88 | SET X=$PIECE(XOBTYPE0,"^",5) | 
|---|
| 89 | IF X]"" DO | 
|---|
| 90 | . XECUTE ^%ZOSF("TEST") | 
|---|
| 91 | . IF $TEST SET RTN=X | 
|---|
| 92 | QUIT RTN | 
|---|
| 93 | ; | 
|---|