- OCXOCMPO ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Get Compiler Function Subroutines) ;2/02/99 12:58
- ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32**;Dec 17,1997
- ;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
- ;
- EN() ;
- ;
- N OCXD0,OCXD1,OCXSR,OCXNAME
- ;
- S (OCXWARN,OCXD0)=0 F S OCXD0=$O(^OCXS(860.8,OCXD0)) Q:'OCXD0 D Q:OCXWARN
- .;
- .I '$G(OCXAUTO) W:($X>60) ! W "."
- .;
- .K OCXSR M OCXSR=^OCXS(860.8,OCXD0,"CODE")
- .K OCXSR(0)
- .S OCXD1=0 F S OCXD1=$O(OCXSR(OCXD1)) Q:'OCXD1 D
- ..S OCXMODE=$P(OCXSR(OCXD1,0),";",1)
- ..S OCXSR(OCXD1,0)=$P(OCXSR(OCXD1,0),";",2,999)
- ..F Q:'(OCXSR(OCXD1,0)["%%%%") S OCXSR(OCXD1,0)=$P(OCXSR(OCXD1,0),"""%%%%""",1)_"||LNTAG||"_$P(OCXSR(OCXD1,0),"""%%%%""",2,999)
- ..I (OCXMODE["T+"),'OCXTRACE K OCXSR(OCXD1)
- ..I (OCXMODE["T-"),OCXTRACE K OCXSR(OCXD1)
- ..I (OCXMODE["L+"),'OCXTLOG K OCXSR(OCXD1)
- .D REINDEX(.OCXSR,0)
- .Q:'$D(OCXSR(1,0))
- .I (OCXSR(1,0)[";"),'$L($P(OCXSR(1,0),";",2)) S OCXSR(1,0)=OCXSR(1,0)_" Compiler Function: "_$P($G(^OCXS(860.8,OCXD0,0)),U,1)
- .S OCXNAME=$P(OCXSR(1,0),";",1)
- .S:(OCXNAME["(") OCXNAME=$P(OCXNAME,"(",1)
- .I '$L(OCXNAME) D WARN^OCXOCMPV("Subroutine Name Not found",8,OCXD0,"EN+20^OCXOCMPO") Q
- .;
- .I OCXTRACE D
- ..F OCXD1=1:1,0 I OCXD1 Q:'$D(OCXSR(OCXD1,0)) Q:'($E($P(OCXSR(OCXD1,0)," ",2),1)=";")
- ..I OCXD1 S:(OCXD1>1) OCXD1=OCXD1-1 D
- ...N OCXPC,OCXARG,OCXARGL
- ...S OCXSR(OCXD1+.0001,0)=" W:$G(OCXTRACE) !,||LNTAG||,?27,""Compiler Function "_$P(OCXSR(1,0),";",1)_" Execution trace. """
- ...S OCXARGL=$P(OCXSR(1,0),";",1) Q:'(OCXARGL["(")
- ...S OCXARGL=$P($P(OCXARGL,"(",2),")",1)
- ...F OCXPC=1:1:$L(OCXARGL,",") S OCXARG=$P(OCXARGL,",",OCXPC) D
- ....S OCXSR(OCXD1+(OCXPC/100),0)=" W:$G(OCXTRACE) !,?35,"" "_$E(" ",1,(9-$L(OCXARG)))_OCXARG_": "",$G("_OCXARG_")"
- ...S OCXSR(OCXD1+(OCXPC+1/100),0)=" W:$G(OCXTRACE) !"
- ..D REINDEX(.OCXSR,0)
- .;
- .M ^TMP("OCXCMP",$J,"INCLUDE",OCXNAME)=OCXSR
- .;
- Q:OCXWARN 1
- ;
- ; Build local term lookup function
- ;
- D TERMLKUP^OCXOCMPU
- ;
- S OCXNAME="" F S OCXNAME=$O(^TMP("OCXCMP",$J,"INCLUDE",OCXNAME)) Q:'$L(OCXNAME) D
- .N LAST,SIZE,CALL,PC,SUBR
- .K OCXSR M OCXSR=^TMP("OCXCMP",$J,"INCLUDE",OCXNAME)
- .S LAST=$O(OCXSR(" "),-1)
- .S:'($G(OCXSR(LAST,0))=" ;") OCXSR(LAST+1,0)=" ;"
- .S OCXD1=0 F S OCXD1=$O(OCXSR(OCXD1)) Q:'OCXD1 D
- ..S SIZE=$G(SIZE)+$L(OCXSR(OCXD1,0))
- ..F PC=2:1:$L(OCXSR(OCXD1,0),"$$") D
- ...S SUBR=$P($P(OCXSR(OCXD1,0),"$$",PC),"(",1)
- ...I $D(^TMP("OCXCMP",$J,"INCLUDE",SUBR)) S OCXSR("CALLS",SUBR)=""
- .S OCXSR("SIZE")=SIZE
- .K ^TMP("OCXCMP",$J,"INCLUDE",OCXNAME)
- .M ^TMP("OCXCMP",$J,"INCLUDE",OCXNAME)=OCXSR
- ;
- Q 0
- ;
- REINDEX(ARRAY,NDX2) ;
- ;
- N TEMP,NDX1 M TEMP=ARRAY K ARRAY
- S NDX1="" F S NDX1=$O(TEMP(NDX1)) Q:'$L(NDX1) D
- .I $L(TEMP(NDX1,0)) S NDX2=NDX2+1 M ARRAY(NDX2)=TEMP(NDX1)
- Q
- ;
- OCXOCMPO ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Get Compiler Function Subroutines) ;2/02/99 12:58
- +1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32**;Dec 17,1997
- +2 ;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
- +3 ;
- EN() ;
- +1 ;
- +2 NEW OCXD0,OCXD1,OCXSR,OCXNAME
- +3 ;
- +4 SET (OCXWARN,OCXD0)=0
- FOR
- SET OCXD0=$ORDER(^OCXS(860.8,OCXD0))
- IF 'OCXD0
- QUIT
- Begin DoDot:1
- +5 ;
- +6 IF '$GET(OCXAUTO)
- IF ($X>60)
- WRITE !
- WRITE "."
- +7 ;
- +8 KILL OCXSR
- MERGE OCXSR=^OCXS(860.8,OCXD0,"CODE")
- +9 KILL OCXSR(0)
- +10 SET OCXD1=0
- FOR
- SET OCXD1=$ORDER(OCXSR(OCXD1))
- IF 'OCXD1
- QUIT
- Begin DoDot:2
- +11 SET OCXMODE=$PIECE(OCXSR(OCXD1,0),";",1)
- +12 SET OCXSR(OCXD1,0)=$PIECE(OCXSR(OCXD1,0),";",2,999)
- +13 FOR
- IF '(OCXSR(OCXD1,0)["%%%%")
- QUIT
- SET OCXSR(OCXD1,0)=$PIECE(OCXSR(OCXD1,0),"""%%%%""",1)_"||LNTAG||"_$PIECE(OCXSR(OCXD1,0),"""%%%%""",2,999)
- +14 IF (OCXMODE["T+")
- IF 'OCXTRACE
- KILL OCXSR(OCXD1)
- +15 IF (OCXMODE["T-")
- IF OCXTRACE
- KILL OCXSR(OCXD1)
- +16 IF (OCXMODE["L+")
- IF 'OCXTLOG
- KILL OCXSR(OCXD1)
- End DoDot:2
- +17 DO REINDEX(.OCXSR,0)
- +18 IF '$DATA(OCXSR(1,0))
- QUIT
- +19 IF (OCXSR(1,0)[";")
- IF '$LENGTH($PIECE(OCXSR(1,0),";",2))
- SET OCXSR(1,0)=OCXSR(1,0)_" Compiler Function: "_$PIECE($GET(^OCXS(860.8,OCXD0,0)),U,1)
- +20 SET OCXNAME=$PIECE(OCXSR(1,0),";",1)
- +21 IF (OCXNAME["(")
- SET OCXNAME=$PIECE(OCXNAME,"(",1)
- +22 IF '$LENGTH(OCXNAME)
- DO WARN^OCXOCMPV("Subroutine Name Not found",8,OCXD0,"EN+20^OCXOCMPO")
- QUIT
- +23 ;
- +24 IF OCXTRACE
- Begin DoDot:2
- +25 FOR OCXD1=1:1,0
- IF OCXD1
- IF '$DATA(OCXSR(OCXD1,0))
- QUIT
- IF '($EXTRACT($PIECE(OCXSR(OCXD1,0)," ",2),1)=";")
- QUIT
- +26 IF OCXD1
- IF (OCXD1>1)
- SET OCXD1=OCXD1-1
- Begin DoDot:3
- +27 NEW OCXPC,OCXARG,OCXARGL
- +28 SET OCXSR(OCXD1+.0001,0)=" W:$G(OCXTRACE) !,||LNTAG||,?27,""Compiler Function "_$PIECE(OCXSR(1,0),";",1)_" Execution trace. """
- +29 SET OCXARGL=$PIECE(OCXSR(1,0),";",1)
- IF '(OCXARGL["(")
- QUIT
- +30 SET OCXARGL=$PIECE($PIECE(OCXARGL,"(",2),")",1)
- +31 FOR OCXPC=1:1:$LENGTH(OCXARGL,",")
- SET OCXARG=$PIECE(OCXARGL,",",OCXPC)
- Begin DoDot:4
- +32 SET OCXSR(OCXD1+(OCXPC/100),0)=" W:$G(OCXTRACE) !,?35,"" "_$EXTRACT(" ",1,(9-$LENGTH(OCXARG)))_OCXARG_": "",$G("_OCXARG_")"
- End DoDot:4
- +33 SET OCXSR(OCXD1+(OCXPC+1/100),0)=" W:$G(OCXTRACE) !"
- End DoDot:3
- +34 DO REINDEX(.OCXSR,0)
- End DoDot:2
- +35 ;
- +36 MERGE ^TMP("OCXCMP",$JOB,"INCLUDE",OCXNAME)=OCXSR
- +37 ;
- End DoDot:1
- IF OCXWARN
- QUIT
- +38 IF OCXWARN
- QUIT 1
- +39 ;
- +40 ; Build local term lookup function
- +41 ;
- +42 DO TERMLKUP^OCXOCMPU
- +43 ;
- +44 SET OCXNAME=""
- FOR
- SET OCXNAME=$ORDER(^TMP("OCXCMP",$JOB,"INCLUDE",OCXNAME))
- IF '$LENGTH(OCXNAME)
- QUIT
- Begin DoDot:1
- +45 NEW LAST,SIZE,CALL,PC,SUBR
- +46 KILL OCXSR
- MERGE OCXSR=^TMP("OCXCMP",$JOB,"INCLUDE",OCXNAME)
- +47 SET LAST=$ORDER(OCXSR(" "),-1)
- +48 IF '($GET(OCXSR(LAST,0))=" ;")
- SET OCXSR(LAST+1,0)=" ;"
- +49 SET OCXD1=0
- FOR
- SET OCXD1=$ORDER(OCXSR(OCXD1))
- IF 'OCXD1
- QUIT
- Begin DoDot:2
- +50 SET SIZE=$GET(SIZE)+$LENGTH(OCXSR(OCXD1,0))
- +51 FOR PC=2:1:$LENGTH(OCXSR(OCXD1,0),"$$")
- Begin DoDot:3
- +52 SET SUBR=$PIECE($PIECE(OCXSR(OCXD1,0),"$$",PC),"(",1)
- +53 IF $DATA(^TMP("OCXCMP",$JOB,"INCLUDE",SUBR))
- SET OCXSR("CALLS",SUBR)=""
- End DoDot:3
- End DoDot:2
- +54 SET OCXSR("SIZE")=SIZE
- +55 KILL ^TMP("OCXCMP",$JOB,"INCLUDE",OCXNAME)
- +56 MERGE ^TMP("OCXCMP",$JOB,"INCLUDE",OCXNAME)=OCXSR
- End DoDot:1
- +57 ;
- +58 QUIT 0
- +59 ;
- REINDEX(ARRAY,NDX2) ;
- +1 ;
- +2 NEW TEMP,NDX1
- MERGE TEMP=ARRAY
- KILL ARRAY
- +3 SET NDX1=""
- FOR
- SET NDX1=$ORDER(TEMP(NDX1))
- IF '$LENGTH(NDX1)
- QUIT
- Begin DoDot:1
- +4 IF $LENGTH(TEMP(NDX1,0))
- SET NDX2=NDX2+1
- MERGE ARRAY(NDX2)=TEMP(NDX1)
- End DoDot:1
- +5 QUIT
- +6 ;