OCXOCMP6 ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Assemble Order Check Routines) ;1/05/04 14:33 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32,221**;Dec 17,1997 ;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998 ; EN() ; ; Q:$G(OCXWARN) 1 N OCXD0,OCXD1,OCXRN,OCXSCNT,OCXOFF ; S OCXLCNT=0 ; W:'$G(OCXAUTO) !,?5,"Generate Extrinsic Function and Variables documentation..." S OCXD0=0 F S OCXD0=$O(^TMP("OCXCMP",$J,"C CODE",OCXD0)) Q:'OCXD0 D DOC^OCXOCMPT(OCXD0) ; K ^OCXS(860.3,"APGM") S OCXD0=0 F S OCXD0=$O(^OCXS(860.3,OCXD0)) Q:'OCXD0 D .K ^OCXS(860.3,OCXD0,"RTN") I '$G(OCXAUTO) W:($X>60) ! W "." ; K ^TMP("OCXCMP",$J,"D CODE") ; W:'$G(OCXAUTO) !,?5,"Assign Subroutines to Routines..." S OCXRN=1,OCXD0=0 D GETHDR(1) F S OCXD0=$O(^TMP("OCXCMP",$J,"C CODE",OCXD0)) Q:'OCXD0 D Q:OCXWARN .N OCXLLAB,OCXSKIP,OCXEXF,OCXSUB,OCXSIZE,OCXFILE,OCXCCODE,OCXDCODE,OCXLAST .I '$G(OCXAUTO) W:($X>60) ! W "." .S OCXLLAB=^TMP("OCXCMP",$J,"LINE",OCXD0) .S OCXSKIP=((OCXLLAB="UPDATE")!(OCXLLAB="LOG")) .S OCXSIZE=$$SIZE^OCXOCMP8(OCXRN,OCXD0) .S OCXLAST='$O(^TMP("OCXCMP",$J,"C CODE",OCXD0)) .S OCXFILE=(OCXSIZE>OCXCRS)!(OCXLAST) S:OCXSKIP OCXFILE=0 .I OCXFILE D ..K OCXEXF S OCXEXF="" ..I $D(^TMP("OCXCMP",$J,"D CODE",OCXRN,"CALLS")) M OCXEXF=^("CALLS") ..S OCXSUB="" F S OCXSUB=$O(OCXEXF(OCXSUB)) Q:'$L(OCXSUB) I 'OCXEXF(OCXSUB) D ...S OCXEXF(OCXSUB)=1,OCXEXF=OCXSUB ...S OCXSUB="" F S OCXSUB=$O(^TMP("OCXCMP",$J,"INCLUDE",OCXEXF,"CALLS",OCXSUB)) Q:'$L(OCXSUB) D ....S OCXEXF(OCXSUB)=$G(OCXEXF(OCXSUB)) ..S OCXSUB="" F S OCXSUB=$O(OCXEXF(OCXSUB)) Q:'$L(OCXSUB) D ...D APPEND^OCXOCMP8(OCXRN,OCXSUB,"F") ..D APPEND^OCXOCMP8(OCXRN,"$") ..S OCXRN=OCXRN+1 D GETHDR(OCXRN) ..; .D APPEND^OCXOCMP8(OCXRN,OCXD0,"C",OCXLLAB) .I ($E(OCXLLAB,1,2)="EL") D ..S ^OCXS(860.3,"APGM",(+$E(OCXLLAB,3,$L(OCXLLAB))),(OCXLLAB_U_$$RNAM(OCXRN)))="" .S $P(^TMP("OCXCMP",$J,"LINE",OCXD0),U,2)=$$RNAM(OCXRN) .Q:'OCXLAST .K OCXEXF S OCXEXF="" .I $D(^TMP("OCXCMP",$J,"D CODE",OCXRN,"CALLS")) M OCXEXF=^("CALLS") .S OCXSUB="" F S OCXSUB=$O(OCXEXF(OCXSUB)) Q:'$L(OCXSUB) I 'OCXEXF(OCXSUB) D ..S OCXEXF(OCXSUB)=1,OCXEXF=OCXSUB ..S OCXSUB="" F S OCXSUB=$O(^TMP("OCXCMP",$J,"INCLUDE",OCXEXF,"CALLS",OCXSUB)) Q:'$L(OCXSUB) D ...S OCXEXF(OCXSUB)=$G(OCXEXF(OCXSUB)) .S OCXSUB="" F S OCXSUB=$O(OCXEXF(OCXSUB)) Q:'$L(OCXSUB) D ..D APPEND^OCXOCMP8(OCXRN,OCXSUB,"F") .D APPEND^OCXOCMP8(OCXRN,"$") ; W:'$G(OCXAUTO) !,?5,"Resolve Routine Line Tags..." S OCXD0=0 F S OCXD0=$O(^TMP("OCXCMP",$J,"D CODE",OCXD0)) Q:'OCXD0 D Q:OCXWARN .I '$G(OCXAUTO) W:($X>60) ! W "." .N TEXT,RTN,TEMP,ALT,LABL,OBJ,PIEC .S RTN=$$RNAM(OCXD0) .K TEMP M TEMP=^TMP("OCXCMP",$J,"D CODE",OCXD0) .S OCXD1=0 F OCXOFF=0:1 S OCXD1=$O(TEMP(OCXD1)) Q:'OCXD1 D Q:OCXWARN ..N TEXT,PIEC ..S TEXT=TEMP(OCXD1,0) Q:'(TEXT["||") ..; ..F PIEC=2:2:$L(TEXT,"||") D Q:OCXWARN ...S LABL=$P(TEXT,"||",PIEC) ...I ($E(LABL,1,5)="LINE:") D I 1 ....S LABL=$G(^TMP("OCXCMP",$J,"LINE",+$P(LABL,":",2))) ....I '$L(LABL) D WARN^OCXOCMPV("Line Label not found: "_$P(TEXT,"|",2),$P($T(+1)," ",1)) Q ....S:($P(LABL,"^",2)=RTN) LABL=$P(LABL,"^",1) ...; ...E I ($E(LABL,1,5)="LNTAG") D I 1 ....N D0,CNT ....S D0=OCXD1 F CNT=1:1 S D0=$O(TEMP(D0),-1) Q:$L($P(TEMP(D0,0)," ",1)) ....S LABL=$P(TEMP(D0,0)," ",1) S:(LABL["(") LABL=$P(LABL,"(",1) ....S LABL="(+$P($H,"","",2))_""<"_LABL_"+"_CNT_U_RTN_">""" ...; ...E D WARN^OCXOCMPV("Unknown Compiler directive: "_LABL,$P($T(+1)," ",1)) Q ...; ...S $P(TEXT,"||",PIEC)=LABL ..; ..F Q:'(TEXT["||") S TEXT=$P(TEXT,"||",1)_$P(TEXT,"||",2,999) ..S TEMP(OCXD1,0)=TEXT .; .K ^TMP("OCXCMP",$J,"D CODE",OCXD0) .M ^TMP("OCXCMP",$J,"D CODE",OCXD0)=TEMP ; Q:OCXWARN 1 W:'$G(OCXAUTO) !,?5,"Generate Subroutine and Call documentation..." S OCXD0=0 F S OCXD0=$O(^TMP("OCXCMP",$J,"C CODE",OCXD0)) Q:'OCXD0 D CALL^OCXOCMPT(OCXD0) ; W:'$G(OCXAUTO) !!,?5,"Delete Old OCXOZ* Routines..." S OCXRTEST=^%ZOSF("TEST"),OCXSAVE=^%ZOSF("SAVE"),OCXDEL=^%ZOSF("DEL") F OCXRN=1:1:1290 D .I '$G(OCXAUTO) W:($X>60) ! W:'(OCXRN#100) "." .S X=$$RNAM(OCXRN) X OCXRTEST I X OCXDEL W:'$G(OCXAUTO) "!" ; W:'$G(OCXAUTO) !,?5,"File New OCXOZ* routines..." S OCXD0=$O(^TMP("OCXCMP",$J,"D CODE",0)) Q:'OCXD0 1 F S OCXD0=$O(^TMP("OCXCMP",$J,"D CODE",OCXD0)) Q:'OCXD0 D Q:OCXWARN .I '$G(OCXAUTO) W:($X>60) ! W "." .D FILE^OCXOCMP8(OCXD0) S OCXD0=$O(^TMP("OCXCMP",$J,"D CODE",0)) Q:'OCXD0 1 D FILE^OCXOCMP8(OCXD0) ; Q OCXWARN ; GETHDR(RNUM) ; ; N OCXREC,D0,EFC,OCXEFF,PIEC,TEXT S OCXREC(1,0)=$$RNAM(RNUM)_" ;SLC/RJS,CLA - Order Check Scan ;"_$$NOW S OCXREC(2,0)=$T(+2) S OCXREC(3,0)=$T(+3) S OCXREC(4,0)=" ;" S OCXREC(5,0)=" ; ***************************************************************" S OCXREC(6,0)=" ; ** Warning: This routine is automatically generated by the **" S OCXREC(7,0)=" ; ** Rule Compiler (^OCXOCMP) and ANY changes to this routine **" S OCXREC(8,0)=" ; ** will be lost the next time the rule compiler executes. **" S OCXREC(9,0)=" ; ***************************************************************" S OCXREC(10,0)=" ;" I (RNUM=1) D .S OCXREC(11,0)=" ; compiled code line length: "_OCXCLL .S OCXREC(12,0)=" ; compiled routine size: "_OCXCRS .S OCXREC(13,0)=" ; triggered rule ignore period: "_OCXTSPI .S OCXREC(14,0)=" ;" .S OCXREC(15,0)=" ; Program Execution Trace Mode: "_$S($G(OCXTRACE):" ON",1:"OFF") .S OCXREC(16,0)=" ;" ; " ; Elapsed time logging: "_$S($G(OCXTLOG):" ON",1:"OFF") .S OCXREC(17,0)=" ; Raw Data Logging: "_$S($G(OCXDLOG):(" ON Keep data for "_OCXDLOG_" day"_$S(OCXDLOG=1:"",1:"s")_" then purge."),1:"OFF") .S OCXREC(18,0)=" ; Compiler mode: "_$S(($G(OCXAUTO)>1):"Queued",$G(OCXAUTO):" ON",1:"OFF") .S OCXREC(19,0)=" ; Compiled by: "_$P($G(^VA(200,+$G(DUZ),0)),U,1)_" (DUZ="_(+$G(DUZ))_")" .S OCXREC(20,0)=" Q" .S OCXREC(21,0)=" ;" ; E D .S OCXREC(11,0)=" Q" .S OCXREC(12,0)=" ;" ; M ^TMP("OCXCMP",$J,"D CODE",RNUM)=OCXREC Q ; RNAM(X) ; N CHAR S CHAR="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" Q "OCXOZ"_$E(CHAR,(X\36+1))_$E(CHAR,(X#36+1)) ; TODAY() N X,Y,%DT S X="T",%DT="" D ^%DT X ^DD("DD") Q Y ; NOW() N X,Y,%DT S X="N",%DT="T" D ^%DT X ^DD("DD") S:(Y["@") Y=$P(Y,"@",1)_" at "_$P(Y,"@",2,99) Q Y ;