KIDS Distribution saved on Jun 19, 2010@17:41:48 TMG 1*1.0*8 **KIDS**:TMG1*1.0*8^ **INSTALL NAME** TMG1*1.0*8 "BLD",7636,0) TMG1*1.0*8^^0^3100619^n "BLD",7636,1,0) ^^4^4^3100619^^ "BLD",7636,1,1,0) This patch fixes a bug in RPC used to save .ini "BLD",7636,1,2,0) setting on server. "BLD",7636,1,3,0) This patch should be added after TMG1*1.0*8 "BLD",7636,1,4,0) "BLD",7636,4,0) ^9.64PA^^0 "BLD",7636,6.3) 2 "BLD",7636,"KRN",0) ^9.67PA^8989.52^19 "BLD",7636,"KRN",.4,0) .4 "BLD",7636,"KRN",.401,0) .401 "BLD",7636,"KRN",.402,0) .402 "BLD",7636,"KRN",.403,0) .403 "BLD",7636,"KRN",.5,0) .5 "BLD",7636,"KRN",.84,0) .84 "BLD",7636,"KRN",3.6,0) 3.6 "BLD",7636,"KRN",3.8,0) 3.8 "BLD",7636,"KRN",9.2,0) 9.2 "BLD",7636,"KRN",9.8,0) 9.8 "BLD",7636,"KRN",9.8,"NM",0) ^9.68A^1^1 "BLD",7636,"KRN",9.8,"NM",1,0) TMGRPC1A^^0^B30114621 "BLD",7636,"KRN",9.8,"NM","B","TMGRPC1A",1) "BLD",7636,"KRN",19,0) 19 "BLD",7636,"KRN",19.1,0) 19.1 "BLD",7636,"KRN",101,0) 101 "BLD",7636,"KRN",409.61,0) 409.61 "BLD",7636,"KRN",771,0) 771 "BLD",7636,"KRN",870,0) 870 "BLD",7636,"KRN",8989.51,0) 8989.51 "BLD",7636,"KRN",8989.52,0) 8989.52 "BLD",7636,"KRN",8994,0) 8994 "BLD",7636,"KRN",8994,"NM",0) ^9.68A^^0 "BLD",7636,"KRN","B",.4,.4) "BLD",7636,"KRN","B",.401,.401) "BLD",7636,"KRN","B",.402,.402) "BLD",7636,"KRN","B",.403,.403) "BLD",7636,"KRN","B",.5,.5) "BLD",7636,"KRN","B",.84,.84) "BLD",7636,"KRN","B",3.6,3.6) "BLD",7636,"KRN","B",3.8,3.8) "BLD",7636,"KRN","B",9.2,9.2) "BLD",7636,"KRN","B",9.8,9.8) "BLD",7636,"KRN","B",19,19) "BLD",7636,"KRN","B",19.1,19.1) "BLD",7636,"KRN","B",101,101) "BLD",7636,"KRN","B",409.61,409.61) "BLD",7636,"KRN","B",771,771) "BLD",7636,"KRN","B",870,870) "BLD",7636,"KRN","B",8989.51,8989.51) "BLD",7636,"KRN","B",8989.52,8989.52) "BLD",7636,"KRN","B",8994,8994) "BLD",7636,"QDEF") ^^^^NO^^^^NO^^NO "BLD",7636,"QUES",0) ^9.62^^ "MBREQ") 0 "QUES","XPF1",0) Y "QUES","XPF1","??") ^D REP^XPDH "QUES","XPF1","A") Shall I write over your |FLAG| File "QUES","XPF1","B") YES "QUES","XPF1","M") D XPF1^XPDIQ "QUES","XPF2",0) Y "QUES","XPF2","??") ^D DTA^XPDH "QUES","XPF2","A") Want my data |FLAG| yours "QUES","XPF2","B") YES "QUES","XPF2","M") D XPF2^XPDIQ "QUES","XPI1",0) YO "QUES","XPI1","??") ^D INHIBIT^XPDH "QUES","XPI1","A") Want KIDS to INHIBIT LOGONs during the install "QUES","XPI1","B") NO "QUES","XPI1","M") D XPI1^XPDIQ "QUES","XPM1",0) PO^VA(200,:EM "QUES","XPM1","??") ^D MG^XPDH "QUES","XPM1","A") Enter the Coordinator for Mail Group '|FLAG|' "QUES","XPM1","B") "QUES","XPM1","M") D XPM1^XPDIQ "QUES","XPO1",0) Y "QUES","XPO1","??") ^D MENU^XPDH "QUES","XPO1","A") Want KIDS to Rebuild Menu Trees Upon Completion of Install "QUES","XPO1","B") NO "QUES","XPO1","M") D XPO1^XPDIQ "QUES","XPZ1",0) Y "QUES","XPZ1","??") ^D OPT^XPDH "QUES","XPZ1","A") Want to DISABLE Scheduled Options, Menu Options, and Protocols "QUES","XPZ1","B") NO "QUES","XPZ1","M") D XPZ1^XPDIQ "QUES","XPZ2",0) Y "QUES","XPZ2","??") ^D RTN^XPDH "QUES","XPZ2","A") Want to MOVE routines to other CPUs "QUES","XPZ2","B") NO "QUES","XPZ2","M") D XPZ2^XPDIQ "RTN") 1 "RTN","TMGRPC1A") 0^1^B30114621 "RTN","TMGRPC1A",1,0) TMGRPC1A ;TMG/kst-RPC Functions ;2/11/10, 6/19/10 "RTN","TMGRPC1A",2,0) ;;1.0;TMG-LIB;**1**;2/11/10;Build 2 "RTN","TMGRPC1A",3,0) ; "RTN","TMGRPC1A",4,0) ;"TMG RPC FUNCTIONS "RTN","TMGRPC1A",5,0) ; "RTN","TMGRPC1A",6,0) ;"Copyright Kevin Toppenberg MD "RTN","TMGRPC1A",7,0) ;"Released under GNU General Public License (GPL) "RTN","TMGRPC1A",8,0) ;" "RTN","TMGRPC1A",9,0) ;"======================================================================= "RTN","TMGRPC1A",10,0) ;" RPC -- Public Functions. "RTN","TMGRPC1A",11,0) ;"======================================================================= "RTN","TMGRPC1A",12,0) ;"SETINIVL(RESULT,SECTION,KEY,VALUE) ;Entry point for TMG INIFILE SET "RTN","TMGRPC1A",13,0) ;"GETINIVL(RESULT,SECTION,KEY,DEFAULT) ;Entry point for TMG INIFILE GET "RTN","TMGRPC1A",14,0) ; "RTN","TMGRPC1A",15,0) ;"======================================================================= "RTN","TMGRPC1A",16,0) ;"PRIVATE API FUNCTIONS "RTN","TMGRPC1A",17,0) ;"======================================================================= "RTN","TMGRPC1A",18,0) ; "RTN","TMGRPC1A",19,0) ;"======================================================================= "RTN","TMGRPC1A",20,0) ;"======================================================================= "RTN","TMGRPC1A",21,0) ;"Dependencies: "RTN","TMGRPC1A",22,0) ;" DIC, TMGDEBUG "RTN","TMGRPC1A",23,0) ;"======================================================================= "RTN","TMGRPC1A",24,0) ;"======================================================================= "RTN","TMGRPC1A",25,0) ; "RTN","TMGRPC1A",26,0) SETINIVL(RESULT,SECTION,KEY,VALUE) ; "RTN","TMGRPC1A",27,0) ;"SCOPE: Public "RTN","TMGRPC1A",28,0) ;"RPC that calls this: TMG INIFILE SET "RTN","TMGRPC1A",29,0) ;"Purpose: To provide an entry point for a RPC call from a client. The client "RTN","TMGRPC1A",30,0) ;" will use this instead of TIniFile object in Delphi. "RTN","TMGRPC1A",31,0) ;" Note: Since all data are of type string in Mumps, this will work only with strings. "RTN","TMGRPC1A",32,0) ;" and type casting will have to take place in client. "RTN","TMGRPC1A",33,0) ;"Input: RESULT -- an OUT PARAMETER. See output below. "RTN","TMGRPC1A",34,0) ;" SECTION -- String of 'Section' to store setting in (corresponds to section in TIniFile) "RTN","TMGRPC1A",35,0) ;" KEY -- String of Key value. (corresponds to Ident/Key in TIniFile) "RTN","TMGRPC1A",36,0) ;" VALUE -- String of Value to set "RTN","TMGRPC1A",37,0) ;"Note: Because this is a shared resource, it is expected that the client will use "RTN","TMGRPC1A",38,0) ;" User.Name as the Section value. "RTN","TMGRPC1A",39,0) ;" Also, any prior value will be overwritten. "RTN","TMGRPC1A",40,0) ;"Output: Will return RESULT="1^Success", or -1^Error Message" "RTN","TMGRPC1A",41,0) SET RESULT="1^Success" "RTN","TMGRPC1A",42,0) IF $GET(SECTION)="" SET RESULT="-1^No value passed for SECTION" QUIT "RTN","TMGRPC1A",43,0) IF $GET(KEY)="" SET RESULT="-1^No value passed for KEY" QUIT "RTN","TMGRPC1A",44,0) SET VALUE=$GET(VALUE) "RTN","TMGRPC1A",45,0) NEW X,Y,DIC,IEN,IEN2 "RTN","TMGRPC1A",46,0) SET DIC=22710,DIC(0)="LM" ;"Find SECTION if previously added. "RTN","TMGRPC1A",47,0) SET X=SECTION "RTN","TMGRPC1A",48,0) DO ^DIC SET IEN=+Y "RTN","TMGRPC1A",49,0) IF IEN'>0 DO ;"For some reason LAYGO doesn't work when called by RPC "RTN","TMGRPC1A",50,0) . NEW TMGFDA,TMGIEN,TMGMSG "RTN","TMGRPC1A",51,0) . SET TMGFDA(22710,"+1,",.01)=SECTION "RTN","TMGRPC1A",52,0) . DO UPDATE^DIE("E","TMGFDA","TMGIEN","TMGMSG") "RTN","TMGRPC1A",53,0) . IF $DATA(TMGMSG("DIERR")) DO QUIT "RTN","TMGRPC1A",54,0) . . SET RESULT="-1^"_$$GetErrStr^TMGDEBUG(.TMGMSG) "RTN","TMGRPC1A",55,0) . SET IEN=+$GET(TMGIEN(1)) "RTN","TMGRPC1A",56,0) IF +RESULT=-1 GOTO SIDN "RTN","TMGRPC1A",57,0) IF IEN'>0 SET RESULT="-1^Error establishing SECTION: ["_SECTION_"]" QUIT "RTN","TMGRPC1A",58,0) SET DA(1)=IEN,DIC(0)="LM",DIC="^TMG(22710,"_IEN_",1," "RTN","TMGRPC1A",59,0) SET X=KEY "RTN","TMGRPC1A",60,0) DO ^DIC SET IEN2=+Y "RTN","TMGRPC1A",61,0) IF IEN2'>0 DO ;"For some reason LAYGO sometimes doesn't work when called by RPC "RTN","TMGRPC1A",62,0) . NEW TMGFDA,TMGIEN,TMGMSG "RTN","TMGRPC1A",63,0) . SET TMGFDA(22710.01,"+1,"_IEN_",",.01)=KEY "RTN","TMGRPC1A",64,0) . DO UPDATE^DIE("E","TMGFDA","TMGIEN","TMGMSG") "RTN","TMGRPC1A",65,0) . IF $DATA(TMGMSG("DIERR")) DO QUIT "RTN","TMGRPC1A",66,0) . . SET RESULT="-1^"_$$GetErrStr^TMGDEBUG(.TMGMSG) "RTN","TMGRPC1A",67,0) . SET IEN2=+$GET(TMGIEN(1)) "RTN","TMGRPC1A",68,0) IF +RESULT=-1 GOTO SIDN "RTN","TMGRPC1A",69,0) IF IEN2'>0 SET RESULT="-1^Error establishing KEY: ["_KEY_"]" QUIT "RTN","TMGRPC1A",70,0) NEW TMGFDA,TMGMSG "RTN","TMGRPC1A",71,0) IF VALUE="" SET VALUE="@" "RTN","TMGRPC1A",72,0) SET TMGFDA(22710.01,IEN2_","_IEN_",",1)=VALUE "RTN","TMGRPC1A",73,0) DO FILE^DIE("E","TMGFDA","TMGMSG") "RTN","TMGRPC1A",74,0) IF $DATA(TMGMSG("DIERR")) DO GOTO SIDN "RTN","TMGRPC1A",75,0) . SET RESULT="-1^"_$$GetErrStr^TMGDEBUG(.TMGMSG) "RTN","TMGRPC1A",76,0) SIDN QUIT "RTN","TMGRPC1A",77,0) ; "RTN","TMGRPC1A",78,0) ; "RTN","TMGRPC1A",79,0) GETINIVL(RESULT,SECTION,KEY,DEFAULT) ; "RTN","TMGRPC1A",80,0) ;"SCOPE: Public "RTN","TMGRPC1A",81,0) ;"RPC that calls this: TMG INIFILE GET "RTN","TMGRPC1A",82,0) ;"Purpose: To provide an entry point for a RPC call from a client. The client "RTN","TMGRPC1A",83,0) ;" will use this instead of TIniFile object in Delphi. "RTN","TMGRPC1A",84,0) ;" Note: Since all data are of type string in Mumps, this will work only with strings. "RTN","TMGRPC1A",85,0) ;" and type casting will have to take place in client. "RTN","TMGRPC1A",86,0) ;"Input: RESULT -- an OUT PARAMETER. See output below. "RTN","TMGRPC1A",87,0) ;" SECTION -- String of 'Section' to store setting in (corresponds to section in TIniFile) "RTN","TMGRPC1A",88,0) ;" KEY -- String of Key value. (corresponds to Ident/Key in TIniFile) "RTN","TMGRPC1A",89,0) ;" DEFAULT -- The value to be returned, if no value found. "RTN","TMGRPC1A",90,0) ;"Note: Because this is a shared resource, it is expected that the client will use "RTN","TMGRPC1A",91,0) ;" User.Name as the Section value. "RTN","TMGRPC1A",92,0) ;" Also, any prior value will be overwritten. "RTN","TMGRPC1A",93,0) ;"Output: Will return RESULT="1^", or -1^Error Message" "RTN","TMGRPC1A",94,0) IF $GET(SECTION)="" SET RESULT="-1^No value passed for SECTION" QUIT "RTN","TMGRPC1A",95,0) IF $GET(KEY)="" SET RESULT="-1^No value passed for KEY" QUIT "RTN","TMGRPC1A",96,0) SET DEFAULT=$GET(DEFAULT) "RTN","TMGRPC1A",97,0) NEW X,Y,DIC,IEN,IEN2 "RTN","TMGRPC1A",98,0) SET DIC=22710,X=SECTION "RTN","TMGRPC1A",99,0) DO ^DIC SET IEN=+Y "RTN","TMGRPC1A",100,0) IF IEN'>0 SET RESULT="1^"_DEFAULT QUIT "RTN","TMGRPC1A",101,0) SET DA(1)=IEN,DIC="^TMG(22710,"_IEN_",1," "RTN","TMGRPC1A",102,0) SET X=KEY "RTN","TMGRPC1A",103,0) DO ^DIC SET IEN2=+Y "RTN","TMGRPC1A",104,0) IF IEN2'>0 SET RESULT="1^"_DEFAULT QUIT "RTN","TMGRPC1A",105,0) NEW VALUE SET VALUE=$GET(^TMG(22710,IEN,1,IEN2,1),DEFAULT) "RTN","TMGRPC1A",106,0) IF VALUE'=DEFAULT SET VALUE=$PIECE(VALUE,"^",1) "RTN","TMGRPC1A",107,0) SET RESULT="1^"_VALUE "RTN","TMGRPC1A",108,0) QUIT "RTN","TMGRPC1A",109,0) ; "RTN","TMGRPC1A",110,0) ; "RTN","TMGRPC1A",111,0) CONVERT "RTN","TMGRPC1A",112,0) ;"Purpose: A temp function to convert between the old storage method and the new. "RTN","TMGRPC1A",113,0) ;"Data was stored in: ^TMG("INIDATA",Section,Key,Vaue) "RTN","TMGRPC1A",114,0) NEW SECTION,KEY,VALUE "RTN","TMGRPC1A",115,0) SET SECTION="" "RTN","TMGRPC1A",116,0) FOR SET SECTION=$ORDER(^TMG("INIDATA",SECTION)) QUIT:(SECTION="") DO "RTN","TMGRPC1A",117,0) . SET KEY="" "RTN","TMGRPC1A",118,0) . FOR SET KEY=$ORDER(^TMG("INIDATA",SECTION,KEY)) QUIT:(KEY="") DO "RTN","TMGRPC1A",119,0) . . SET VALUE=$GET(^TMG("INIDATA",SECTION,KEY)) "RTN","TMGRPC1A",120,0) . . NEW RESULT "RTN","TMGRPC1A",121,0) . . DO SETINIVL(.RESULT,SECTION,KEY,VALUE) ; "RTN","TMGRPC1A",122,0) . . IF +RESULT>0 KILL ^TMG("INIDATA",SECTION,KEY) QUIT "RTN","TMGRPC1A",123,0) . . WRITE "Error trying to store SECTION=",SECTION,"; KEY=",KEY,"; VALUE=",VALUE,! "RTN","TMGRPC1A",124,0) . . WRITE " -- ",$PIECE(RESULT,"^",2),! "RTN","TMGRPC1A",125,0) QUIT "RTN","TMGRPC1A",126,0) ; "RTN","TMGRPC1A",127,0) ; "RTN","TMGRPC1A",128,0) INSTALL ; "RTN","TMGRPC1A",129,0) ;"Purpose: to add the RPC's to the OPTION record OR CPRS GUI CHART "RTN","TMGRPC1A",130,0) NEW DIC,X,Y,DA "RTN","TMGRPC1A",131,0) SET DIC="^DIC(19,",DIC(0)="M" "RTN","TMGRPC1A",132,0) SET X="OR CPRS GUI CHART" "RTN","TMGRPC1A",133,0) DO ^DIC "RTN","TMGRPC1A",134,0) IF +Y'>0 DO QUIT "RTN","TMGRPC1A",135,0) . WRITE "ERROR. Unable to find [OR CPRS GUI CHART] in file OPTION (#19)",! "RTN","TMGRPC1A",136,0) . NEW TEMP READ "Press [ENTER] to continue...",TEMP:($GET(DTIME,3600)) "RTN","TMGRPC1A",137,0) . WRITE ! "RTN","TMGRPC1A",138,0) SET DA(1)=+Y "RTN","TMGRPC1A",139,0) SET DIC=DIC_DA(1)_",""RPC""," "RTN","TMGRPC1A",140,0) SET DIC(0)="ML" ;"LAYGO --> add entry if not found "RTN","TMGRPC1A",141,0) SET X="TMG INIFILE GET" "RTN","TMGRPC1A",142,0) DO ^DIC "RTN","TMGRPC1A",143,0) IF +Y'>0 DO "RTN","TMGRPC1A",144,0) . WRITE "ERROR. Unable to add or find TMG INIFILE GET for subfile RPC in record",! "RTN","TMGRPC1A",145,0) . WRITE "OR CPRS GUI CHART in file OPTION (#19)",! "RTN","TMGRPC1A",146,0) . NEW TEMP READ "Press [ENTER] to continue...",TEMP:($GET(DTIME,3600)) "RTN","TMGRPC1A",147,0) . WRITE ! "RTN","TMGRPC1A",148,0) SET X="TMG INIFILE SET" "RTN","TMGRPC1A",149,0) DO ^DIC "RTN","TMGRPC1A",150,0) IF +Y'>0 DO "RTN","TMGRPC1A",151,0) . WRITE "ERROR. Unable to add or find TMG INIFILE SET for subfile RPC in record",! "RTN","TMGRPC1A",152,0) . WRITE "OR CPRS GUI CHART in file OPTION (#19)",! "RTN","TMGRPC1A",153,0) . NEW TEMP READ "Press [ENTER] to continue...",TEMP:($GET(DTIME,3600)) "RTN","TMGRPC1A",154,0) . WRITE ! "RTN","TMGRPC1A",155,0) QUIT "RTN","TMGRPC1A",156,0) ; "VER") 8.0^22.0 **END** **END**