| 1 | XWBUTL ;OIFO-Oakland/REM - M2M Programmer Utilities ;05/17/2002  17:46 | 
|---|
| 2 | ;;1.1;RPC BROKER;**28,34**;Mar 28, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | QUIT | 
|---|
| 5 | ; | 
|---|
| 6 | ;p34 -correct typo changing ">" to "<" in QUIT:STR'[">" - CHARCHK. | 
|---|
| 7 | ;    -add "[]" as escape characters - CHARCHK. | 
|---|
| 8 | ; | 
|---|
| 9 | ; | 
|---|
| 10 | XMLHDR() ; -- provides current XML standard header | 
|---|
| 11 | QUIT "<?xml version=""1.0"" encoding=""utf-8"" ?>" | 
|---|
| 12 | ; | 
|---|
| 13 | ERROR(XWBDAT) ; -- send error type message | 
|---|
| 14 | NEW XWBI,XWBY | 
|---|
| 15 | SET XWBY="XWBY" | 
|---|
| 16 | ; -- build xml | 
|---|
| 17 | DO BUILD(.XWBY,.XWBDAT) | 
|---|
| 18 | ; | 
|---|
| 19 | ; -- write xml | 
|---|
| 20 | DO PRE^XWBRL | 
|---|
| 21 | SET XWBI=0 FOR  SET XWBI=$O(XWBY(XWBI)) Q:'XWBI  DO WRITE^XWBRL(XWBY(XWBI)) | 
|---|
| 22 | ; -- send eot and flush buffer | 
|---|
| 23 | DO POST^XWBRL | 
|---|
| 24 | QUIT | 
|---|
| 25 | ; | 
|---|
| 26 | BUILD(XWBY,XWBDAT) ;  -- build xml in passed store reference (XWBY) | 
|---|
| 27 | ; -- input format | 
|---|
| 28 | ; XWBDAT("MESSAGE TYPE") = type of message (ex. Gov.VA.Med.RPC.Error) | 
|---|
| 29 | ; XWBDAT("ERRORS",<integer>,"CODE") = error code | 
|---|
| 30 | ; XWBDAT("ERRORS",<integer>,"ERROR TYPE") = type of error (system/application/security) | 
|---|
| 31 | ; XWBDAT("ERRORS",<integer>,"MESSAGE",<integer>) = error message | 
|---|
| 32 | ; | 
|---|
| 33 | NEW XWBCODE,XWBI,XWBERR,XWBLINE,XWBETYPE | 
|---|
| 34 | SET XWBLINE=0 | 
|---|
| 35 | ; | 
|---|
| 36 | DO ADD($$XMLHDR()) | 
|---|
| 37 | DO ADD("<vistalink type="""_$G(XWBDAT("MESSAGE TYPE"))_""" >") | 
|---|
| 38 | DO ADD("<errors>") | 
|---|
| 39 | SET XWBERR=0 | 
|---|
| 40 | FOR  SET XWBERR=$O(XWBDAT("ERRORS",XWBERR)) Q:'XWBERR  DO | 
|---|
| 41 | . SET XWBCODE=$G(XWBDAT("ERRORS",XWBERR,"CODE"),0) | 
|---|
| 42 | . SET XWBETYPE=$G(XWBDAT("ERRORS",XWBERR,"ERROR TYPE"),0) | 
|---|
| 43 | . DO ADD("<error type="""_XWBETYPE_""" code="""_XWBCODE_""" >") | 
|---|
| 44 | . DO ADD("<msg>") | 
|---|
| 45 | . IF $G(XWBDAT("ERRORS",XWBERR,"CDATA")) DO ADD("<![CDATA[") | 
|---|
| 46 | . SET XWBI=0 | 
|---|
| 47 | . FOR  SET XWBI=$O(XWBDAT("ERRORS",XWBERR,"MESSAGE",XWBI)) Q:'XWBI  DO | 
|---|
| 48 | . . DO ADD(XWBDAT("ERRORS",XWBERR,"MESSAGE",XWBI)) | 
|---|
| 49 | . IF $G(XWBDAT("ERRORS",XWBERR,"CDATA")) DO ADD("]]>") | 
|---|
| 50 | . DO ADD("</msg>") | 
|---|
| 51 | . DO ADD("</error>") | 
|---|
| 52 | DO ADD("</errors>") | 
|---|
| 53 | DO ADD("</vistalink>") | 
|---|
| 54 | ; | 
|---|
| 55 | QUIT | 
|---|
| 56 | ; | 
|---|
| 57 | ADD(TXT) ; -- add line | 
|---|
| 58 | SET XWBLINE=XWBLINE+1 | 
|---|
| 59 | SET @XWBY@(XWBLINE)=TXT | 
|---|
| 60 | QUIT | 
|---|
| 61 | ; | 
|---|
| 62 | CHARCHK(STR) ; -- replace xml character limits with entities | 
|---|
| 63 | NEW A,I,X,Y,Z,NEWSTR | 
|---|
| 64 | SET (Y,Z)="" | 
|---|
| 65 | IF STR["&" SET NEWSTR=STR DO  SET STR=Y_Z | 
|---|
| 66 | . FOR X=1:1  SET Y=Y_$PIECE(NEWSTR,"&",X)_"&",Z=$PIECE(STR,"&",X+1,999) QUIT:Z'["&" | 
|---|
| 67 | ; | 
|---|
| 68 | ;*p34-typo, change ">" to "<" in Q:STR'[... | 
|---|
| 69 | IF STR["<" FOR  SET STR=$PIECE(STR,"<",1)_"<"_$PIECE(STR,"<",2,99) Q:STR'["<" | 
|---|
| 70 | IF STR[">" FOR  SET STR=$PIECE(STR,">",1)_">"_$PIECE(STR,">",2,99) Q:STR'[">" | 
|---|
| 71 | IF STR["'" FOR  SET STR=$PIECE(STR,"'",1)_"'"_$PIECE(STR,"'",2,99) Q:STR'["'" | 
|---|
| 72 | IF STR["""" FOR  SET STR=$PIECE(STR,"""",1)_"""_$PIECE(STR,"""",2,99) QUIT:STR'["""" | 
|---|
| 73 | ; | 
|---|
| 74 | ;*p34-add "[]" as escape characters. | 
|---|
| 75 | IF STR["[" FOR  SET STR=$PIECE(STR,"[",1)_"["_$PIECE(STR,"[",2,99) Q:STR'["[" | 
|---|
| 76 | IF STR["]" FOR  SET STR=$PIECE(STR,"]",1)_"]"_$PIECE(STR,"]",2,99) Q:STR'["]" | 
|---|
| 77 | ; | 
|---|
| 78 | ;Remove ctrl char's | 
|---|
| 79 | S STR=$TR(STR,$C(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31)) | 
|---|
| 80 | ;FOR I=1:1:$LENGTH(STR) DO | 
|---|
| 81 | ;. SET X=$EXTRACT(STR,I) | 
|---|
| 82 | ;. SET A=$ASCII(X) | 
|---|
| 83 | ;. IF A<31 S STR=$P(STR,X,1)_$P(STR,X,2,99) | 
|---|
| 84 | QUIT STR | 
|---|
| 85 | ; | 
|---|
| 86 | ;D=0 STR 2 NUM, D=1 NUM 2 STR | 
|---|
| 87 | NUM(STR,D) ;Convert a string to numbers | 
|---|
| 88 | N I,Y | 
|---|
| 89 | S Y="",D=$G(D,0) | 
|---|
| 90 | I D=0 F I=1:1:$L(STR) S Y=Y_$E(1000+$A(STR,I),2,4) | 
|---|
| 91 | I D=1 F I=1:3:$L(STR) S Y=Y_$C($E(STR,I,I+2)) | 
|---|
| 92 | Q Y | 
|---|