Released XU*8*598 SEQ #487 Extracted from mail message **KIDS**:XU*8.0*598^ **INSTALL NAME** XU*8.0*598 "BLD",1432,0) XU*8.0*598^KERNEL^0^3120418^y "BLD",1432,1,0) ^^2^2^3120418^ "BLD",1432,1,1,0) Kernel patch XU*8*598; FIX: the API $$TRIM^XLFSTR. Please refer to the "BLD",1432,1,2,0) Description in Forum Patch Module for details. "BLD",1432,4,0) ^9.64PA^^ "BLD",1432,6.3) 2 "BLD",1432,"ABPKG") n "BLD",1432,"INID") ^y "BLD",1432,"INIT") POST^XU8P598 "BLD",1432,"KRN",0) ^9.67PA^9002226^21 "BLD",1432,"KRN",.4,0) .4 "BLD",1432,"KRN",.401,0) .401 "BLD",1432,"KRN",.402,0) .402 "BLD",1432,"KRN",.403,0) .403 "BLD",1432,"KRN",.5,0) .5 "BLD",1432,"KRN",.84,0) .84 "BLD",1432,"KRN",3.6,0) 3.6 "BLD",1432,"KRN",3.8,0) 3.8 "BLD",1432,"KRN",9.2,0) 9.2 "BLD",1432,"KRN",9.8,0) 9.8 "BLD",1432,"KRN",9.8,"NM",0) ^9.68A^1^1 "BLD",1432,"KRN",9.8,"NM",1,0) XLFSTR^^0^B7275578 "BLD",1432,"KRN",9.8,"NM","B","XLFSTR",1) "BLD",1432,"KRN",19,0) 19 "BLD",1432,"KRN",19.1,0) 19.1 "BLD",1432,"KRN",101,0) 101 "BLD",1432,"KRN",409.61,0) 409.61 "BLD",1432,"KRN",771,0) 771 "BLD",1432,"KRN",779.2,0) 779.2 "BLD",1432,"KRN",870,0) 870 "BLD",1432,"KRN",8989.51,0) 8989.51 "BLD",1432,"KRN",8989.52,0) 8989.52 "BLD",1432,"KRN",8994,0) 8994 "BLD",1432,"KRN",9002226,0) 9002226 "BLD",1432,"KRN","B",.4,.4) "BLD",1432,"KRN","B",.401,.401) "BLD",1432,"KRN","B",.402,.402) "BLD",1432,"KRN","B",.403,.403) "BLD",1432,"KRN","B",.5,.5) "BLD",1432,"KRN","B",.84,.84) "BLD",1432,"KRN","B",3.6,3.6) "BLD",1432,"KRN","B",3.8,3.8) "BLD",1432,"KRN","B",9.2,9.2) "BLD",1432,"KRN","B",9.8,9.8) "BLD",1432,"KRN","B",19,19) "BLD",1432,"KRN","B",19.1,19.1) "BLD",1432,"KRN","B",101,101) "BLD",1432,"KRN","B",409.61,409.61) "BLD",1432,"KRN","B",771,771) "BLD",1432,"KRN","B",779.2,779.2) "BLD",1432,"KRN","B",870,870) "BLD",1432,"KRN","B",8989.51,8989.51) "BLD",1432,"KRN","B",8989.52,8989.52) "BLD",1432,"KRN","B",8994,8994) "BLD",1432,"KRN","B",9002226,9002226) "BLD",1432,"QDEF") ^^^^NO^^^^NO^^NO "BLD",1432,"QUES",0) ^9.62^^ "BLD",1432,"REQB",0) ^9.611^1^1 "BLD",1432,"REQB",1,0) XU*8.0*437^0 "BLD",1432,"REQB","B","XU*8.0*437",1) "INIT") POST^XU8P598 "MBREQ") 0 "PKG",3,-1) 1^1 "PKG",3,0) KERNEL^XU^SIGN-ON, SECURITY, MENU DRIVER, DEVICES, TASKMAN^ "PKG",3,20,0) ^9.402P^^0 "PKG",3,22,0) ^9.49I^1^1 "PKG",3,22,1,0) 8.0^3090706^3090706^6 "PKG",3,22,1,"PAH",1,0) 598^3120418 "PKG",3,22,1,"PAH",1,1,0) ^^2^2^3120418 "PKG",3,22,1,"PAH",1,1,1,0) Kernel patch XU*8*598; FIX: the API $$TRIM^XLFSTR. Please refer to the "PKG",3,22,1,"PAH",1,1,2,0) Description in Forum Patch Module for details. "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") 2 "RTN","XLFSTR") 0^1^B7275578^B7051089 "RTN","XLFSTR",1,0) XLFSTR ;ISC-SF/STAFF - String Functions ;04/18/12 "RTN","XLFSTR",2,0) ;;8.0;KERNEL;**112,120,400,437,598**;Jul 10, 1995;Build 2 "RTN","XLFSTR",3,0) ;Per VHA Directive 2004-038, this routine should not be modified "RTN","XLFSTR",4,0) ; "RTN","XLFSTR",5,0) UP(X) Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") "RTN","XLFSTR",6,0) ; "RTN","XLFSTR",7,0) LOW(X) Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") "RTN","XLFSTR",8,0) ; "RTN","XLFSTR",9,0) STRIP(X,Y) Q $TR(X,$G(Y),"") "RTN","XLFSTR",10,0) ; "RTN","XLFSTR",11,0) REPEAT(X,Y) ; "RTN","XLFSTR",12,0) N % Q:'$D(X) "" I $L(X)*$G(Y)>245 Q "" "RTN","XLFSTR",13,0) S %="",$P(%,X,$G(Y)+1)="" "RTN","XLFSTR",14,0) Q % "RTN","XLFSTR",15,0) ; "RTN","XLFSTR",16,0) SPLIT(%SRC,%DLM,%VLIST) ;split a string by delimiter vars in list "RTN","XLFSTR",17,0) ;returns number of vars in list "RTN","XLFSTR",18,0) ;usage - s %=$$split(src,dlm,"d1,d2,d3,..") "RTN","XLFSTR",19,0) N I,V,DV "RTN","XLFSTR",20,0) S DV=$$DVARS(%VLIST),%DLM=$G(%DLM,",") "RTN","XLFSTR",21,0) F I=1:1:$L(%VLIST,DV) S V=$P(%VLIST,DV,I) S:V'="" @V=$P(%SRC,%DLM,I) "RTN","XLFSTR",22,0) Q I "RTN","XLFSTR",23,0) ; "RTN","XLFSTR",24,0) DVARS(LIST) ;return a delimiter for a list of variables "RTN","XLFSTR",25,0) Q $S(%VLIST[$C(9):$C(9),%VLIST[";":";",1:",") "RTN","XLFSTR",26,0) ; "RTN","XLFSTR",27,0) INVERT(X) ; "RTN","XLFSTR",28,0) N %,%1 S %="" F %1=$L(X):-1:1 S %=%_$E(X,%1) "RTN","XLFSTR",29,0) Q % "RTN","XLFSTR",30,0) ; "RTN","XLFSTR",31,0) REPLACE(IN,SPEC) ;See $$REPLACE in MDC minutes. "RTN","XLFSTR",32,0) Q:'$D(IN) "" Q:$D(SPEC)'>9 IN N %1,%2,%3,%4,%5,%6,%7,%8 "RTN","XLFSTR",33,0) S %1=$L(IN),%7=$J("",%1),%3="",%6=9999 F S %3=$O(SPEC(%3)) Q:%3="" S %6(%6)=%3,%6=%6-1 "RTN","XLFSTR",34,0) F %6=0:0 S %6=$O(%6(%6)) Q:%6'>0 S %3=%6(%6) D:$D(SPEC(%3))#2 RE1 "RTN","XLFSTR",35,0) S %8="" F %2=1:1:%1 D RE3 "RTN","XLFSTR",36,0) Q %8 "RTN","XLFSTR",37,0) ; "RTN","XLFSTR",38,0) RE1 S %4=$L(%3),%5=0 F S %5=$F(IN,%3,%5) Q:%5<1 D RE2 "RTN","XLFSTR",39,0) Q "RTN","XLFSTR",40,0) RE2 Q:$E(%7,%5-%4,%5-1)["X" S %8(%5-%4)=SPEC(%3) "RTN","XLFSTR",41,0) F %2=%5-%4:1:%5-1 S %7=$E(%7,1,%2-1)_"X"_$E(%7,%2+1,%1) "RTN","XLFSTR",42,0) Q "RTN","XLFSTR",43,0) RE3 I $E(%7,%2)=" " S %8=%8_$E(IN,%2) Q "RTN","XLFSTR",44,0) S:$D(%8(%2)) %8=%8_%8(%2) "RTN","XLFSTR",45,0) Q "RTN","XLFSTR",46,0) ; "RTN","XLFSTR",47,0) RJ(%,%1,%2) ;Right justify "RTN","XLFSTR",48,0) N %3 "RTN","XLFSTR",49,0) S:%1["T" %1=+%1,%=$E(%,1,%1) "RTN","XLFSTR",50,0) S %3=$J("",%1-$L(%)) S:$D(%2) %3=$TR(%3," ",%2) "RTN","XLFSTR",51,0) Q %3_% "RTN","XLFSTR",52,0) ; "RTN","XLFSTR",53,0) LJ(%,%1,%2) ;Left justify "RTN","XLFSTR",54,0) N %3 "RTN","XLFSTR",55,0) S:%1["T" %1=+%1,%=$E(%,1,%1) "RTN","XLFSTR",56,0) S %3=$J("",%1-$L(%)) S:$G(%2)]"" %3=$TR(%3," ",%2) "RTN","XLFSTR",57,0) Q %_%3 "RTN","XLFSTR",58,0) ; "RTN","XLFSTR",59,0) CJ(%,%1,%2) ;Center Justify "RTN","XLFSTR",60,0) N %3,%4 "RTN","XLFSTR",61,0) S:%1["T" %1=+%1,%=$E(%,1,%1) S %3=%1-$L(%) Q:%3<1 % "RTN","XLFSTR",62,0) S %3=%3\2,%4=$J("",%3+1) I $G(%2)]"" S %4=$TR(%4," ",%2) "RTN","XLFSTR",63,0) Q $E(%4,1,%3)_%_$E(%4,1,%1-%3-$L(%)) "RTN","XLFSTR",64,0) ; "RTN","XLFSTR",65,0) QUOTE(%) ;Add quotes to value for concatenation "RTN","XLFSTR",66,0) S %(%)=0,%=$Q(%) "RTN","XLFSTR",67,0) Q $P($E(%,1,$L(%)-1),"(",2,999) "RTN","XLFSTR",68,0) ; "RTN","XLFSTR",69,0) TRIM(%X,%F,%V) ;Trim spaces\char from front(left)/back(right) of string "RTN","XLFSTR",70,0) N %R,%L "RTN","XLFSTR",71,0) S %F=$$UP($G(%F,"LR")),%L=1,%R=$L(%X),%V=$G(%V," ") "RTN","XLFSTR",72,0) ;I %F["R" F %R=$L(%X):-1:1 Q:$E(%X,%R)'=%V ;take out BT "RTN","XLFSTR",73,0) I %F["R" F %R=$L(%X):-1:0 Q:$E(%X,%R)'=%V ;598 "RTN","XLFSTR",74,0) ;I %F["L" F %L=1:1:$L(%X) Q:$E(%X,%L)'=%V ;take out BT "RTN","XLFSTR",75,0) I %F["L" F %L=1:1:$L(%X)+1 Q:$E(%X,%L)'=%V ;598 "RTN","XLFSTR",76,0) I (%L>%R)!(%X=%V) Q "" "RTN","XLFSTR",77,0) Q $E(%X,%L,%R) "RTN","XLFSTR",78,0) ; "RTN","XLFSTR",79,0) SENTENCE(%X) ; "RTN","XLFSTR",80,0) ; Converts a string into proper sentence case (first letter of each sentence "RTN","XLFSTR",81,0) ; upper case, all the others lower case) "RTN","XLFSTR",82,0) ; Example Usage: "RTN","XLFSTR",83,0) ; W $$SENTENCE^XLFSTR("HELLO WORLD!!! THIS IS A CAPITALIZED SENTENCE. (this isn't.)") "RTN","XLFSTR",84,0) ; produces "RTN","XLFSTR",85,0) ; Hello world!!! This is a capitalized sentence. This isn't. "RTN","XLFSTR",86,0) ; "RTN","XLFSTR",87,0) ; %S = string during conversion "RTN","XLFSTR",88,0) ; %P = state flag (1 = next letter should be caps) "RTN","XLFSTR",89,0) ; I = iteration index "RTN","XLFSTR",90,0) ; C = current character "RTN","XLFSTR",91,0) ; "RTN","XLFSTR",92,0) N %I,%C,%S,%P "RTN","XLFSTR",93,0) S %S=$$LOW(%X),%P=1 "RTN","XLFSTR",94,0) F %I=1:1:$L(%X) D "RTN","XLFSTR",95,0) . S %C=$E(%S,%I) "RTN","XLFSTR",96,0) . I %P,%C?1L S $E(%S,%I)=$$UP(%C),%P=0 "RTN","XLFSTR",97,0) . S:".!?"[%C %P=1 "RTN","XLFSTR",98,0) Q %S "RTN","XLFSTR",99,0) ; "RTN","XLFSTR",100,0) TITLE(%X) ; "RTN","XLFSTR",101,0) ; Converts a string into TITLE CASE format (first letter of each word is uppercase) "RTN","XLFSTR",102,0) ; Example Usage: "RTN","XLFSTR",103,0) ; W $$TITLE^XLFSTR("THIS IS CAPITALIZED. (this isn't.)") "RTN","XLFSTR",104,0) ; produces "RTN","XLFSTR",105,0) ; This Is Capitalized. This Isn't. "RTN","XLFSTR",106,0) ; "RTN","XLFSTR",107,0) ; %S = string during conversion "RTN","XLFSTR",108,0) ; %P = state flag "RTN","XLFSTR",109,0) ; %I = iteration index "RTN","XLFSTR",110,0) ; %C = current character "RTN","XLFSTR",111,0) ; "RTN","XLFSTR",112,0) N %I,%C,%S,%P "RTN","XLFSTR",113,0) S %S=$$LOW(%X),%P=1 "RTN","XLFSTR",114,0) F %I=1:1:$L(%S) D "RTN","XLFSTR",115,0) . S %C=$E(%S,%I) "RTN","XLFSTR",116,0) . I %P,%C?1L S $E(%S,%I)=$$UP(%C),%P=0 "RTN","XLFSTR",117,0) . S:%C=" " %P=1 "RTN","XLFSTR",118,0) . Q "RTN","XLFSTR",119,0) Q %S "RTN","XU8P598") 0^^B632462^n/a "RTN","XU8P598",1,0) XU8P598 ; BA/BAYPINES CLEAN-UP PACKAGE FILE FOR KERNEL; 4/18/12 "RTN","XU8P598",2,0) ;;8.0;KERNEL;**598**; JUL 19 1995;Build 2 "RTN","XU8P598",3,0) Q "RTN","XU8P598",4,0) ; "RTN","XU8P598",5,0) POST ;CLEAN SUBFILE #9.402 OF THE PACKAGE FILE "RTN","XU8P598",6,0) N XUIEN,XUIEN1 "RTN","XU8P598",7,0) S (XUIEN,XUIEN1)=0 "RTN","XU8P598",8,0) S XUIEN1=$O(^DIC(9.4,"B","KERNEL",0)) "RTN","XU8P598",9,0) I +$G(XUIEN1)'>0 Q "RTN","XU8P598",10,0) I $P($G(^DIC(9.4,XUIEN1,0)),"^",1)'="KERNEL" Q "RTN","XU8P598",11,0) ; "RTN","XU8P598",12,0) I $G(^DIC(9.4,XUIEN1,20,0))="" Q "RTN","XU8P598",13,0) F S XUIEN=$O(^DIC(9.4,XUIEN1,20,XUIEN)) Q:+$G(XUIEN)'>0 D "RTN","XU8P598",14,0) . N DA,DIK S DA(1)=XUIEN1,DA=XUIEN,DIK="^DIC(9.4,"_DA(1)_",20," D ^DIK "RTN","XU8P598",15,0) Q "VER") 8.0^22.0 "BLD",1432,6) ^487 **END** **END**