1326 lines
34 KiB
Plaintext
1326 lines
34 KiB
Plaintext
COMPILE FUNCTION REACT_RUN_DISP(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
|
|
#pragma precomp SRP_PreCompiler
|
|
|
|
/*
|
|
Commuter module for REACT_RUN_DISP window.- Cloned from DIALOG_SPLIT_WAFERS
|
|
|
|
06/229/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_WO_Wfr, Post_Event
|
|
DECLARE SUBROUTINE obj_Post_Log, Post_Event, Forward_Event
|
|
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, End_Dialog, Send_Message, obj_MAT_INBOUND, obj_WM_Wfrs, obj_React_Status, obj_WO_Wfr_WIP, obj_Run_Stage_Wfr
|
|
DECLARE SUBROUTINE obj_Tables
|
|
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, obj_WO_Wfr_WIP
|
|
DECLARE FUNCTION obj_WO_Wfr
|
|
DECLARE FUNCTION obj_Prod_Spec, NextKey, obj_Test_Wafer
|
|
DECLARE FUNCTION obj_Tables
|
|
|
|
EQU CRLF$ TO \0D0A\
|
|
|
|
$INSERT APPCOLORS
|
|
$INSERT MSG_EQUATES
|
|
$INSERT POPUP_EQUATES
|
|
$INSERT PROD_SPEC_EQUATES
|
|
$INSERT PRS_STAGE_EQUATES
|
|
$INSERT QUOTE_SPEC_EQU
|
|
$INSERT RDS_LAYER_EQUATES
|
|
$INSERT RDS_TEST_EQUATES
|
|
$INSERT REACT_RUN_EQUATES
|
|
$INSERT REACTOR_EQUATES
|
|
$INSERT RTI_STYLE_EQUATES
|
|
$INSERT RUN_STAGE_EQUATES
|
|
$INSERT RUN_STAGE_WFR_EQUATES
|
|
$INSERT TOOL_CLASS_EQUATES
|
|
$INSERT TOOL_EQUATES
|
|
$INSERT WO_LOG_EQUATES
|
|
$INSERT WO_MAT_EQUATES
|
|
$INSERT WO_STEP_EQU
|
|
$INSERT WO_VERIFY_EQU
|
|
$INSERT WO_WFR_EQUATES
|
|
$INSERT LOGICAL
|
|
|
|
EQU COL$CHAR_WFR_ID TO 1
|
|
EQU COL$CHAR_SCRIBE TO 2
|
|
EQU COL$CHAR_CURR_STAGE TO 3
|
|
EQU COL$CHAR_DESTROYED TO 4
|
|
EQU COL$CHAR_TW_NO TO 5
|
|
EQU COL$CHAR_WFR_STATUS TO 6
|
|
EQU COL$CHAR_RETURN_BY TO 7
|
|
EQU COL$CHAR_RETURN_DTM TO 8
|
|
|
|
EQU COL$CARR_SLOT_NO TO 1
|
|
EQU COL$CARR_WFR_ID TO 2
|
|
EQU COL$CARR_SCRIBE TO 3
|
|
EQU COL$CARR_GRADE TO 4
|
|
EQU COL$CARR_NCR TO 5
|
|
EQU COL$CARR_WFR_SHIP TO 6
|
|
EQU COL$CARR_SHIP_ID TO 7
|
|
EQU COL$CARR_RETAIN_WFR TO 8
|
|
EQU COL$CARR_RET_CASS_ID TO 9
|
|
EQU COL$CARR_RET_SLOT TO 10
|
|
EQU COL$CARR_PREV_WFR_ID TO 11
|
|
|
|
EQU COL$NCR_NO TO 1
|
|
EQU COL$NCR_STATUS TO 2
|
|
EQU COL$NCR_REJ_QTY TO 3
|
|
EQU COL$NCR_RESP TO 4
|
|
EQU COL$NCR_STAGE TO 5
|
|
EQU COL$NCR_LOSS_DESC TO 6
|
|
EQU COL$NCR_LOSS_COMM TO 7
|
|
EQU COL$NCR_FIN_SIG TO 8
|
|
EQU COL$NCR_FIN_SIG_DTM TO 9
|
|
|
|
EQU COL$OUT_SLOT_ID TO 1
|
|
EQU COL$OUT_WFR_ID TO 2
|
|
EQU COL$OUT_SCRIBE TO 3
|
|
|
|
EQU WM_USER$ TO 1024
|
|
EQU DTM_SELROW$ TO (WM_USER$ + 59)
|
|
EQU DTM_SELALLROWS$ TO (WM_USER$ + 61)
|
|
EQU ETM_INSERTROW$ TO (WM_USER$ + 2004)
|
|
EQU ETM_DELETEROW$ TO (WM_USER$ + 2005)
|
|
EQU DTPOS_INVALID$ 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 React_Run_Disp commuter module'
|
|
ErrorMsg = ''
|
|
ErrCode = ''
|
|
|
|
Result = ''
|
|
|
|
BEGIN CASE
|
|
|
|
CASE EntID = @WINDOW
|
|
BEGIN CASE
|
|
CASE Event = 'CREATE' ; GOSUB Create
|
|
CASE Event = 'READ' ; GOSUB Read
|
|
CASE Event = 'WRITE' ; GOSUB Write
|
|
CASE Event = 'CLOSE' ; GOSUB Close ;* This needs to be a PRECLOSE event!
|
|
|
|
CASE Event[1,3] = 'QBF' ; GOSUB Refresh
|
|
END CASE
|
|
|
|
CASE EntID = @WINDOW:'.LOG_TEST_WFR' AND Event = 'CLICK' ; GOSUB LogTestWfr
|
|
CASE EntID = @WINDOW:'.REJECT_MATERIAL' AND Event = 'CLICK' ; GOSUB RejMat
|
|
CASE EntID = @WINDOW:'.RETURN_CHAR' AND Event = 'CLICK' ; GOSUB ReturnChar
|
|
CASE EntID = @WINDOW:'.AVAILABLE_SLOTS' AND Event = 'CLICK' ; GOSUB GetAvailableSlots
|
|
CASE EntID = @WINDOW:'.UNLOAD_WAFERS' AND Event = 'CLICK' ; GOSUB UnloadWafers
|
|
|
|
CASE EntID = @WINDOW:'.NCR_KEYS' AND Event = 'DBLCLK' ; GOSUB NCRKeysDC
|
|
|
|
CASE EntID = @WINDOW:'.CARR_WFRS'
|
|
|
|
BEGIN CASE
|
|
CASE Event = 'OPTIONS' ; GOSUB CarrOptions
|
|
CASE Event = 'DBLCLK' ; GOSUB CarrWfrsDC
|
|
CASE Event = 'POSCHANGED' ; GOSUB CarrWfrsPC
|
|
CASE Event = 'CLICK' ; GOSUB CarrWfrsClick
|
|
CASE Event = 'WINMSG' ; GOSUB TrapKeys
|
|
|
|
END CASE
|
|
|
|
CASE EntID = @WINDOW:'.CHAR_WFRS'
|
|
|
|
BEGIN CASE
|
|
|
|
CASE Event = 'DBLCLK' ; GOSUB CharWfrsDC
|
|
|
|
END CASE
|
|
|
|
|
|
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')
|
|
|
|
eventOp = TRUE$ ; * // Turn tracking on
|
|
eventOp<4> = TRUE$ ; * // Track Synchronously
|
|
CALL send_Message( @window : ".CARR_WFRS", "QUALIFY_EVENT", ETM_DELETEROW$, eventOp )
|
|
CALL send_Message( @window : ".CARR_WFRS", "QUALIFY_EVENT", ETM_INSERTROW$, eventOp )
|
|
|
|
CarrStyles = Send_Message(@WINDOW:'.CARR_WFRS','COLSTYLE',0,'')
|
|
|
|
CarrStyles<COL$CARR_GRADE> = BitOr(CarrStyles<COL$CARR_GRADE>,DTCS_OPTIONSBUTTON$)
|
|
|
|
CarrStyles<COL$CARR_WFR_SHIP> = BitOr(CarrStyles<COL$CARR_WFR_SHIP>,DTCS_CHECKBOX$)
|
|
CarrStyles<COL$CARR_WFR_SHIP> = BitOr(CarrStyles<COL$CARR_WFR_SHIP>,DTCS_CHECKBOXCENTER$)
|
|
|
|
CarrStyles<COL$CARR_RETAIN_WFR> = BitOr(CarrStyles<COL$CARR_RETAIN_WFR>,DTCS_CHECKBOX$)
|
|
CarrStyles<COL$CARR_RETAIN_WFR> = BitOr(CarrStyles<COL$CARR_RETAIN_WFR>,DTCS_CHECKBOXCENTER$)
|
|
|
|
void = Send_Message(@WINDOW:'.CARR_WFRS','COLSTYLE',0,CarrStyles)
|
|
|
|
GOSUB Refresh
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
LogTestWfr:
|
|
* * * * * * *
|
|
|
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
|
ReactNo = Get_Property(@WINDOW:'.REACTOR','DEFPROP')
|
|
CharList = Get_Property(@WINDOW:'.CHAR_WFRS','LIST')
|
|
CharArray = Get_Property(@WINDOW:'.CHAR_WFRS','DEFPROP')
|
|
|
|
IF RDSNo = '' THEN RETURN
|
|
|
|
CharWfrIDs = ''
|
|
|
|
WfrCnt = 0
|
|
|
|
clCnt = COUNT(CharList,@FM) + (CharList NE '')
|
|
|
|
FOR I = 1 TO clCnt
|
|
|
|
TWNo = CharList<I,COL$CHAR_TW_NO>
|
|
CharWfrID = CharList<I,COL$CHAR_WFR_ID>
|
|
CharCurrStage = CharList<I,COL$CHAR_CURR_STAGE>
|
|
CharWfrStatus = CharList<I,COL$CHAR_WFR_STATUS>
|
|
|
|
IF TWNo = '' AND CharWfrID NE '' THEN
|
|
|
|
BEGIN CASE
|
|
CASE CharWfrStatus = 'PART'
|
|
Msg(@WINDOW,'','PART_CHAR','',CharWfrID)
|
|
|
|
CASE CharWfrStatus = 'COMP'
|
|
WfrCnt += 1
|
|
CharWfrIDs<1,WfrCnt> = CharWfrID
|
|
|
|
|
|
CASE 1
|
|
Msg(@WINDOW,'','CHAR_WFR_NOT_DONE','',CharWfrID)
|
|
|
|
END CASE
|
|
|
|
END
|
|
|
|
NEXT I
|
|
|
|
IF WfrCnt = 0 THEN
|
|
ErrMsg('No Characterization Wafers are ready for disposition')
|
|
RETURN
|
|
END
|
|
|
|
|
|
|
|
TWNo = obj_Test_Wafer('Create',RDSNo:@RM:CharWfrIDs)
|
|
|
|
IF Get_Status(errCode) THEN
|
|
ErrMsg(errCode)
|
|
RETURN
|
|
END
|
|
|
|
Parms = 'TEST_WAFER':@RM
|
|
Parms := TWNo:@RM
|
|
Parms := '' ;* Optional parameters
|
|
|
|
obj_Appwindow('ViewRelated',Parms)
|
|
|
|
clCnt = COUNT(CharList,@FM) + (CharList NE '')
|
|
|
|
cwPointer = 1
|
|
|
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
|
|
|
FOR I = 1 TO clCnt
|
|
CurrTWNo = CharArray<COL$CHAR_TW_NO,I>
|
|
CharWfr = CharArray<COL$CHAR_WFR_ID,I>
|
|
|
|
IF CharWfr NE '' AND CurrTWNo = '' THEN
|
|
|
|
CharWfrID = CharWfrIDs<1,cwPointer>
|
|
|
|
CurrLocs = obj_WO_Wfr('CurrLoc',CharWfrID)
|
|
|
|
WOMatLoc = CurrLocs<1,1> ;* Only 1 of these can be set others will be null
|
|
ToolLoc = CurrLocs<1,2>
|
|
InvIDLoc = CurrLocs<1,3>
|
|
|
|
Parms = CharWfrID:@RM ;* WfrID
|
|
Parms := CurrDTM:@RM ;* EventDtm
|
|
Parms := @USER4:@RM ;* EventBy
|
|
Parms := 'TEST':@RM ;* Event
|
|
Parms := '':@RM ;* NewSlotID
|
|
Parms := '':@RM ;* RunLoc
|
|
Parms := '':@RM ;* NCRNo
|
|
Parms := TWNo:@RM ;* TWUse Key OR TWNo
|
|
Parms := WOMatLoc:@RM ;* CurrSlotID
|
|
Parms := '':@RM ;* NewToolID
|
|
Parms := ToolLoc:@RM ;* CurrToolID
|
|
Parms := '':@RM ;* NewInvLoc
|
|
Parms := InvIDLoc:@RM ;* CurrInvLoc
|
|
Parms := 'O':@RM ;* Inbound or Outbound Wafers
|
|
Parms := '':@RM ;* NewCarrLoc
|
|
Parms := '' ;* CurrCarrLoc
|
|
|
|
obj_WO_Wfr('AddEvent',Parms)
|
|
|
|
CharArray<COL$CHAR_TW_NO,I> = TWNo
|
|
|
|
cwPointer += 1
|
|
END
|
|
NEXT I
|
|
|
|
Set_Property(@WINDOW:'.CHAR_WFRS','DEFPROP',CharArray)
|
|
|
|
RETURN
|
|
|
|
|
|
|
|
* * * * * * *
|
|
Read:
|
|
* * * * * * *
|
|
|
|
OrgRecord = Get_Property(@WINDOW,'RECORD') ;* Record as read in
|
|
|
|
Set_Property(@WINDOW,'@ORG_RECORD',OrgRecord) ;* Save to dynamic property of the window
|
|
|
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','TEXT')
|
|
|
|
RunStageKey = RDSNo:'*DISP'
|
|
|
|
DispStageStatus = XLATE('RUN_STAGE',RunStageKey,'CURR_STATUS','X')
|
|
|
|
Set_Property(@WINDOW:'.STAGE_STATUS','DEFPROP',DispStageStatus)
|
|
|
|
GOTO Refresh
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
Write:
|
|
* * * * * * *
|
|
|
|
* This is called from a routine on the REACT_RUN_DISP window 'WRITE' event as a PRE_EVENT *
|
|
|
|
SkipUpdate = Get_Property(@WINDOW,'@SKIP_WRITE_UPDATE') ;* Set by the Create NCR and NCRKeysDC events so the window doesn't close!
|
|
|
|
IF SkipUpdate THEN
|
|
Forward_Event() ;* Performs the Write
|
|
Result = 0
|
|
Set_Property(@WINDOW,'@SKIP_WRITE_UPDATE','')
|
|
RETURN
|
|
END
|
|
|
|
OrgRec = Get_Property(@WINDOW,'@ORG_RECORD')
|
|
Record = Get_Property(@WINDOW,'ATRECORD')
|
|
|
|
aOrg = OrgRec<99>
|
|
aRec = Record<99>
|
|
|
|
CarrSlotIDs = Record<REACT_RUN_CARR_SLOT_ID$>
|
|
csCnt = COUNT(CarrSlotIDs,@VM) + (CarrSlotIDs NE '')
|
|
|
|
FOR I = 1 TO csCnt
|
|
WfrID = Record<REACT_RUN_CARR_PREV_WFR_ID$,I>
|
|
If WfrID EQ '' then WfrID = Record<REACT_RUN_CARR_WFR_ID$,I>
|
|
RetKey = Record<REACT_RUN_GAN_RET_KEY$,I>
|
|
RetSlot = Record<REACT_RUN_GAN_RET_SLOT$,I>
|
|
|
|
WfrGrade = Record<REACT_RUN_CARR_WFR_GRADE$,I>
|
|
WfrShipFlag = Record<REACT_RUN_CARR_WFR_SHIP$,I>
|
|
|
|
FieldNos = WO_WFR_GRADE$:@VM:WO_WFR_SHIP_FLAG$
|
|
FieldVals = WfrGrade:@VM:WfrShipFlag
|
|
|
|
IF (WfrID NE '') THEN
|
|
|
|
obj_WO_Wfr('SetProp',WfrID:@RM:FieldNos:@RM:FieldVals)
|
|
|
|
IF Get_Status(errCode) THEN
|
|
ErrMsg(errCode)
|
|
END
|
|
|
|
***************************************
|
|
* Move "Shipped" wafers to PACK stage *
|
|
***************************************
|
|
OrgShipFlag = OrgRec<REACT_RUN_CARR_WFR_SHIP$,I>
|
|
ShipFlag = Record<REACT_RUN_CARR_WFR_SHIP$,I>
|
|
|
|
IF OrgShipFlag = '' THEN OrgShipFlag = 0
|
|
IF ShipFlag = '' THEN ShipFlag = 0
|
|
|
|
CurrInvLoc = obj_WO_Wfr('CurrLoc',WfrID)<1,4>
|
|
|
|
NewInvLoc = ''
|
|
MoveFlag = ''
|
|
|
|
BEGIN CASE
|
|
CASE (OrgShipFlag = 0) AND (ShipFlag = 1) AND (CurrInvLoc = 'GGR*Q_DISP')
|
|
NewInvLoc = 'GCH*Q_PACK'
|
|
MoveFlag = 1
|
|
|
|
CASE (OrgShipFlag = 1) AND (ShipFlag = 0) AND (CurrInvLoc = 'GCH*Q_PACK')
|
|
NewInvLoc = 'GGR*Q_DISP'
|
|
MoveFlag = 1
|
|
|
|
CASE 1
|
|
NULL
|
|
END CASE
|
|
|
|
IF MoveFlag THEN
|
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
|
Parms = WfrID:@RM ;* WfrID
|
|
Parms := CurrDTM:@RM ;* EventDtm
|
|
Parms := @USER4:@RM ;* EventBy
|
|
Parms := 'PACK':@RM ;* Event
|
|
Parms := '':@RM ;* NewSlotID
|
|
Parms := '':@RM ;* RunLoc
|
|
Parms := '':@RM ;* NCRNo
|
|
Parms := '':@RM ;* TWUse Key OR TWNo
|
|
Parms := '':@RM ;* CurrSlotID
|
|
Parms := '':@RM ;* NewToolID
|
|
Parms := '':@RM ;* CurrToolID
|
|
Parms := NewInvLoc:@RM ;* NewInvLoc
|
|
Parms := CurrInvLoc:@RM ;* CurrInvLoc
|
|
Parms := 'O':@RM ;* Inbound or Outbound Wafers
|
|
Parms := '':@RM ;* NewCarrLoc
|
|
Parms := '' ;* CurrCarrLoc
|
|
obj_WO_Wfr('AddEvent',Parms)
|
|
END ;* End of Check for MoveFlag
|
|
|
|
***************************************
|
|
* Move "Retained" wafers to PACK stage *
|
|
***************************************
|
|
OrgRetainFlag = OrgRec<REACT_RUN_GAN_RET_WFR$,I>
|
|
RetainFlag = Record<REACT_RUN_GAN_RET_WFR$,I>
|
|
|
|
IF OrgRetainFlag = '' THEN OrgRetainFlag = 0
|
|
IF RetainFlag = '' THEN RetainFlag = 0
|
|
|
|
CurrInvLoc = obj_WO_Wfr('CurrLoc',WfrID)<1,4>
|
|
|
|
NewInvLoc = ''
|
|
MoveFlag = ''
|
|
|
|
BEGIN CASE
|
|
CASE (OrgRetainFlag = 0) AND (RetainFlag = 1) AND (CurrInvLoc = 'GGR*Q_DISP')
|
|
NewInvLoc = 'GCH*Q_PACK'
|
|
MoveFlag = 1
|
|
|
|
CASE (OrgRetainFlag = 1) AND (RetainFlag = 0) AND (CurrInvLoc = 'GCH*Q_PACK')
|
|
NewInvLoc = 'GGR*Q_DISP'
|
|
MoveFlag = 1
|
|
|
|
CASE 1
|
|
NULL
|
|
END CASE
|
|
|
|
IF MoveFlag THEN
|
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
|
Parms = WfrID:@RM ;* WfrID
|
|
Parms := CurrDTM:@RM ;* EventDtm
|
|
Parms := @USER4:@RM ;* EventBy
|
|
Parms := 'GRET':@RM ;* Event
|
|
Parms := '':@RM ;* NewSlotID
|
|
Parms := '':@RM ;* RunLoc
|
|
Parms := '':@RM ;* NCRNo
|
|
Parms := '':@RM ;* TWUse Key OR TWNo
|
|
Parms := '':@RM ;* CurrSlotID
|
|
Parms := '':@RM ;* NewToolID
|
|
Parms := '':@RM ;* CurrToolID
|
|
Parms := NewInvLoc:@RM ;* NewInvLoc
|
|
Parms := CurrInvLoc:@RM ;* CurrInvLoc
|
|
Parms := 'O':@RM ;* Inbound or Outbound Wafers
|
|
Parms := '':@RM ;* NewCarrLoc
|
|
Parms := '' ;* CurrCarrLoc
|
|
obj_WO_Wfr('AddEvent',Parms)
|
|
END ;* End of Check for MoveFlag
|
|
|
|
*****************************************
|
|
* Move "Destroyed" wafers to PACK stage *
|
|
*****************************************
|
|
CurrInvLoc = obj_WO_Wfr('CurrLoc',WfrID)<1,4>
|
|
|
|
NewInvLoc = ''
|
|
MoveFlag = ''
|
|
CharWfrID = ''
|
|
|
|
CtrlID = @WINDOW:'.CHAR_WFRS'
|
|
CharWfrList = Get_Property(CtrlID,'LIST')
|
|
FOR CharWfrListIndex = 1 TO COUNT(CharWfrList,@FM) + (CharWfrList NE '') AND (CharWfrID NE WfrID)
|
|
CharWfrID = CharWfrList<CharWfrListIndex,COL$CHAR_WFR_ID>
|
|
CharDest = CharWfrList<CharWfrListIndex,COL$CHAR_DESTROYED>
|
|
StageStatus = CharWfrList<CharWfrListIndex,COL$CHAR_WFR_STATUS>
|
|
NEXT CharWfrListIndex
|
|
|
|
BEGIN CASE
|
|
CASE (CharWfrID = WfrID) AND ((CharDest = 'Yes') AND (StageStatus = 'COMP')) AND (CurrInvLoc = 'GGR*Q_DISP')
|
|
NewInvLoc = 'GCH*Q_PACK'
|
|
MoveFlag = 1
|
|
|
|
CASE (CharWfrID = WfrID) AND ((CharDest NE 'Yes') OR (StageStatus NE 'COMP')) AND (CurrInvLoc = 'GCH*Q_PACK')
|
|
NewInvLoc = 'GGR*Q_DISP'
|
|
MoveFlag = 1
|
|
|
|
CASE 1
|
|
NULL
|
|
END CASE
|
|
|
|
IF MoveFlag THEN
|
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
|
Parms = WfrID:@RM ;* WfrID
|
|
Parms := CurrDTM:@RM ;* EventDtm
|
|
Parms := @USER4:@RM ;* EventBy
|
|
Parms := 'DEST':@RM ;* Event
|
|
Parms := '':@RM ;* NewSlotID
|
|
Parms := '':@RM ;* RunLoc
|
|
Parms := '':@RM ;* NCRNo
|
|
Parms := '':@RM ;* TWUse Key OR TWNo
|
|
Parms := '':@RM ;* CurrSlotID
|
|
Parms := '':@RM ;* NewToolID
|
|
Parms := '':@RM ;* CurrToolID
|
|
Parms := NewInvLoc:@RM ;* NewInvLoc
|
|
Parms := CurrInvLoc:@RM ;* CurrInvLoc
|
|
Parms := 'O':@RM ;* Inbound or Outbound Wafers
|
|
Parms := '':@RM ;* NewCarrLoc
|
|
Parms := '' ;* CurrCarrLoc
|
|
obj_WO_Wfr('AddEvent',Parms)
|
|
END ;* End of Check for MoveFlag
|
|
|
|
END ;* End of Check for no WfrID
|
|
|
|
NEXT I
|
|
|
|
Result = 0 ;* Set Flag to stop window POSTEVENT chain
|
|
Forward_Event() ;* Performs the Write
|
|
Post_Event(@WINDOW,'CLOSE') ;* All Done go back to calling window
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
Clear:
|
|
* * * * * * *
|
|
|
|
|
|
* * * * * * *
|
|
Close:
|
|
* * * * * * *
|
|
|
|
Parent = Get_Property('REACT_RUN_DISP','PARENT')
|
|
|
|
IF Parent = 'REACT_RUN' THEN
|
|
Send_Event(@WINDOW,'CLEAR')
|
|
END
|
|
|
|
obj_AppWindow('DetailReturn')
|
|
|
|
RETURN
|
|
|
|
|
|
|
|
|
|
* * * * * * *
|
|
Refresh:
|
|
* * * * * * *
|
|
|
|
|
|
CarrList = Get_Property(@WINDOW:'.CARR_WFRS','LIST')
|
|
carrCnt = COUNT(CarrList,@FM) + (CarrList NE '')
|
|
|
|
CharList = Get_Property(@WINDOW:'.CHAR_WFRS','LIST')
|
|
CharScribes = Get_Property(@WINDOW:'.CHAR_WFRS','ARRAY')<COL$CHAR_SCRIBE>
|
|
charCnt = COUNT(CharList,@FM) + (CharList NE '')
|
|
|
|
FOR I = 1 TO CarrCnt
|
|
|
|
CharWfr = 0
|
|
ScribeID = CarrList<I,COL$CARR_SCRIBE>
|
|
IF (charCnt > 0) AND (ScribeID NE '') THEN
|
|
LOCATE ScribeID IN CharScribes USING @VM SETTING Pos THEN
|
|
CharWfr = 1
|
|
END
|
|
END
|
|
|
|
LineColor = WHITE$
|
|
BEGIN CASE
|
|
CASE (CarrList<I,COL$CARR_GRADE> = 'SCR') OR (CarrList<I,COL$CARR_NCR> NE '')
|
|
/* Bad Wafer */
|
|
LineColor = RED$
|
|
|
|
CASE (CharWfr = 1)
|
|
/* Wafer located in characterization */
|
|
LineColor = YELLOW$
|
|
|
|
CASE (CarrList<I,COL$CARR_SHIP_ID> NE '')
|
|
/* Wafer has been shipped */
|
|
LineColor = GREEN$
|
|
|
|
CASE (CarrList<I,COL$CARR_RET_CASS_ID> NE '')
|
|
/* Wafer has been retained */
|
|
LineColor = BLUE$
|
|
|
|
CASE 1
|
|
NULL
|
|
END CASE
|
|
|
|
stat = Send_Message(@WINDOW:'.CARR_WFRS','COLOR_BY_POS',0,I,LineColor)
|
|
|
|
NEXT I
|
|
|
|
|
|
/*
|
|
|
|
CharList = Get_Property(@WINDOW:'.CHAR_WFRS','LIST')
|
|
charCnt = COUNT(CharList,@FM) + (CharList NE '')
|
|
|
|
FOR I =1 TO CharCnt
|
|
|
|
BEGIN CASE
|
|
CASE CharList<I,COL$CHAR_RETURN_BY> NE '' ; LineColor = YELLOW$
|
|
CASE 1 ; LineColor = GREEN$
|
|
END CASE
|
|
|
|
stat = Send_Message(@WINDOW:'.CHAR_WFRS','COLOR_BY_POS',0,I,LineColor)
|
|
|
|
NEXT I
|
|
*/
|
|
|
|
|
|
* Turn edit table symbolic column backgrounds to green
|
|
|
|
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
|
|
|
|
ETCtrls = ETSymbolics<1>
|
|
ETCols = ETSymbolics<2>
|
|
|
|
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
|
|
ETCtrl = ETCtrls<1,I>
|
|
IF ETCtrl NE @WINDOW:'.SIG_PROFILE' AND ETCtrl NE @WINDOW:'.CHAR_WFRS' AND ETCtrl NE @WINDOW:'.CARR_WFRS' THEN
|
|
ETList = Get_Property(ETCtrl,'LIST')
|
|
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
|
|
IF ETList<Line,1> NE '' THEN
|
|
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
|
|
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
|
|
NEXT N
|
|
END
|
|
NEXT Line
|
|
END ;* End of check for .SIG_PROFILE control
|
|
NEXT I
|
|
|
|
|
|
CtrlID = @WINDOW:'.CHAR_WFRS'
|
|
|
|
CharWfrList = Get_Property(CtrlID,'LIST')
|
|
|
|
|
|
FOR I = 1 TO COUNT(CharWfrList,@FM) + (CharWfrList NE '')
|
|
|
|
CurrStage = CharWfrList<I,COL$CHAR_CURR_STAGE>
|
|
CharDest = CharWfrList<I,COL$CHAR_DESTROYED>
|
|
StageStatus = CharWfrList<I,COL$CHAR_WFR_STATUS>
|
|
ReturnBy = CharWfrList<I,COL$CHAR_RETURN_BY>
|
|
|
|
BEGIN CASE
|
|
CASE StageStatus EQ 'RUN' ; LineColor = LS3_GREEN$
|
|
CASE StageStatus EQ 'SIG' ; LineColor = ORANGE$
|
|
CASE StageStatus EQ 'PART' ; LineColor = GREY$
|
|
CASE 1 ; LineColor = GREEN$
|
|
END CASE
|
|
|
|
* * * * * * * Change to display 'DEST' column to red if destroyed, rest of line to LineColor ********** ****************************
|
|
|
|
BEGIN CASE
|
|
|
|
CASE CurrStage = 'COMP' ; ParmColor = GREEN$
|
|
CASE CurrStage NE '' ; ParmColor = LineColor
|
|
CASE 1 ; ParmColor = WHITE$
|
|
|
|
END CASE
|
|
|
|
stat = Send_Message(CtrlID,'COLOR_BY_POS',0,I,ParmColor)
|
|
|
|
IF CharDest = 'Yes' THEN
|
|
stat = Send_Message(CtrlID,'COLOR_BY_POS',COL$CHAR_DESTROYED,I,RED$)
|
|
END
|
|
|
|
IF ReturnBy NE '' THEN
|
|
stat = Send_Message(CtrlID,'COLOR_BY_POS',COL$CHAR_RETURN_BY,I,YELLOW$)
|
|
stat = Send_Message(CtrlID,'COLOR_BY_POS',COL$CHAR_RETURN_DTM,I,YELLOW$)
|
|
END
|
|
|
|
NEXT I
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
GetAvailableSlots:
|
|
* * * * * * *
|
|
|
|
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
|
|
|
|
CarrCtrl = @WINDOW:'.CARR_WFRS'
|
|
|
|
CarrArray = Get_Property(CarrCtrl,'INVALUE')
|
|
ShipFlags = CarrArray<COL$CARR_WFR_SHIP>
|
|
WfrIDs = CarrArray<COL$CARR_WFR_ID>
|
|
|
|
cCnt = COUNT(CarrArray,@FM) + (CarrArray NE '')
|
|
|
|
ShipWfrIDs = ''
|
|
ShipCnt = 0
|
|
FOR I = 1 to cCnt
|
|
|
|
ShipFlag = ShipFlags<1,I>
|
|
WfrID = WfrIDs<1,I>
|
|
|
|
IF ShipFlag = '1' AND WfrID NE '' THEN
|
|
ShipCnt += 1
|
|
ShipWfrIDs<1,ShipCnt> = WfrID
|
|
END
|
|
NEXT I
|
|
|
|
AvailSlots = obj_WO_Mat_Wfr('GetPostEpiSlots',WONo)
|
|
|
|
ShipSlots = FIELD(AvailSlots,@FM,1,ShipCnt)
|
|
|
|
CONVERT @FM TO @VM IN ShipSlots
|
|
|
|
OutCtrl = @WINDOW:'.OUTBOUND_SLOTS'
|
|
|
|
OutArray = Get_Property(OutCtrl,'DEFPROP')
|
|
|
|
|
|
OutArray<COL$OUT_SLOT_ID> = ShipSlots
|
|
OutArray<COL$OUT_WFR_ID> = ShipWfrIDs
|
|
OutArray<COL$OUT_SCRIBE> = XLATE('WO_WFR',ShipWfrIDs,12,'X') ;* Scribes on WO_WFR table records
|
|
|
|
Set_Property(OutCtrl,'DEFPROP',OutArray)
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
UnloadWafers:
|
|
* * * * * * *
|
|
|
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
|
|
|
ShipArray = Get_Property(@WINDOW:'.OUTBOUND_SLOTS','DEFPROP')
|
|
|
|
ShipSlots = ShipArray<COL$OUT_SLOT_ID>
|
|
ShipWfrs = ShipArray<COL$OUT_WFR_ID>
|
|
|
|
|
|
Send_Event(@WINDOW,'WRITE')
|
|
|
|
obj_React_Run('ShipGANWfrs',RDSNo:@RM:ShipSlots:@RM:ShipWfrs)
|
|
|
|
IF Get_Status(errCode) THEN
|
|
ErrMsg(errCode)
|
|
END
|
|
|
|
obj_Appwindow('LUValReturn',RDSNo:@RM:@WINDOW:'.RDS_NO':@RM)
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
CarrOptions:
|
|
* * * * * * *
|
|
|
|
CtrlEntID = @WINDOW:'.CARR_WFRS'
|
|
|
|
CarrList = Get_Property(CtrlEntID,'LIST')
|
|
|
|
CurrPos = Get_Property(CtrlEntID,'NOTIFYPOS') ;* Undocumented property that gives cell location when multi select is enabled.
|
|
CurrCol = CurrPos<1>
|
|
CurrRow = CurrPos<2>
|
|
|
|
IF CurrCol = COL$CARR_GRADE THEN
|
|
|
|
WfrGrade = Popup(@WINDOW,'','GAN_WFR_GRADE')
|
|
|
|
IF WfrGrade = CHAR(27) THEN RETURN
|
|
|
|
obj_Appwindow('LUValReturn',WfrGrade:@RM:CtrlEntID:@RM:COL$CARR_GRADE:@FM:CurrRow)
|
|
|
|
END
|
|
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
RejMat:
|
|
* * * * * * *
|
|
|
|
CarrCtrl = @WINDOW:'.CARR_WFRS'
|
|
|
|
CarrSlotList = Get_Property(CarrCtrl,'LIST')
|
|
|
|
SlotSelection = Get_Property(CarrCtrl,'SELPOS')
|
|
SelectedRows = SlotSelection<2>
|
|
|
|
CONVERT @VM TO @FM in SelectedRows
|
|
|
|
SelCnt = COUNT(SelectedRows,@FM) + (SelectedRows NE '')
|
|
IF SelCnt = 0 THEN
|
|
ErrMsg('You must select at least one row in order to create an NCR.')
|
|
RETURN
|
|
END
|
|
|
|
Ctrls = @WINDOW:'.WO_NO':@RM ; Props = 'DEFPROP':@RM
|
|
Ctrls := @WINDOW:'.RDS_NO':@RM ; Props := 'DEFPROP':@RM
|
|
Ctrls := @WINDOW:'.REACTOR':@RM ; Props := 'DEFPROP':@RM
|
|
Ctrls := @WINDOW:'.NCR_KEYS' ; Props := 'DEFPROP'
|
|
|
|
Vals = Get_Property(Ctrls,Props)
|
|
|
|
WONo = Vals[1,@RM]
|
|
RDSNo = Vals[COL2()+1,@RM]
|
|
Reactor = Vals[COL2()+1,@RM]
|
|
NCRArray = Vals[COL2()+1,@RM]
|
|
|
|
RejWfrIDs = ''
|
|
RejSlotIDs = ''
|
|
|
|
GoodLines = 0
|
|
FOR I = 1 TO SelCnt
|
|
SlotNo = SelectedRows<I>
|
|
IF CarrSlotList<SlotNo,COL$CARR_WFR_ID> NE '' Then
|
|
GoodLines += 1
|
|
RejWfrIDs<1,GoodLines> = CarrSlotList<SlotNo,COL$CARR_WFR_ID>
|
|
RejSlotIDs<1,GoodLines> = RDSNo:'*':SlotNo
|
|
END
|
|
NEXT I
|
|
|
|
ncrParms = WONo:@RM
|
|
ncrParms := '1':@RM
|
|
ncrParms := '':@RM ;* Place holder for WO_MAT_CASS_NO
|
|
ncrParms := RDSNo:@RM ;* Single RDS field
|
|
ncrParms := Reactor:@RM ;* Reactor No
|
|
ncrParms := '':@RM ;* Loss Stage
|
|
ncrParms := RejWfrIDs:@RM ;* WfrIDs ;* CarrWafer IDs
|
|
ncrParms := RejSlotIDs:@RM ;* CarrSlotIDs ;* GaN PostEpi Carrier Slot ID -> GaN non-characterization wafers
|
|
ncrParms := '':@RM ;* CassSlotIDs ;* WOMat Cassette Slot ID -> Rej from cassette
|
|
ncrParms := '' ;* RunPocketZone ;* RPZ -> Rej from susceptor
|
|
|
|
Set_Status(0)
|
|
NCRNo = obj_NCR('CreateWfr',ncrParms) ;* Create new NCR for this wafer/group of wafers
|
|
|
|
IF Get_Status(errCode) THEN
|
|
ErrMsg(errCode)
|
|
END Else
|
|
|
|
RejDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
|
|
|
sCnt = COUNT(RejSlotIDs,@VM) + (RejSlotIDs NE '')
|
|
FOR N = 1 TO sCnt
|
|
|
|
RowNo = SelectedRows<N>
|
|
|
|
Set_Property(CarrCtrl,'CELLPOS',NCRNo,COL$CARR_NCR:@FM:RowNo) ;* Add NCR number to cell
|
|
NEXT N
|
|
END
|
|
|
|
Set_Property(@WINDOW:'.CARR_WFRS','SELPOS',SlotSelection) ;* Toggle CARR_WFR selection off
|
|
|
|
|
|
NCRNos = NCRArray<COL$NCR_NO> ;* Added 6/17/2010 JCH fixes bug NCR sigs being on the wrong line or just hanging
|
|
|
|
LOOP
|
|
UNTIL NCRNos[-1,'B':@VM] NE '' OR NCRNos = ''
|
|
NCRNos[-1,1] = ''
|
|
REPEAT
|
|
|
|
LOCATE NCRNo IN NCRNos BY 'AR' USING @VM SETTING Pos ELSE
|
|
NCRArray = INSERT(NCRArray,COL$NCR_FIN_SIG,Pos,0,'')
|
|
NCRArray = INSERT(NCRArray,COL$NCR_FIN_SIG_DTM,Pos,0,'')
|
|
END
|
|
|
|
*Set_Property('WO_MAT_WFR.NCR_KEYS','DEFPROP',NCRArray) ;* End of 6/17/2010 update
|
|
|
|
Set_Property(@WINDOW,'@SKIP_WRITE_UPDATE',1) ;* Set flag to stop window from closing and updating the WO_WFR records
|
|
|
|
Send_Event(@WINDOW,'WRITE')
|
|
|
|
DetWindow = 'NCR'
|
|
DetKeys = NCRNo
|
|
DefaultRec = ''
|
|
RetKey = RDSNo
|
|
RetWin = 'REACT_RUN_DISP'
|
|
RetPage = 1
|
|
RetCtrl = @WINDOW:'.CARR_WFRS'
|
|
RetPos = 1:@FM:1
|
|
|
|
obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
|
|
|
|
IF Get_Status(errCode) THEN
|
|
Errmsg(errCode)
|
|
END
|
|
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
CharWfrsDC:
|
|
* * * * * * *
|
|
|
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
|
|
|
IF RDSNo = '' THEN RETURN
|
|
|
|
CtrlEntID = @WINDOW:'.CHAR_WFRS'
|
|
|
|
CurrList = Get_Property(CtrlEntID,'LIST')
|
|
|
|
CurrPos = Get_Property(CtrlEntID,'NOTIFYPOS')
|
|
CurrCol = CurrPos<1>
|
|
CurrRow = CurrPos<2>
|
|
|
|
|
|
BEGIN CASE
|
|
|
|
CASE CurrCol = COL$CHAR_WFR_ID
|
|
* Wafer History Popup
|
|
|
|
|
|
CASE CurrCol = COL$CHAR_TW_NO
|
|
TWNo = CurrList<CurrRow,COL$CHAR_TW_NO>
|
|
|
|
IF TWNo NE '' THEN
|
|
DetWindow = 'TEST_WAFER'
|
|
DetKeys = TWNo
|
|
DefaultRec = ''
|
|
RetKey = RDSNo
|
|
RetPage = 1
|
|
RetCtrl = CtrlEntID
|
|
RetPos = CurrPos
|
|
|
|
oAParms = DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos
|
|
|
|
obj_AppWindow('ViewNewDetail',oAParms)
|
|
IF Get_Status(errCode) THEN
|
|
ErrMsg(errCode)
|
|
END
|
|
END
|
|
|
|
END CASE
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
NCRKeysDC:
|
|
* * * * * * *
|
|
|
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','TEXT')
|
|
CtrlEntID = @WINDOW:'.NCR_KEYS'
|
|
|
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
|
CurrCol = CurrPos<1>
|
|
CurrRow = CurrPos<2>
|
|
|
|
NCRKey = Get_Property(CtrlEntID,'CELLPOS',1:@FM:CurrRow)
|
|
|
|
IF NCRKey = '' THEN RETURN
|
|
|
|
Set_Property(@WINDOW,'@SKIP_WRITE_UPDATE',1)
|
|
|
|
Send_Event(@WINDOW,'WRITE')
|
|
|
|
DetWindow = 'NCR'
|
|
DetKeys = NCRKey
|
|
DefaultRec = ''
|
|
RetKey = RDSNo
|
|
RetWin = @WINDOW
|
|
RetPage = 1
|
|
RetCtrl = CtrlEntID
|
|
RetPos = CurrPos
|
|
|
|
obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
|
|
|
|
RETURN
|
|
|
|
|
|
|
|
* * * * * * *
|
|
CarrWfrsDC:
|
|
* * * * * * *
|
|
|
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
|
|
|
IF RDSNo = '' THEN RETURN
|
|
|
|
CtrlEntID = @WINDOW:'.CARR_WFRS'
|
|
|
|
CurrList = Get_Property(CtrlEnTID,'LIST')
|
|
|
|
CurrPos = Get_Property(CtrlEntID,'NOTIFYPOS')
|
|
CurrCol = CurrPos<1>
|
|
CurrRow = CurrPos<2>
|
|
|
|
BEGIN CASE
|
|
CASE CurrCol = COL$CARR_NCR
|
|
NCRNo = CurrList<CurrRow,COL$CARR_NCR>
|
|
|
|
IF NCRNo NE '' THEN
|
|
|
|
*Send_Event('REACT_RUN_DISP','WRITE')
|
|
|
|
DetWindow = 'NCR'
|
|
DetKeys = NCRNo
|
|
DefaultRec = ''
|
|
RetKey = RDSNo
|
|
RetPage = 1
|
|
RetCtrl = CtrlEntID
|
|
RetPos = CurrPos
|
|
|
|
obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
|
|
|
|
END
|
|
|
|
END CASE
|
|
|
|
RETURN
|
|
|
|
|
|
***********
|
|
CarrWfrsPC:
|
|
***********
|
|
|
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
|
|
|
IF (RDSNo NE '') THEN
|
|
|
|
CtrlEntID = @WINDOW:'.CARR_WFRS'
|
|
|
|
CurrList = Get_Property(CtrlEnTID, 'LIST')
|
|
|
|
CurrPos = Get_Property(CtrlEntID, 'NOTIFYPOS')
|
|
CurrCol = CurrPos<1>
|
|
CurrRow = CurrPos<2>
|
|
|
|
PrevPos = Get_Property(CtrlEntID, 'PREVSELPOS')
|
|
PrevCol = PrevPos<1>
|
|
PrevRow = PrevPos<2>
|
|
|
|
Scribe = CurrList<CurrRow, COL$CARR_SCRIBE>
|
|
RetainFlag = CurrList<CurrRow, COL$CARR_RETAIN_WFR>
|
|
ShipFlag = CurrList<CurrRow, COL$CARR_WFR_SHIP>
|
|
|
|
RemoveFocus = true$
|
|
IF (Scribe NE '') then
|
|
IF ((CurrCol = COL$CARR_RET_CASS_ID) OR (CurrCol = COL$CARR_RET_SLOT)) THEN
|
|
IF ((RetainFlag = 1) OR (RetainFlag = 'Yes')) THEN
|
|
/* Move the focus to the Retain Wafer ID field */
|
|
Set_Property(CtrlEntID, 'CARETPOS', CurrPos)
|
|
/* Keep focus on that edit table cell */
|
|
RemoveFocus = false$
|
|
END
|
|
|
|
end else
|
|
IF ((CurrCol = COL$CARR_RETAIN_WFR) OR (CurrCol = COL$CARR_WFR_SHIP) OR (CurrCol = COL$CARR_GRADE)) THEN
|
|
RemoveFocus = false$
|
|
end
|
|
END
|
|
END
|
|
|
|
IF (RemoveFocus = true$) then
|
|
Set_Property("SYSTEM", "BLOCK_EVENTS", true$)
|
|
Set_Property(CtrlEntID, 'SELPOS', PrevPos)
|
|
Handle = Get_Property(CtrlEntID, 'HANDLE')
|
|
CALL sendMessage(Handle, DTM_SELROW$, 0, PrevRow-1)
|
|
Set_Property("SYSTEM", "BLOCK_EVENTS", false$)
|
|
END
|
|
|
|
END ;* End of Check for RDS Number
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
CarrWfrsClick:
|
|
* * * * * * *
|
|
|
|
RDSNo = Get_Property( @WINDOW:'.RDS_NO','DEFPROP')
|
|
|
|
IF (RDSNo NE '') THEN
|
|
|
|
CtrlEntID = @WINDOW:'.CARR_WFRS'
|
|
|
|
CurrList = Get_Property(CtrlEnTID,'LIST')
|
|
|
|
CurrPos = Get_Property(CtrlEntID,'NOTIFYPOS')
|
|
CurrCol = CurrPos<1>
|
|
CurrRow = CurrPos<2>
|
|
|
|
Scribe = CurrList<CurrRow, COL$CARR_SCRIBE>
|
|
|
|
IF (Scribe NE '') THEN
|
|
|
|
ShipFlag = CurrList<CurrRow, COL$CARR_WFR_SHIP>
|
|
RetainFlag = CurrList<CurrRow, COL$CARR_RETAIN_WFR>
|
|
|
|
BEGIN CASE
|
|
|
|
CASE CurrCol = COL$CARR_WFR_SHIP
|
|
|
|
/* Request to ship */
|
|
IF ((ShipFlag = 1) OR (ShipFlag = 'Yes')) THEN
|
|
|
|
IF (CurrList<CurrRow, COL$CARR_RET_CASS_ID> = '') AND (CurrList<CurrRow, COL$CARR_RET_SLOT> = '') THEN
|
|
|
|
IF ((RetainFlag = 1) OR (RetainFlag = 'Yes')) THEN
|
|
Set_Property(CtrlEntID, 'CELLPOS', False, COL$CARR_RETAIN_WFR:@FM:CurrRow)
|
|
*ErrMsg('PATH #1')
|
|
|
|
END ELSE
|
|
/* Move the "Carrier Wafer ID" to the "Previous Carrier Wafer ID" */
|
|
WaferID = CurrList<CurrRow,COL$CARR_WFR_ID>
|
|
Set_Property(CtrlEntID, 'CELLPOS', WaferID, COL$CARR_PREV_WFR_ID:@FM:CurrRow)
|
|
Set_Property(CtrlEntID, 'CELLPOS', '', COL$CARR_WFR_ID:@FM:CurrRow)
|
|
*ErrMsg('PATH #2')
|
|
END
|
|
|
|
Set_Property(CtrlEntID, 'CELLPOS', True, COL$CARR_WFR_SHIP:@FM:CurrRow)
|
|
Set_Property(CtrlEntID, 'CELLPOS', 1, COL$CARR_WFR_SHIP:@FM:CurrRow)
|
|
|
|
END ELSE
|
|
Set_Property(CtrlEntID, 'CELLPOS', False, COL$CARR_WFR_SHIP:@FM:CurrRow)
|
|
ErrMsg('WARNING! This wafer has already been retained.')
|
|
*ErrMsg('PATH #3')
|
|
END
|
|
|
|
/* Request to un-ship */
|
|
END ELSE
|
|
IF (CurrList<CurrRow, COL$CARR_SHIP_ID> = '') THEN
|
|
/* Un-Mark wafer to be shipped */
|
|
Set_Property(CtrlEntID, 'CELLPOS', False, COL$CARR_WFR_SHIP:@FM:CurrRow)
|
|
|
|
/* Move the "Previous Carrier Wafer ID" to the "Carrier Wafer ID" */
|
|
PrevWaferID = CurrList<CurrRow,COL$CARR_PREV_WFR_ID>
|
|
Set_Property(CtrlEntID, 'CELLPOS', PrevWaferID, COL$CARR_WFR_ID:@FM:CurrRow)
|
|
Set_Property(CtrlEntID, 'CELLPOS', '', COL$CARR_PREV_WFR_ID:@FM:CurrRow)
|
|
*ErrMsg('PATH #4')
|
|
|
|
END ELSE
|
|
Set_Property(CtrlEntID, 'CELLPOS', True, COL$CARR_WFR_SHIP:@FM:CurrRow)
|
|
Set_Property(CtrlEntID, 'CELLPOS', 1, COL$CARR_WFR_SHIP:@FM:CurrRow)
|
|
ErrMsg('WARNING! This wafer has already been shipped.')
|
|
*ErrMsg('PATH #5')
|
|
END
|
|
END
|
|
|
|
CASE CurrCol = COL$CARR_RETAIN_WFR
|
|
|
|
/* Request to retain a wafer */
|
|
IF ((RetainFlag = 1) OR (RetainFlag = 'Yes')) THEN
|
|
|
|
IF (CurrList<CurrRow, COL$CARR_SHIP_ID> = '') THEN
|
|
|
|
IF ((ShipFlag = 1) OR (ShipFlag = 'Yes')) THEN
|
|
Set_Property(CtrlEntID, 'CELLPOS', False, COL$CARR_WFR_SHIP:@FM:CurrRow)
|
|
*ErrMsg('PATH #6')
|
|
|
|
END ELSE
|
|
/* Move the "Carrier Wafer ID" to the "Previous Carrier Wafer ID" */
|
|
WaferID = CurrList<CurrRow,COL$CARR_WFR_ID>
|
|
Set_Property(CtrlEntID, 'CELLPOS', WaferID, COL$CARR_PREV_WFR_ID:@FM:CurrRow)
|
|
Set_Property(CtrlEntID, 'CELLPOS', '', COL$CARR_WFR_ID:@FM:CurrRow)
|
|
*ErrMsg('PATH #7')
|
|
END
|
|
|
|
Set_Property(CtrlEntID, 'CELLPOS', True, COL$CARR_RETAIN_WFR:@FM:CurrRow)
|
|
Set_Property(CtrlEntID, 'CELLPOS', 1, COL$CARR_RETAIN_WFR:@FM:CurrRow)
|
|
|
|
/* Move the focus to the Retain Wafer ID field */
|
|
Set_Property(CtrlEntID, 'CARETPOS', COL$CARR_RET_CASS_ID:@FM:CurrRow)
|
|
|
|
END ELSE
|
|
Set_Property(CtrlEntID, 'CELLPOS', False, COL$CARR_RETAIN_WFR:@FM:CurrRow)
|
|
ErrMsg('WARNING! This wafer has already been shipped.')
|
|
*ErrMsg('PATH #8')
|
|
END
|
|
|
|
/* Request to un-retain a wafer */
|
|
END ELSE
|
|
|
|
IF (CurrList<CurrRow, COL$CARR_RET_CASS_ID> = '') AND (CurrList<CurrRow, COL$CARR_RET_SLOT> = '') THEN
|
|
/* Un-Mark wafer to be retained */
|
|
Set_Property(CtrlEntID, 'CELLPOS', False, COL$CARR_RETAIN_WFR:@FM:CurrRow)
|
|
|
|
/* Move the "Previous Carrier Wafer ID" to the "Carrier Wafer ID" */
|
|
PrevWaferID = CurrList<CurrRow,COL$CARR_PREV_WFR_ID>
|
|
Set_Property(CtrlEntID, 'CELLPOS', PrevWaferID, COL$CARR_WFR_ID:@FM:CurrRow)
|
|
Set_Property(CtrlEntID, 'CELLPOS', '', COL$CARR_PREV_WFR_ID:@FM:CurrRow)
|
|
*ErrMsg('PATH #9')
|
|
|
|
END ELSE
|
|
Set_Property(CtrlEntID, 'CELLPOS', True, COL$CARR_RETAIN_WFR:@FM:CurrRow)
|
|
Set_Property(CtrlEntID, 'CELLPOS', 1, COL$CARR_RETAIN_WFR:@FM:CurrRow)
|
|
ErrMsg('WARNING! This wafer has already been retained.')
|
|
*ErrMsg('PATH #10')
|
|
END
|
|
END
|
|
|
|
END CASE
|
|
|
|
END ELSE
|
|
Set_Property(CtrlEntID, 'CELLPOS', False, COL$CARR_RETAIN_WFR:@FM:CurrRow)
|
|
Set_Property(CtrlEntID, 'CELLPOS', False, COL$CARR_WFR_SHIP:@FM:CurrRow)
|
|
|
|
END
|
|
|
|
END
|
|
|
|
RETURN
|
|
|
|
|
|
* * * * * * *
|
|
ReturnChar:
|
|
* * * * * * *
|
|
|
|
RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
|
|
|
|
RDSRec = Get_Property(@WINDOW,'RECORD')
|
|
|
|
CtrlEntID = @WINDOW:'.CHAR_WFRS'
|
|
|
|
CurrPos = Get_Property(CtrlEntID,'SELPOS')
|
|
CurrCol = CurrPos<1>
|
|
CurrRow = CurrPos<2>
|
|
|
|
CharWfrList = Get_Property(CtrlEntID,'LIST')
|
|
|
|
WfrID = CharWfrList<CurrRow,COL$CHAR_WFR_ID>
|
|
WfrDestroyed = CharWfrList<CurrRow,COL$CHAR_DESTROYED>
|
|
WfrTWNo = CharWfrList<CurrRow,COL$CHAR_TW_NO>
|
|
|
|
IF WfrID = '' THEN RETURN
|
|
|
|
BEGIN CASE
|
|
*CASE WfrDestroyed NE '' ; *ErrorMsg = 'Wafer has been through destructive test.'
|
|
CASE WfrTWNo NE '' ; ErrorMsg = 'Wafer has been recorded on a TW Use record.'
|
|
END CASE
|
|
|
|
IF ErrorMsg NE '' THEN RETURN
|
|
|
|
Send_Event(@WINDOW,'WRITE')
|
|
|
|
CurrInvLoc = XLATE('WO_WFR',WfrID,'CURR_LOC_ID','X')
|
|
CurrTool = XLATE('WO_WFR',WfrID,'CURR_TOOL','X')
|
|
CarrSlotID = XLATE('WO_WFR',WfrID,'CARR_SLOT_ID','X')
|
|
|
|
CurrDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
|
|
|
|
owwParms = WfrID:@RM ;* WfrIDs - mv
|
|
owwParms := CurrDTM:@RM ;* EventDtm
|
|
owwParms := @USER4:@RM ;* EventBy
|
|
owwParms := 'UNSPLIT':@RM ;* Event
|
|
owwParms := '':@RM ;* New Slot IDs - mv
|
|
owwParms := '':@RM ;* RPZs(RDSNo*Pocket*Zone)s - mv
|
|
owwParms := '':@RM ;* NCRNo
|
|
owwParms := '':@RM ;* TWUse ID
|
|
owwParms := '':@RM ;* Current Slot ID - mv
|
|
owwParms := '':@RM ;* New ToolID
|
|
owwParms := CurrTool:@RM ;* Curr Tool ID
|
|
owwParms := '':@RM ;* NewInvLoc
|
|
owwParms := CurrInvLoc:@RM ;* CurrInvLoc ;* This is needed
|
|
owwParms := 'O':@RM ;* Wfr Side
|
|
owwParms := CarrSlotID:@RM ;* NewCarrLoc
|
|
owwParms := '' ;* CurrCarrLoc ;* Not currently used
|
|
|
|
obj_WO_Wfr('AddEvent',owwParms) ;* Takes Carrier Loc off and Adds QIn for first Char step
|
|
|
|
IF Get_Status(errCode) THEN
|
|
ErrMsg(errCode)
|
|
END
|
|
|
|
obj_React_Run('UnSplitWfr',RDSNo:@RM:WfrID) ;* Moves WfrID from <REACT_RUN_PREV_CARR_WFR_ID$> TO <REACT_RUN_CARR_WFR_ID$>
|
|
|
|
Set_Property(@WINDOW:'.RDS_NO','DEFPROP',RDSNo,'X')
|
|
|
|
Post_Event(@WINDOW,'READ')
|
|
|
|
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
|
|
|
|
|
|
*********
|
|
TrapKeys:
|
|
*********
|
|
|
|
Message = Parm2
|
|
|
|
BEGIN CASE
|
|
|
|
CASE ( Message = ETM_INSERTROW$ )
|
|
* // Stop the insert here...
|
|
CALL set_WinMsgVal( TRUE$, 0 ) ; * // Force PS to return 0 to Windows
|
|
|
|
CASE ( Message = ETM_DELETEROW$ )
|
|
* // Stop the delete here...
|
|
CALL set_WinMsgVal( TRUE$, 0 ) ; * // Force PS to return 0 to Windows
|
|
|
|
END CASE
|
|
|
|
RETURN
|
|
|