COMPILE FUNCTION Comm_Dialog_Load_Epi_Pro(Method, Parm1, Parm2) #pragma precomp SRP_PreCompiler /* Commuter module for Dialog_Load_Epi_Pro window. 03/13/2006 - John C. Henry, J.C. Henry & Co., Inc. */ DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, obj_RDS2, Send_Event, RDS_React_Run, Send_Info DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, End_Dialog, Send_Message, obj_WM_IN, obj_WM_Wfrs, obj_React_Status DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, obj_WM_In, Send_Message, obj_NCR, obj_WM_Wfrs DECLARE FUNCTION SRP_Array, Database_Services, Set_Property EQU CRLF$ TO \0D0A\ $INSERT POPUP_EQUATES $INSERT LOGICAL $INSERT MSG_EQUATES $INSERT RDS_EQU $INSERT RDS_TEST_EQUATES $INSERT EPI_SUSCEPTOR_EQUATES $INSERT WO_LOG_EQUATES $INSERT EPI_PART_EQUATES $INSERT RDS_EPILOAD $INSERT WO_STEP_EQU $INSERT NCR_EQU $INSERT APPCOLORS EQU COL$WM_CASS_IN TO 1 EQU COL$WM_SLOT_IN TO 2 EQU COL$POCKET TO 1 EQU COL$USAGE TO 2 EQU COL$ZONE TO 3 EQU COL$IN_CASS TO 4 EQU COL$IN_SLOT TO 5 EQU COL$WAFER_TYPE TO 6 EQU COL$OUT_CASS TO 7 EQU COL$OUT_SLOT TO 8 EQU COL$NCR_NO TO 1 EQU COL$CASS_NO TO 2 EQU COL$SLOT_NO TO 3 EQU EDITABLE$ TO 4 EQU PROTECTED$ TO 8 ;* Protected - Edittable COLSTYLE constants EQU MULTILINE_STYLE$ TO 512 ;* MultiLine Select EQU LOCKED$ TO 8192 EQU DROPDOWN_STYLE$ TO 131072 ErrTitle = 'Error in Comm_Dialog_Load_Epi_Pro' ErrorMsg = '' Result = '' BEGIN CASE CASE Method = 'Create' ; GOSUB Create CASE Method = 'Cancel' ; GOSUB Cancel CASE Method = 'Close' ; GOSUB Close CASE Method = 'Refresh' ; GOSUB Refresh CASE Method = 'LoadMat' ; GOSUB LoadMat CASE Method = 'ReturnMat' ; GOSUB ReturnMat CASE Method = 'ReactIR' ; GOSUB ReactIR CASE Method = 'ReactDR' ; GOSUB ReactDR CASE Method = 'TestRun' ; GOSUB TestRun CASE Method = 'ConfigComp' ; GOSUB ConfigComp CASE 1 ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.') END CASE RETURN Result * * * * * * * Create: * * * * * * * obj_AppWindow('Create') * get the current style Style = Get_Property(@WINDOW:'.WM_IN', 'STYLE') IF Style [1,2] _EQC "0x" THEN CONVERT @LOWER.CASE TO @UPPER.CASE IN STYLE Style = ICONV(Style [3,99], "MX") END Style = BitOr(Style, MULTILINE_STYLE$) Set_Property(@WINDOW:'.WM_IN', "STYLE", Style) ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'') ReactorStyles = BitOr(ReactorStyles,DROPDOWN_STYLE$) Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles) Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'TEST':@VM:'PROD':@VM:'DUMMY') RDSNo = FIELD(Parm1,@FM,1) CurrentLoad = FIELD(Parm1,@FM,2,99) IF RDSNo = '' THEN ErrMsg('Null RDS No passed to Dialog Box...') End_Dialog(@WINDOW,'') END RDSRec = XLATE('RDS',RDSNo,'','X') ReactorNo = RDSRec WONo = RDSRec WOStep = FIELD(RDSRec,'*',2) Ctrls = @WINDOW:'.RDS_NO':@RM:@WINDOW:'.WO_NO':@RM:@WINDOW:'.WO_STEP':@RM:@WINDOW:'.REACTOR_NO' Props = 'DEFPROP':@RM: 'DEFPROP':@RM: 'DEFPROP':@RM: 'DEFPROP' Vals = RDSNo:@RM:WONo:@RM:WOStep:@RM:ReactorNo Set_Property(Ctrls,Props,Vals) LoadCnt = 0 OpenCnt = 0 RCtrl = @WINDOW:'.REACTOR_TABLE' TestInCass = CurrentLoad ;* 6/2/2009 JCH Better test for loaded wafers added CONVERT @VM TO '' IN TestInCass ;* 6/2/2009 JCH IF TestInCass = '' THEN EpiPartNo = XLATE('WO_LOG',WONo,WO_LOG_EPI_PART_NO$,'X') SubWaferSize = XLATE('EPI_PART',EpiPartNo,EPI_PART_SUB_WAFER_SIZE$,'X') BEGIN CASE CASE SubWaferSize = '150 mm 6 in' EpiSusceptor = XLATE('EPI_SUSCEPTOR','6','','X') CASE SubWaferSize = '125 mm 5 in' EpiSusceptor = XLATE('EPI_SUSCEPTOR','5','','X') CASE SubWaferSize = '200 mm 8 in' EpiSusceptor = XLATE('EPI_SUSCEPTOR','8','','X') CASE 1 ErrorMsg = 'Epi Part: ':QUOTE(EpiPartNo):' has a wafer size of ':SubWaferSize:'.':CRLF$:CRLF$ ErrorMsg := 'The EpiPRO reactors cannot process wafers of this size.' ErrMsg(ErrorMsg) End_Dialog(@WINDOW,'') END CASE Pockets = EpiSusceptor Zones = EpiSusceptor PTypes = EpiSusceptor FOR I = 1 TO COUNT(Pockets,@VM) + (Pockets NE '') Set_Property(RCtrl,'CELLPOS',Pockets<1,I>,COL$POCKET:@FM:I) ;* Loads Pocket Numbers - Default data from Susceptor Record Set_Property(RCtrl,'CELLPOS',PTypes<1,I>,COL$USAGE:@FM:I) ;* Test pockets Set_Property(RCtrl,'CELLPOS',Zones<1,I>,COL$ZONE:@FM:I) ;* Zones OpenCnt += 1 NEXT I END ELSE FOR I = 1 TO COUNT(CurrentLoad<1>,@VM) + (CurrentLoad<1> NE '') Set_Property(RCtrl,'CELLPOS',CurrentLoad,COL$POCKET:@FM:I) Set_Property(RCtrl,'CELLPOS',CurrentLoad,COL$USAGE:@FM:I) Set_Property(RCtrl,'CELLPOS',CurrentLoad,COL$ZONE:@FM:I) Set_Property(RCtrl,'CELLPOS',CurrentLoad,COL$IN_CASS:@FM:I) Set_Property(RCtrl,'CELLPOS',CurrentLoad,COL$IN_SLOT:@FM:I) Set_Property(RCtrl,'CELLPOS',CurrentLoad,COL$WAFER_TYPE:@FM:I) LoadCnt += 1 NEXT I END Set_Property(@WINDOW,'@OPEN_POCKETS',OpenCnt) IF LoadCnt = 0 AND OpenCnt = 0 THEN ErrMsg('LoadCnt = 0 and OpenCnt = 0, internal program error.') End_Dialog(@WINDOW,'') END BEGIN CASE CASE LoadCnt > 0 * Loaded BriefTxt = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}' BriefTxt := '{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\b\f0\fs20 Return Material to Inbound Cassette\par' BriefTxt := '\b0\par' BriefTxt := ' 1.) Return Material to Inbound Cassette\b\par' BriefTxt := '\b0\par' BriefTxt := '}' Set_Property(@WINDOW:'.CONFIG_COMPLETE','VISIBLE',0) Set_Property(@WINDOW:'.TEST_RUN','VISIBLE',0) Set_Property(@WINDOW:'.LOAD_MATERIAL','VISIBLE',0) Set_Property(@WINDOW:'.RETURN_MATERIAL','VISIBLE',1) Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',0) Set_Property(@WINDOW:'.RETURN_MATERIAL','ENABLED',1) ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'') ReactorStyles = BitAnd(ReactorStyles,BitNot(DROPDOWN_STYLE$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(DROPDOWN_STYLE$)) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'') Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$WAFER_TYPE,'') Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles) CASE OpenCnt > 0 * Ready to Load BriefTxt = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}' BriefTxt := '{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\b\f0\fs20\par' BriefTxt := ' Load Material into EPIPro Reactor\par' BriefTxt := '\b0\par' BriefTxt := ' 1.) Configure Pocket Utilization & Wafer Types\par' BriefTxt := ' 2.) Check Load Configuration Complete checkbox\par' BriefTxt := ' 3.) Verify Inbound Material\par' BriefTxt := ' 4.) Load Material into Reactor\par' BriefTxt := '\par' BriefTxt := '}' Set_Property(@WINDOW:'.CONFIG_COMPLETE','VISIBLE',1) Set_Property(@WINDOW:'.TEST_RUN','VISIBLE',1) Set_Property(@WINDOW:'.LOAD_MATERIAL','VISIBLE',1) Set_Property(@WINDOW:'.RETURN_MATERIAL','VISIBLE',0) Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',0) Set_Property(@WINDOW:'.RETURN_MATERIAL','ENABLED',0) ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'') ReactorStyles = BitOr(ReactorStyles,DROPDOWN_STYLE$) ReactorStyles = BitOr(ReactorStyles,DROPDOWN_STYLE$) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles) Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'TEST':@VM:'PROD':@VM:'DUMMY') Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$WAFER_TYPE,'':@VM:'TEST') Set_Property('SYSTEM','FOCUS',@WINDOW:'.REACTOR_TABLE') CASE 1 END CASE Set_Property(@WINDOW:'.BRIEF_EDITBOX','RTFTEXT',BriefTxt) WOStepKey = RDSRec WONo = WOStepKey[1,'*'] WOStep = WOStepKey[COL2()+1,'*'] GOSUB Refresh RecordLocked = False$ InboundMat = Get_Property(@Window:'.WM_IN', 'ARRAY') If InboundMat NE '' then CassNos = InboundMat<1> CassNos = SRP_Array('Clean', CassNos, 'TrimAndMakeUnique', @VM) If CassNos NE '' then For each CassNo in CassNos using @VM setting vPos WMInKey = WONo:'*1*':CassNo RecordLocked = Database_Services('IsKeyIDLocked', 'WM_IN', WMInKey) If RecordLocked then LockOwner = Xlate('WM_IN', WMInKey, 'LOCKED_BY', 'X') If LockOwner NE '' then DisplayName = Oconv(LockOwner,'[XLATE_CONV,LSL_USERS*FIRST_LAST]') end else DisplayName = 'an unknown user' end MsgParms = '' MsgParms<1> = 'Record Locked' MsgParms<2> = 'The WM_IN record for this RDS is locked by ':DisplayName:'. Only one user session at a time can edit an RDS.' Msg(@Window, '', 'OK', '', MsgParms) // Disable Load button Set_Property(@Window:'.LOAD_MATERIAL', 'ENABLED', -1) Set_Property(@Window:'.TEST_RUN', 'ENABLED', -1) end Until RecordLocked EQ True$ Next CassNo end end RETURN * * * * * * * Close: * * * * * * * * * * * * * * Cancel: * * * * * * * RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP') WMILocks = Get_Property(@WINDOW,'@LOCKED_WFRS') IF WMILocks NE '' THEN obj_WM_Wfrs('UnlockSet','WMI_WFRS':@RM:WMILocks) ; * Remove locks on the wafer slots END Set_Property(@WINDOW,'@LOCKED_WFRS','') End_Dialog(@WINDOW,'') IF RDSNo NE '' THEN Set_Property('RDS.RDS_NO','DEFPROP',RDSNo) Send_Event('RDS','READ') END RETURN * * * * * * * Refresh: * * * * * * * RCtrl = @WINDOW:'.REACTOR_TABLE' WMICtrl = @WINDOW:'.WM_IN' ReactorList = Get_Property(RCtrl,'LIST') WMInList = Get_Property(WMICtrl,'LIST') OpenTestCnt = 0 OpenProdCnt = 0 LineColor = '' FOR I = 1 TO COUNT(ReactorList,@FM) + (ReactorList NE '') IF ReactorList NE '' THEN IF ReactorList = 'TEST' THEN Send_Message(RCtrl,'COLOR_BY_POS',0,I,YELLOW$) IF ReactorList = '' THEN OpenTestCnt += 1 END IF ReactorList = 'DUMMY' THEN Send_Message(RCtrl,'COLOR_BY_POS',0,I,WHITE$) END IF ReactorList = 'PROD' OR ReactorList = '' THEN Set_Property(RCtrl,'CELLPOS','',COL$USAGE:@FM:I) Zone = ReactorList IF Zone = 1 THEN LineColor = RCV_BLUE$ IF Zone = 2 THEN LineColor = PRE_BLUE$ IF Zone = 3 THEN LineColor = INP_BLUE$ IF Zone = 4 THEN LineColor = POS_BLUE$ Send_Message(RCtrl,'COLOR_BY_POS',0,I,LineColor) END IF (ReactorList = '' OR ReactorList = 'PROD') AND ReactorList = '' THEN OpenProdCnt += 1 END NEXT I Set_Property(@WINDOW:'.OPEN_PROD_POCKETS','DEFPROP',OpenProdCnt) Set_Property(@WINDOW:'.OPEN_TEST_POCKETS','DEFPROP',OpenTestCnt) ReadyToLoad = 0 WMICnt = COUNT(WMInList,@FM) + (WMInList NE '') FOR I = 1 TO WMICnt IF WMInList NE '' THEN ReadyToLoad = 1 UNTIL ReadyToLoad NEXT I RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT') BlockLoad = Xlate('RDS', RDSNo, 'BLOCK_LOAD', 'X') If BlockLoad EQ True$ then ReadyToLoad = False$ IF ReadyToLoad THEN Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',1) END ELSE Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',0) END RETURN * * * * * * * LoadMat: * * * * * * * WMInLoadList = Get_Property(@WINDOW:'.WM_IN','LIST') ReactorList = Get_Property(@WINDOW:'.REACTOR_TABLE','LIST') WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP') RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP') SelectedRows = '' WMIWaferKeys = '' FOR I = 1 TO COUNT(WMInLoadList,@FM) + (WMInLoadList NE '') IF WMInLoadList NE '' AND WMInLoadList NE '' THEN WMIWaferKeys<1,-1> = WONo:'*':WOStep:'*':WMInLoadList:'*':WMInLoadList END NEXT I OrgColor = Set_Property('DIALOG_LOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',YELLOW$) ;* //////// Messaging Set_Status(0) obj_RDS2('LoadMat',RDSNo:@RM:ReactorList:@RM:WMIWaferKeys) IF Get_Status(errCode) THEN ErrMsg(errCode) END WMILocks = Get_Property(@WINDOW,'@LOCKED_WFRS') IF WMILocks NE '' THEN obj_WM_Wfrs('UnlockSet','WMI_WFRS':@RM:WMILocks) ; * Remove locks on the wafer slots END Set_Property(@WINDOW,'@LOCKED_WFRS','') End_Dialog(@WINDOW,'') Set_Property('RDS.RDS_NO','DEFPROP',RDSNo) Send_Event('RDS','READ') RETURN GOSUB REFRESH RETURN * * * * * * * ReturnMat: * * * * * * * RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP') IF RDSNo = '' THEN RETURN OrgColor = Set_Property('DIALOG_LOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',YELLOW$) ;* //////// Messaging Set_Status(0) obj_RDS2('ReturnMat',RDSNo) Send_Info(STR(' ',60)) ;** - Messaging - ** Dummy = Set_Property('DIALOG_LOAD_EPI_PRO.STATUSLINE_FIX','BACKCOLOR',OrgColor) ;** - Messaging - ** IF Get_Status(ErrCode) THEN ErrMsg(ErrCode) END GOTO Close RETURN * * * * * * * ReactIR: * * * * * * * RowIndex = Parm1 IF RowIndex = '' THEN RETURN CtrlID = @WINDOW:'.REACTOR_TABLE' Dummy = Send_Message(CtrlID,'DELETE',RowIndex) GOSUB Refresh RETURN * * * * * * * ReactDR: * * * * * * * RowIndex = Parm1 RowData = Parm2 IF RowIndex = '' THEN RETURN CtrlID = @WINDOW:'.REACTOR_TABLE' Dummy = Send_Message(CtrlID, "INSERT", RowIndex, RowData) GOSUB Refresh RETURN * * * * * * * TestRun: * * * * * * * ReactorArray = Get_Property(@WINDOW:'.REACTOR_TABLE','ARRAY') Usage = ReactorArray IF INDEX(Usage,'PROD',1) = 0 THEN LineCnt = COUNT(Usage,@VM) + (Usage NE '') FOR I = 1 To LineCnt IF ReactorArray NE '' AND Usage<1,I> = '' THEN ReactorArray = 'DUMMY' END Set_Property(@WINDOW:'.REACTOR_TABLE','ARRAY',ReactorArray) NEXT I END GOSUB Refresh RETURN * * * * * * * ConfigComp: * * * * * * * GOSUB Refresh WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP') CComp = Get_Property(@WINDOW:'.CONFIG_COMPLETE','CHECK') IF CComp THEN * Check for more pockets configured than avaible inbound wafers * WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP') RemainingWafers = obj_WM_In('RemainingSlots',WONo:@RM:WoStep) RWCnt = COUNT(RemainingWafers,@FM) + (RemainingWafers NE '') OpenProdPockets = Get_Property(@WINDOW:'.OPEN_PROD_POCKETS','DEFPROP') OpenTestPockets = Get_Property(@WINDOW:'.OPEN_TEST_POCKETS','DEFPROP') OpenPockets = OpenProdPockets + OpenTestPockets IF OpenPockets > RWCnt THEN Title = 'EpiPRO Reactor Load Configuration' Message = 'There are more slots configured for loading (':OpenPockets:') than WMI wafers remaining to load (':RWCnt:').':CRLF$:CRLF$ Message := 'Change ':(OpenPockets - RWCnt):' additional pockets to DUMMY load to correct.' TypeOver = '' TypeOver = '*' Msg(@WINDOW,TypeOver,'OK','',Title:@FM:Message) Set_Property(@WINDOW:'.CONFIG_COMPLETE','CHECK',0) RETURN END ;* End of check for more open slots than WMI wafers remaining to be used. * "lock down" reactor setup fields from further changes * ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'') ReactorStyles = BitAnd(ReactorStyles,BitNot(DROPDOWN_STYLE$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(DROPDOWN_STYLE$)) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) ReactorStyles = BitOr(ReactorStyles,PROTECTED$) Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'') Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$WAFER_TYPE,'') Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles) Set_Property(@WINDOW:'.TEST_RUN','VISIBLE',0) * Build list of WMI wafers to load * NeededProduct = FIELD(RemainingWafers,@FM,1,OpenPockets) WMIWaferKeys = '' WMICnt = COUNT(NeededProduct,@FM) + (NeededProduct NE '') FOR I = 1 TO WMICnt WMIWaferKeys<1,I> = WONo:'*':WOStep:'*':NeededProduct:'*':NeededProduct NEXT I Set_Status(0) LockedWMIKeys = obj_WM_Wfrs('LockSet','WMI_WFRS':@RM:WMIWaferKeys) IF Get_Status(errCode) THEN ErrMsg(errCode) RETURN END ELSE Set_Property(@WINDOW,'@LOCKED_WFRS',LockedWMIKeys) END FOR M = 1 TO OpenPockets Set_Property(@WINDOW:'.WM_IN','CELLPOS',NeededProduct,1:@FM:M) Set_Property(@WINDOW:'.WM_IN','CELLPOS',NeededProduct,2:@FM:M) NEXT M FOR M = OpenPockets + 1 TO 25 Set_Property(@WINDOW:'.WM_IN','CELLPOS','',1:@FM:M) Set_Property(@WINDOW:'.WM_IN','CELLPOS','',2:@FM:M) NEXT M END ELSE ReactorStyles = Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,'') ReactorStyles = BitOr(ReactorStyles,DROPDOWN_STYLE$) ReactorStyles = BitOr(ReactorStyles,DROPDOWN_STYLE$) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) ReactorStyles = BitAnd(ReactorStyles,BitNot(PROTECTED$)) Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$USAGE,'TEST':@VM:'PROD':@VM:'DUMMY') Send_Message(@WINDOW:'.REACTOR_TABLE','COLFORMAT',COL$WAFER_TYPE,'':@VM:'TEST') Send_Message(@WINDOW:'.REACTOR_TABLE','COLSTYLE',0,ReactorStyles) Set_Property(@WINDOW:'.TEST_RUN','VISIBLE',1) LockedWMIKeys = Get_Property(@WINDOW,'@LOCKED_WFRS') Set_Status(0) obj_WM_Wfrs('UnlockSet','WMI_WFRS':@RM:LockedWMIKeys) IF Get_Status(errCode) THEN ErrMsg(errCode) RETURN END ELSE Set_Property(@WINDOW,'@LOCKED_WFRS','') END FOR M = 1 TO 25 Set_Property(@WINDOW:'.WM_IN','CELLPOS','',1:@FM:M) Set_Property(@WINDOW:'.WM_IN','CELLPOS','',2:@FM:M) NEXT M END GOSUB Refresh RecordLocked = False$ InboundMat = Get_Property(@Window:'.WM_IN', 'ARRAY') If InboundMat NE '' then CassNos = InboundMat<1> CassNos = SRP_Array('Clean', CassNos, 'TrimAndMakeUnique', @VM) If CassNos NE '' then For each CassNo in CassNos using @VM setting vPos WMInKey = WONo:'*1*':CassNo RecordLocked = Database_Services('IsKeyIDLocked', 'WM_IN', WMInKey) If RecordLocked then LockOwner = Xlate('WM_IN', WMInKey, 'LOCKED_BY', 'X') If LockOwner NE '' then DisplayName = Oconv(LockOwner,'[XLATE_CONV,LSL_USERS*FIRST_LAST]') end else DisplayName = 'an unknown user' end MsgParms = '' MsgParms<1> = 'Record Locked' MsgParms<2> = 'The WM_OUT record for this RDS is locked by ':DisplayName:'. Only one user session at a time can edit an RDS.' Msg(@Window, '', 'OK', '', MsgParms) // Disable Load button Set_Property(@Window:'.LOAD_MATERIAL', 'ENABLED', -1) Set_Property(@Window:'.TEST_RUN', 'ENABLED', -1) Set_Property(@Window:'.CONFIG_COMPLETE', 'ENABLED', -1) end Until RecordLocked EQ True$ Next CassNo end end RETURN