COMPILE FUNCTION Dialog_Unload_Gan(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5) /* Commuter module for Dialog_Unload_Susceptor window.- Cloned from COMM_DIAOLOG_LOAD_EPI_PRO 06/15/2016 - 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, obj_React_Run, obj_Run_Stage DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, End_Dialog, Send_Message, obj_MAT_INBOUND, 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, Set_Property, obj_WO_Mat_Wfr EQU CRLF$ TO \0D0A\ $INSERT POPUP_EQUATES $INSERT LOGICAL $INSERT MSG_EQUATES $INSERT RDS_EQU $INSERT REACT_RUN_EQUATES $INSERT REACTOR_EQUATES $INSERT RDS_TEST_EQUATES $INSERT EPI_SUSCEPTOR_EQUATES $INSERT WO_LOG_EQUATES $INSERT EPI_PART_EQUATES $INSERT RDS_EPILOAD $INSERT TOOL_EQUATES $INSERT WO_STEP_EQU $INSERT NCR_EQU $INSERT APPCOLORS $INSERT WO_WFR_EQUATES EQU COL$MI_SLOT_ID TO 1 EQU COL$MI_WFR_ID TO 2 EQU COL$MI_SCRIBE TO 3 EQU COL$POCKET TO 1 EQU COL$USAGE TO 2 EQU COL$ZONE TO 3 EQU COL$SAT_ID TO 4 EQU COL$WAFER_TYPE TO 5 EQU COL$IN_SLOT_ID TO 6 EQU COL$WFR_ID TO 7 EQU COL$OUT_SLOT_ID TO 8 EQU COL$CARR_SLOT_WFR TO 1 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 Dialog_Unload_Susceptor commuter module' ErrorMsg = '' ErrCode = '' Result = '' BEGIN CASE CASE EntID = @WINDOW BEGIN CASE CASE Event = 'CREATE' ; GOSUB Create CASE Event = 'CLOSE' ; GOSUB Close ;* This needs to be a PRECLOSE event! CASE Event[1,3] = 'QBF' ; GOSUB Refresh END CASE CASE EntID = @WINDOW:'.UNLOAD_WAFERS' AND Event = 'CLICK' ; GOSUB UnloadWfrs CASE EntID = @WINDOW:'.RELOAD_WAFERS' AND Event = 'CLICK' ; GOSUB ReloadWfrs CASE EntID = @WINDOW:'.CANCEL_BUTTON' AND Event = 'CLICK' ; GOSUB Cancel CASE EntID = @WINDOW:'.REACTOR_TABLE' AND Event = 'INSERTROW' ; GOSUB ReactIR CASE EntID = @WINDOW:'.REACTOR_TABLE' AND Event = 'DELETEROW' ; GOSUB ReactIR CASE 1 ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter' ErrMsg(ErrorMsg) END CASE IF ErrorMsg NE '' THEN ErrMsg(ErrTitle:@SVM:ErrorMsg) END RETURN Result * * * * * * * Create: * * * * * * * obj_AppWindow('Create') * get the current style Style = Get_Property(@WINDOW:'.MAT_INBOUND', '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 to Multi Line Select Set_Property(@WINDOW:'.MAT_INBOUND', "STYLE", Style) RDSNo = FIELD(Parm1,@FM,1) Stage = FIELD(Parm1,@FM,2) ToolID = FIELD(Parm1,@FM,3) CurrentLoad = FIELD(Parm1,@FM,4,99) IF RDSNo = '' THEN ErrMsg('Null RDS No passed to Dialog Box...') End_Dialog(@WINDOW,'') END RRunRec = XLATE('REACT_RUN',RDSNo,'','X') ReactorNo = ToolID[2,10] ReactType = XLATE('REACTOR',ReactorNo,REACTOR_REACT_TYPE$,'X') WONo = RRunRec WOStep = RRunRec GanRun = RRunRec Ctrls = @WINDOW:'.RDS_NO':@RM ; Props = 'DEFPROP':@RM ; Vals = RDSNo:@RM Ctrls := @WINDOW:'.GAN_RUN':@RM ; Props := 'DEFPROP':@RM ; Vals := GanRun:@RM Ctrls := @WINDOW:'.STAGE':@RM ; Props := 'DEFPROP':@RM ; Vals := Stage:@RM Ctrls := @WINDOW:'.TOOL_ID':@RM ; Props := 'DEFPROP':@RM ; Vals := ToolID:@RM Ctrls := @WINDOW:'.WO_NO':@RM ; Props := 'DEFPROP':@RM ; Vals := WONo:@RM Ctrls := @WINDOW:'.WO_STEP' ; Props := 'DEFPROP' ; Vals := WOStep 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 ErrMsg('No wafers loaded on the susceptor.') End_Dialog(@WINDOW,'') END ELSE ProdLoadCnt = 0 ProdUnloadCnt = 0 clCnt = COUNT(CurrentLoad<1>,@VM) + (CurrentLoad<1> NE '') FOR I = 1 TO clCnt Usage = CurrentLoad WfrType = CurrentLoad OutSlot = CurrentLoad IF WfrType = 'PROD' AND Usage = '' AND OutSlot = '' THEN ProdLoadCnt += 1 ;* Product wafers to be unloaded END IF OutSlot NE '' THEN ProdUnloadCnt += 1 END 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$WAFER_TYPE:@FM:I) Set_Property(RCtrl,'CELLPOS',CurrentLoad,COL$IN_SLOT_ID:@FM:I) Set_Property(RCtrl,'CELLPOS',CurrentLoad,COL$WFR_ID:@FM:I) Set_Property(RCtrl,'CELLPOS',CurrentLoad,COL$OUT_SLOT_ID:@FM:I) NEXT I END /* IF LoadCnt = 0 AND OpenCnt = 0 THEN ErrMsg('LoadCnt = 0 and OpenCnt = 0, internal program error.') End_Dialog(@WINDOW,'') END */ BEGIN CASE CASE ProdLoadCnt > 0 AND ProdUnloadCnt = 0 BriefTxt = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}' BriefTxt := '{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\ri200\b\f0\fs20\par Unload Product from EpiPro Reactor\par' BriefTxt := '\b0\par' BriefTxt := ' 1.) Verify Outbound Slot IDs\par' BriefTxt := ' 2.) Unload Product into Outbound Cassette\par}' Title = 'Unload Product from susceptor' Set_Property(@WINDOW:'.UNLOAD_WAFERS','VISIBLE',1) Set_Property(@WINDOW:'.RELOAD_WAFERS','VISIBLE',0) CASE ProdLoadCnt = 0 AND ProdUnloadCnt > 0 BriefTxt = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}' BriefTxt := '{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\ri200\b\f0\fs20\par Return Product to EpiPro Reactor\par' BriefTxt := '\b0\par' BriefTxt := ' 1.) Return Wafers to Reactor\par' BriefTxt := '\par}' Title = 'Return Product to Susceptor' Set_Property(@WINDOW:'.UNLOAD_WAFERS','VISIBLE',0) Set_Property(@WINDOW:'.RELOAD_WAFERS','VISIBLE',1) CASE 1 ErrMsg('No wafers loaded in Reactor.') ;* Not yet loaded END CASE Set_Property(@WINDOW:'.BRIEF_EDITBOX','RTFTEXT',BriefTxt) ToolType = XLATE('TOOL',ToolID,TOOL_TOOL_TYPE$,'X') EpiPartNo = XLATE('WO_LOG',WONo,WO_LOG_EPI_PART_NO$,'X') SubWfrSize = XLATE('EPI_PART',EpiPartNo,EPI_PART_SUB_WAFER_SIZE$,'X') SubWfrSize = TRIM(SubWfrSize) CONVERT ' ' TO @VM IN SubWfrSize SubWfrSize = SubWfrSize<1,3> SuscConfigID = XLATE('REACTOR',ReactorNo,REACTOR_SUSC_CONFIG_ID$,'X') IF SuscConfigID = '' THEN ErrorMsg = 'SUSC_CONFIG_ID value has not been set up on REACTOR ':QUOTE(ReactorNo):' unable to unload' RETURN END SuscRec = XLATE('EPI_SUSCEPTOR',SuscConfigID,'','X') CarrSlotIDs = '' RRSlotNos = RRunRec RRPktNos = RRunRec RRInWfrChars = RRunRec RRCarrWfrIDs = RRunRec pCnt = COUNT(RRPktNos,@VM) + (RRPktNos NE '') FOR I = 1 TO pCnt IF RRCarrWfrIDs<1,I> = '' AND RRInWfrChars<1,I> = 'PROD' THEN PktNo = RRPktNos<1,I> LOCATE PktNo IN SuscRec USING @VM SETTING Pos THEN CarrSlot = SuscRec CarrSlotIDs<1,I> = CarrSlot CarrSlotIDs<2,I> = RDSNo:'.':CarrSlot END END NEXT Set_Property(@WINDOW:'.MAT_OUTBOUND','DEFPROP',CarrSlotIDs) GOSUB Refresh RETURN * * * * * * * Close: * * * * * * * * * * * * * * Cancel: * * * * * * * RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP') Stage = Get_Property(@WINDOW:'.STAGE','DEFPROP') WMOLocks = Get_Property(@WINDOW,'@LOCKED_WFRS') IF WMOLocks NE '' THEN obj_WM_Wfrs('UnlockSet','WMO_WFRS':@RM:WMOLocks) ; * Remove locks on the wafer slots END Set_Property(@WINDOW,'@LOCKED_WFRS','') End_Dialog(@WINDOW,'') IF RDSNo NE '' THEN obj_Appwindow('LoadFormKeys','RUN_STAGE':@RM:RDSNo:'*':Stage) END RETURN * * * * * * * Refresh: * * * * * * * RCtrl = @WINDOW:'.REACTOR_TABLE' WMICtrl = @WINDOW:'.MAT_INBOUND' ReactorList = Get_Property(RCtrl,'LIST') WMInList = Get_Property(WMICtrl,'LIST') OpenTestCnt = 0 OpenProdCnt = 0 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 IF WMInList = '' THEN Send_Message(WMICtrl,'COLOR_BY_POS',COL$MI_SCRIBE,I,GAN_BLUE$) END ELSE Send_Message(WMICtrl,'COLOR_BY_POS',COL$MI_SCRIBE,I,LTORANGE$) END END NEXT I IF ReadyToLoad THEN Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',1) END ELSE Set_Property(@WINDOW:'.LOAD_MATERIAL','ENABLED',0) END RETURN * * * * * * * UnloadWfrs: * * * * * * * UnloadSlots = Get_Property(@WINDOW:'.MAT_OUTBOUND','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') Stage = Get_Property(@WINDOW:'.STAGE','DEFPROP') ToolID = Get_Property(@WINDOW:'.TOOL_ID','DEFPROP') OrgColor = Set_Property('DIALOG_UNLOAD_GAN.STATUSLINE_FIX','BACKCOLOR',YELLOW$) ;* //////// Messaging UnloadComplete = '' Set_Status(0) obj_React_Run('UnloadGan',RDSNo:@RM:ToolID:@RM:ReactorList:@RM:UnloadSlots) ;* obj_REACT_RUN('UnloadMat' IF Get_Status(errCode) THEN ErrMsg(errCode) END ELSE obj_Run_Stage('SetIASig',RDSNo:@RM:Stage:@RM:'UNLOAD') ; * Set Inv Action Signature JCH 10/13/2016 END End_Dialog(@WINDOW,UnloadComplete) ;* 10/6/2016 JCH Added UnloadComplete flag to trigger signature obj_Appwindow('LoadFormKeys','RUN_STAGE':@RM:RDSNo:'*':Stage) RETURN * * * * * * * ReloadWfrs: * * * * * * * 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') Stage = Get_Property(@WINDOW:'.STAGE','DEFPROP') ToolID = Get_Property(@WINDOW:'.TOOL_ID','DEFPROP') IF RDSNo = '' THEN RETURN OrgColor = Set_Property('DIALOG_UNLOAD_GAN.STATUSLINE_FIX','BACKCOLOR',YELLOW$) ;* //////// Messaging Set_Status(0) obj_React_Run('ReloadGan',RDSNo:@RM:ToolID) Send_Info(STR(' ',60)) ;** - Messaging - ** Dummy = Set_Property('DIALOG_UNLOAD_GAN.STATUSLINE_FIX','BACKCOLOR',OrgColor) ;** - Messaging - ** IF Get_Status(ErrCode) THEN ErrMsg(ErrCode) END End_Dialog(@WINDOW,'') obj_Appwindow('LoadFormKeys','RUN_STAGE':@RM:RDSNo:'*':Stage) 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_WO_Mat_Wfr('GetPreEpiWfrs',WONo) 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 = 'Susceptor Load Configuration' Message = 'There are more slots configured for loading (':OpenPockets:') than Inbound 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$) 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 Inbound wafers to load * NeededProduct = FIELD(RemainingWafers,@FM,1,OpenPockets) SlotKeys = '' SlotCnt = COUNT(NeededProduct,@FM) + (NeededProduct NE '') FOR I = 1 TO SlotCnt * Build List of WMI style keys for use by the Wafer Loading process locking routine SlotKey = NeededProduct SlotKey = FIELDSTORE(SlotKey,'*',2,0,WOStep) ;* Insert WOStep into key to use the WMI_WFRS routine SlotKeys<1,I> = SlotKey WfrID = NeededProduct NeededProduct = XLATE('WO_WFR',WfrID,WO_WFR_SCRIBE$,'X') ;* Added existing Scribe value for WO_WFR - probably empty at this point NEXT I Set_Status(0) LockedSlotKeys = obj_WM_Wfrs('LockSet','WMI_WFRS':@RM:SlotKeys) ;* Keeps these wafers from being displayed in the Available Inbound wafers list IF Get_Status(errCode) THEN ErrMsg(errCode) RETURN END ELSE Set_Property(@WINDOW,'@LOCKED_WFRS',LockedSlotKeys) END FOR M = 1 TO OpenPockets Set_Property(@WINDOW:'.MAT_INBOUND','CELLPOS',NeededProduct,COL$MI_SLOT_ID:@FM:M) Set_Property(@WINDOW:'.MAT_INBOUND','CELLPOS',NeededProduct,COL$MI_WFR_ID:@FM:M) Set_Property(@WINDOW:'.MAT_INBOUND','CELLPOS',NeededProduct,COL$MI_SCRIBE:@FM:M) NEXT M FOR M = OpenPockets + 1 TO 25 Set_Property(@WINDOW:'.MAT_INBOUND','CELLPOS','',COL$MI_SLOT_ID:@FM:M) Set_Property(@WINDOW:'.MAT_INBOUND','CELLPOS','',COL$MI_WFR_ID:@FM:M) Set_Property(@WINDOW:'.MAT_INBOUND','CELLPOS','',COL$MI_SCRIBE:@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$)) 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:'.MAT_INBOUND','CELLPOS','',1:@FM:M) Set_Property(@WINDOW:'.MAT_INBOUND','CELLPOS','',2:@FM:M) Set_Property(@WINDOW:'.MAT_INBOUND','CELLPOS','',3:@FM:M) NEXT M END GOSUB Refresh RETURN