LASET ;SLC/RWF - AUTO INSTRUMENTS SETUP VAR FOR DATA COLECTION ;2/19/91  12:03
 ;;5.2;AUTOMATED LAB INSTRUMENTS;**27,42,46,84**;Sep 27, 1994;Build 2
 ;
LA1 ;
 S:$D(ZTQUEUED) ZTREQ="@" ;Clean up
 I $G(TSK)<1 Q
 L +^LA("LOCK"):99999
 I $D(^LA("LOCK",TSK)) S TSK=0 L -^LA("LOCK") Q
 S ^LA("LOCK",TSK)=$J
 L -^LA("LOCK")
 ;
 K ^TMP($J),^TMP("LA",$J) S TRAY=1,CUP=1
 S ECHOALL=0,X=^LAB(62.4,TSK,0),U="^",LWL=$P(X,U,4),WL=$P(X,U,11) I 'WL K ^LA("LOCK",TSK) S TSK=0 Q
 S METH=$P(X,U,10),LROVER=+$P(X,U,12),LALCT=$P(X,U,5),LAZZ=$P(^LRO(68,WL,0),U,3),LADT=$S(LAZZ="D":DT,LAZZ="M":$E(DT,1,5)_"00",LAZZ="Y":$E(DT,1,3)_"0000")
 S LAGEN="S "_$P(X,U,6)_"="_$P(X,U,7)_" D "_$P(X,U,6)_"^LAGEN"
 S TP=0,NOW=$$NOW^XLFDT
 ;TC(I,0)=TEST NUMBER, TC(I,1)= STORAGE LOCATION, TC(I,2)= 'S V=$E(Y(A),12,15)' PARM1, TC(I,3)= PARM2, TC(I,4)=PARM3 or ^TMP("LA",$J,I,1)=STORAGE
 I "T"[LALCT F I=0:0 S I=$O(^LAB(62.4,TSK,3,I)) Q:I<1  S X=^(I,0),TC=I,TC(I,0)=+X,TC(I,1)=^(1),TC(I,2)=$P(X,U,2),TC(I,3)=$P(X,U,3),TC(I,4)=$P(X,U,4)
 I LALCT="U" F I=0:0 S I=$O(^LAB(62.4,TSK,3,I)) Q:I<1  S X=^(I,0),Y=^(1),TC=I,^TMP("LA",$J,I,0)=+X,^(1)=Y,^(2)=$P(X,U,2),^(3)=$P(X,U,3),^(4)=$P(X,U,4)
 S LRTST="" F I=0:0 S I=$O(TC(I)) Q:$L(LRTST)>245!(I="")  S LRTST=LRTST_TC(I,0)_U
 S LRUTLITY=1 D GET^LRNORMAL:$D(LRTOP)
LA2 K LRUTLITY,LRTST,LRTOP,%DT Q
TRAP S X="TRAP^"_LANM,@^%ZOSF("TRAP")
 Q
NEW D SET Q:ER  S ZTRTN=U_$P(^LAB(62.4,T,0),U,3),ZTDTH=$H,ZTIO="",ZTDESC=" Starting Automated Routine "_ZTRTN D ^%ZTLOAD:$L(ZTRTN)
 Q
RESTART I $D(^LA(T,"I",0)) S ZTRTN=$P(^LAB(62.4,T,0),U,3),ZTDTH=$H,ZTIO="",ZTDESC="Restarting Automated Routine "_ZTRTN D ^%ZTLOAD:$L(ZTRTN)
 Q
SET S ER=$D(^LA(T,"I")) Q:ER  S:'$D(^LA(T,"I"))#2 ^LA(T,"I")=0,^("I",0)=0 Q:$D(^LA(T,"ENV"))  D GETENV^%ZOSV S ^LA(T,"ENV")=Y Q
SETO S:'$D(^LA(T,"O"))#2 ^LA(T,"O")=0,^("O",0)=0 Q:$D(^LA(T,"ENV"))  D GETENV^%ZOSV S ^LA(T,"ENV")=Y Q
 ;^LA(T,"ENV")=UCI^VOLUME SET^VAX NODE
ERROR S ^TMP($J,1)=LANM,^(2)=TSK D ^LABERR S LANM=^TMP($J,1),TSK=^(2),U="^"
 Q
 ;
RMK ;Set up nodes for comments from the instrument
 ; This entry point for LSI/direct connect interfaces which are coded to
 ; pass multiple remarks delimited by ";".
 N LACOM,LAII
 F LAII=1:1 S LACOM=$P(RMK,";",LAII) Q:'$L(LACOM)  D RMKSET(LWL,ISQN,LACOM,"")
 Q
 ;
RMKSET(LAWL,LAISQN,LARMK,LARMKP) ; Set remark in LAH global
 ; Call with  LAWL = pointer to load/worklist  (entry in LAH)
 ;          LAISQN = sequence number of entry in LAH
 ;           LARMK = remark(comment to store)
 ;          LARMKP = string to precede each remark, i.e. "For test..."
 ; Used by above
 ; Used by univeral interfaces (LA7*) to set remarks without using ";" as delimiter. Allows ";" in text of remark.
 N DIWF,DIWL,DIWR,LAI,X,Y
 I '$G(LAWL)!('$G(LAISQN)) Q
 S LARMK=$G(LARMK),LARMKP=$G(LARMKP) ; Make sure variables defined
 I ($L(LARMK)+$L(LARMKP))'>68 D  Q  ; Comment 68 characters or less
 . S LAI=$O(^LAH(LAWL,1,LAISQN,1,""),-1)+1 ; Get next subscript to store comment.
 . S ^LAH(LAWL,1,LAISQN,1,LAI)=LARMKP_LARMK ; Store comment
 ; Comment greater than 68 characters, need to reformat.
 K ^UTILITY($J,"W")
 S X=LARMK,DIWL=1,DIWR=68-$L(LARMKP),DIWF="|",LAX=0 D ^DIWP ; Call FileMan to reformat.
 F  S LAX=$O(^UTILITY($J,"W",DIWL,LAX)) Q:'LAX  D
 . S LAI=$O(^LAH(LAWL,1,LAISQN,1,""),-1)+1
 . S ^LAH(LAWL,1,LAISQN,1,LAI)=LARMKP_$G(^UTILITY($J,"W",DIWL,LAX,0))
 K ^UTILITY($J,"W")
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLASET   3408     printed  Sep 23, 2025@19:20:11                                                                                                                                                                                                       Page 2
LASET     ;SLC/RWF - AUTO INSTRUMENTS SETUP VAR FOR DATA COLECTION ;2/19/91  12:03
 +1       ;;5.2;AUTOMATED LAB INSTRUMENTS;**27,42,46,84**;Sep 27, 1994;Build 2
 +2       ;
LA1       ;
 +1       ;Clean up
           if $DATA(ZTQUEUED)
               SET ZTREQ="@"
 +2        IF $GET(TSK)<1
               QUIT 
 +3        LOCK +^LA("LOCK"):99999
 +4        IF $DATA(^LA("LOCK",TSK))
               SET TSK=0
               LOCK -^LA("LOCK")
               QUIT 
 +5        SET ^LA("LOCK",TSK)=$JOB
 +6        LOCK -^LA("LOCK")
 +7       ;
 +8        KILL ^TMP($JOB),^TMP("LA",$JOB)
           SET TRAY=1
           SET CUP=1
 +9        SET ECHOALL=0
           SET X=^LAB(62.4,TSK,0)
           SET U="^"
           SET LWL=$PIECE(X,U,4)
           SET WL=$PIECE(X,U,11)
           IF 'WL
               KILL ^LA("LOCK",TSK)
               SET TSK=0
               QUIT 
 +10       SET METH=$PIECE(X,U,10)
           SET LROVER=+$PIECE(X,U,12)
           SET LALCT=$PIECE(X,U,5)
           SET LAZZ=$PIECE(^LRO(68,WL,0),U,3)
           SET LADT=$SELECT(LAZZ="D":DT,LAZZ="M":$EXTRACT(DT,1,5)_"00",LAZZ="Y":$EXTRACT(DT,1,3)_"0000")
 +11       SET LAGEN="S "_$PIECE(X,U,6)_"="_$PIECE(X,U,7)_" D "_$PIECE(X,U,6)_"^LAGEN"
 +12       SET TP=0
           SET NOW=$$NOW^XLFDT
 +13      ;TC(I,0)=TEST NUMBER, TC(I,1)= STORAGE LOCATION, TC(I,2)= 'S V=$E(Y(A),12,15)' PARM1, TC(I,3)= PARM2, TC(I,4)=PARM3 or ^TMP("LA",$J,I,1)=STORAGE
 +14       IF "T"[LALCT
               FOR I=0:0
                   SET I=$ORDER(^LAB(62.4,TSK,3,I))
                   if I<1
                       QUIT 
                   SET X=^(I,0)
                   SET TC=I
                   SET TC(I,0)=+X
                   SET TC(I,1)=^(1)
                   SET TC(I,2)=$PIECE(X,U,2)
                   SET TC(I,3)=$PIECE(X,U,3)
                   SET TC(I,4)=$PIECE(X,U,4)
 +15       IF LALCT="U"
               FOR I=0:0
                   SET I=$ORDER(^LAB(62.4,TSK,3,I))
                   if I<1
                       QUIT 
                   SET X=^(I,0)
                   SET Y=^(1)
                   SET TC=I
                   SET ^TMP("LA",$JOB,I,0)=+X
                   SET ^(1)=Y
                   SET ^(2)=$PIECE(X,U,2)
                   SET ^(3)=$PIECE(X,U,3)
                   SET ^(4)=$PIECE(X,U,4)
 +16       SET LRTST=""
           FOR I=0:0
               SET I=$ORDER(TC(I))
               if $LENGTH(LRTST)>245!(I="")
                   QUIT 
               SET LRTST=LRTST_TC(I,0)_U
 +17       SET LRUTLITY=1
           if $DATA(LRTOP)
               DO GET^LRNORMAL
LA2        KILL LRUTLITY,LRTST,LRTOP,%DT
           QUIT 
TRAP       SET X="TRAP^"_LANM
           SET @^%ZOSF("TRAP")
 +1        QUIT 
NEW        DO SET
           if ER
               QUIT 
           SET ZTRTN=U_$PIECE(^LAB(62.4,T,0),U,3)
           SET ZTDTH=$HOROLOG
           SET ZTIO=""
           SET ZTDESC=" Starting Automated Routine "_ZTRTN
           if $LENGTH(ZTRTN)
               DO ^%ZTLOAD
 +1        QUIT 
RESTART    IF $DATA(^LA(T,"I",0))
               SET ZTRTN=$PIECE(^LAB(62.4,T,0),U,3)
               SET ZTDTH=$HOROLOG
               SET ZTIO=""
               SET ZTDESC="Restarting Automated Routine "_ZTRTN
               if $LENGTH(ZTRTN)
                   DO ^%ZTLOAD
 +1        QUIT 
SET        SET ER=$DATA(^LA(T,"I"))
           if ER
               QUIT 
           if '$DATA(^LA(T,"I"))#2
               SET ^LA(T,"I")=0
               SET ^("I",0)=0
           if $DATA(^LA(T,"ENV"))
               QUIT 
           DO GETENV^%ZOSV
           SET ^LA(T,"ENV")=Y
           QUIT 
SETO       if '$DATA(^LA(T,"O"))#2
               SET ^LA(T,"O")=0
               SET ^("O",0)=0
           if $DATA(^LA(T,"ENV"))
               QUIT 
           DO GETENV^%ZOSV
           SET ^LA(T,"ENV")=Y
           QUIT 
 +1       ;^LA(T,"ENV")=UCI^VOLUME SET^VAX NODE
ERROR      SET ^TMP($JOB,1)=LANM
           SET ^(2)=TSK
           DO ^LABERR
           SET LANM=^TMP($JOB,1)
           SET TSK=^(2)
           SET U="^"
 +1        QUIT 
 +2       ;
RMK       ;Set up nodes for comments from the instrument
 +1       ; This entry point for LSI/direct connect interfaces which are coded to
 +2       ; pass multiple remarks delimited by ";".
 +3        NEW LACOM,LAII
 +4        FOR LAII=1:1
               SET LACOM=$PIECE(RMK,";",LAII)
               if '$LENGTH(LACOM)
                   QUIT 
               DO RMKSET(LWL,ISQN,LACOM,"")
 +5        QUIT 
 +6       ;
RMKSET(LAWL,LAISQN,LARMK,LARMKP) ; Set remark in LAH global
 +1       ; Call with  LAWL = pointer to load/worklist  (entry in LAH)
 +2       ;          LAISQN = sequence number of entry in LAH
 +3       ;           LARMK = remark(comment to store)
 +4       ;          LARMKP = string to precede each remark, i.e. "For test..."
 +5       ; Used by above
 +6       ; Used by univeral interfaces (LA7*) to set remarks without using ";" as delimiter. Allows ";" in text of remark.
 +7        NEW DIWF,DIWL,DIWR,LAI,X,Y
 +8        IF '$GET(LAWL)!('$GET(LAISQN))
               QUIT 
 +9       ; Make sure variables defined
           SET LARMK=$GET(LARMK)
           SET LARMKP=$GET(LARMKP)
 +10      ; Comment 68 characters or less
           IF ($LENGTH(LARMK)+$LENGTH(LARMKP))'>68
               Begin DoDot:1
 +11      ; Get next subscript to store comment.
                   SET LAI=$ORDER(^LAH(LAWL,1,LAISQN,1,""),-1)+1
 +12      ; Store comment
                   SET ^LAH(LAWL,1,LAISQN,1,LAI)=LARMKP_LARMK
               End DoDot:1
               QUIT 
 +13      ; Comment greater than 68 characters, need to reformat.
 +14       KILL ^UTILITY($JOB,"W")
 +15      ; Call FileMan to reformat.
           SET X=LARMK
           SET DIWL=1
           SET DIWR=68-$LENGTH(LARMKP)
           SET DIWF="|"
           SET LAX=0
           DO ^DIWP
 +16       FOR 
               SET LAX=$ORDER(^UTILITY($JOB,"W",DIWL,LAX))
               if 'LAX
                   QUIT 
               Begin DoDot:1
 +17               SET LAI=$ORDER(^LAH(LAWL,1,LAISQN,1,""),-1)+1
 +18               SET ^LAH(LAWL,1,LAISQN,1,LAI)=LARMKP_$GET(^UTILITY($JOB,"W",DIWL,LAX,0))
               End DoDot:1
 +19       KILL ^UTILITY($JOB,"W")
 +20       QUIT