replaced with NDW_VERIFY_USER. Added barcode scan function to NDW_VERIFY_USER. fixed two instances of ohms square unit characters being garbled by git minor modification to NDW_VERIFY_USER_EVENTS lost focus events minor change to gotfocus event logic
		
			
				
	
	
		
			1815 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1815 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| COMPILE FUNCTION Comm_React_Run(Instruction,Parm1,Parm2)
 | |
| #pragma precomp SRP_PreCompiler
 | |
| 
 | |
| /*
 | |
| 	Template Commuter module for REACT_RUN (Reactor Run) window
 | |
| 	
 | |
| 	02/21/2008 - John C. Henry, J.C. Henry & Co., Inc.
 | |
| */
 | |
| 
 | |
| DECLARE SUBROUTINE Set_Property, End_Dialog, Send_Event, Set_Status, Center_Window, Post_Event
 | |
| DECLARE SUBROUTINE ErrMsg, Send_Message, Set_Property, Send_Event, Btree.Extract, obj_AppWindow, 
 | |
| DECLARE SUBROUTINE obj_Notes, Security_Err_Msg, End_Window, Forward_Event, Start_Window, Create_Note
 | |
| DECLARE SUBROUTINE obj_RDS_Test, Print_Control_Plan, Print_RDS_Instruction, Send_Info, Post_Event
 | |
| 
 | |
| DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Center_Window, Popup, Collect.Ixvals
 | |
| DECLARE FUNCTION Send_Message, Msg, Security_Check, RowExists,  NextKey, obj_React_Esc, obj_React_Run
 | |
| DECLARE FUNCTION obj_RDS_Test, MemberOf, Create_Dialog, obj_Popup, obj_WO_Wfr
 | |
| 
 | |
| 
 | |
| $INSERT MSG_EQUATES
 | |
| $INSERT APPCOLORS
 | |
| $INSERT LSL_USERS_EQU
 | |
| $INSERT SECURITY_RIGHTS_EQU
 | |
| $INSERT REACT_EVENT_EQUATES
 | |
| $INSERT REACT_RUN_EQUATES
 | |
| $INSERT WO_STEP_EQU
 | |
| $INSERT WO_MAT_EQUATES
 | |
| $INSERT WO_WFR_WIP_EQUATES
 | |
| $INSERT EPI_SUSCEPTOR_EQUATES
 | |
| $INSERT REACTOR_EQUATES
 | |
| $INSERT RTI_STYLE_EQUATES
 | |
| $INSERT POPUP_EQUATES
 | |
| $INSERT LOGICAL
 | |
| 
 | |
| EQU CRLF$	TO \0D0A\
 | |
| 
 | |
| EQU COL$LSID			TO 1
 | |
| EQU COL$RECIPE			TO 2
 | |
| EQU COL$RECIPE_NAME		TO 3
 | |
| EQU COL$PARAMS			TO 4
 | |
| EQU COL$PARMS_OUT		TO 5
 | |
| EQU COL$BLANK_COL		TO 6
 | |
| EQU COL$MET_NO			TO 7
 | |
| EQU COL$THICK_AVG		TO 8
 | |
| EQU COL$RRHO_AVG		TO 9
 | |
| EQU COL$MET_NO_Z1		TO 10
 | |
| EQU COL$THICK_AVG_Z1	TO 11
 | |
| EQU COL$RRHO_AVG_Z1		TO 12
 | |
| EQU COL$MET_NO_Z2		TO 13
 | |
| EQU COL$THICK_AVG_Z2	TO 14
 | |
| EQU COL$RRHO_AVG_Z2		TO 15
 | |
| EQU COL$MET_OUT			TO 16
 | |
| EQU COL$MET_OUT_Z1		TO 17
 | |
| EQU COL$MET_OUT_Z2		TO 18
 | |
| EQU COL$MET_TWSIG		TO 19
 | |
| EQU COL$MET_TWSIG_Z1	TO 20
 | |
| EQU COL$MET_TWSIG_Z2	TO 21
 | |
| 
 | |
| EQU COL$CHAR_WFR_ID		TO 1
 | |
| EQU COL$SCRIBE			TO 2
 | |
| EQU COL$SPLIT_BY		TO 3
 | |
| EQU COL$SPLIT_DTM		TO 4
 | |
| EQU COL$CURR_STAGE		TO 5
 | |
| EQU COL$CHAR_DEST		TO 6
 | |
| EQU COL$CHAR_TW_NO		TO 7
 | |
| EQU COL$CHAR_WFR_STATUS	TO 8
 | |
| 
 | |
| EQU COL$CARR_SLOG_NO	TO 1
 | |
| EQU COL$CARR_WFR_ID		TO 2
 | |
| EQU COL$CARR_SCRIBE		TO 3
 | |
| EQU COL$CARR_CHAR_FLAG	TO 4
 | |
| EQU COL$CARR_NCR		TO 5
 | |
| EQU COL$CARR_GRADE		TO 6
 | |
| 
 | |
| EQU COL$SIG_PROF		TO 1
 | |
| EQU COL$SIGNATURE		TO 2
 | |
| EQU COL$SIG_DTM			TO 3
 | |
| EQU COL$STAGE_COMMENT	TO 4
 | |
| EQU COL$STAGE_STATUS	TO 5
 | |
| 
 | |
| EQU COL$SUSC_LOAD_WFR_ID        TO 6    ;* SUSC_LOAD control
 | |
| EQU COL$SUSC_LOAD_WFR_SCRIBE	TO 7
 | |
| 
 | |
| 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
 | |
| 
 | |
| ErrCode  = ''
 | |
| ErrorMsg = ''
 | |
| ErrTitle = 'Error in Comm_React_Run'
 | |
| 
 | |
| Result = ''
 | |
| 
 | |
| BEGIN CASE
 | |
| 	CASE Instruction = 'Create' 			; GOSUB Create
 | |
| 	CASE Instruction = 'Refresh'			; GOSUB Refresh
 | |
| 	CASE Instruction = 'Page'				; GOSUB Page
 | |
| 	CASE Instruction = 'VScroll'			; GOSUB VScroll
 | |
| 	CASE Instruction = 'Read'				; GOSUB Read
 | |
| 	CASE Instruction = 'Write'				; GOSUB Write
 | |
| 	CASE Instruction = 'Clear'				; GOSUB Clear
 | |
| 	CASE Instruction = 'Delete'				; GOSUB Delete
 | |
| 	CASE Instruction = 'Close'				; GOSUB Close
 | |
| 	CASE Instruction = 'RDSNoLF'			; GOSUB RDSNoLF
 | |
| 	CASE Instruction = 'CIClick'			; GOSUB CIClick
 | |
| 	CASE Instruction = 'LURDSNo'			; GOSUB LURDSNo
 | |
| 	CASE Instruction = 'LUReactNo'			; GOSUB LUReactNo
 | |
| 	CASE Instruction = 'LUReactEsc'			; GOSUB LUReactEsc
 | |
| 	CASE Instruction = 'CopyMetrology'		; GOSUB CopyMetrology
 | |
| 	CASE Instruction = 'LSIdDC'				; GOSUB LSIdDC
 | |
| 	CASE Instruction = 'AddZoneMet'			; GOSUB AddZoneMet
 | |
| 	CASE Instruction = 'MoveMetToZone'		; GOSUB MoveMetToZone
 | |
| 	CASE Instruction = 'ViewWOMat'			; GOSUB ViewWOMat
 | |
| 	CASE Instruction = 'SendMsg'			; GOSUB SendMsg
 | |
| 	CASE Instruction = 'CtrlPlanClick'		; GOSUB CtrlPlanClick
 | |
| 	CASE Instruction = 'ViewPSN'			; GOSUB ViewPSN
 | |
| 	CASE Instruction = 'PrintInstruction'	; GOSUB PrintInstruction
 | |
| 	CASE Instruction = 'SignSuppl'			; GOSUB SignSuppl
 | |
| 	CASE Instruction = 'SignFinalQA'		; GOSUB SignFinalQA
 | |
| 	CASE Instruction = 'SigProfileClick'	; GOSUB SigProfileClick
 | |
| 	CASE Instruction = 'ViewWO'				; GOSUB ViewWO
 | |
| 	CASE Instruction = 'CharWfrDC'			; GOSUB CharWfrDC
 | |
| 	CASE Instruction = 'CarrWfrDC'			; GOSUB CarrWfrDC
 | |
| 	CASE Instruction = 'CharWfrOptions'		; GOSUB CharWfrOptions
 | |
| 	CASE Instruction = 'SplitClick'			; GOSUB SplitClick
 | |
| 	CASE Instruction = 'DispoClick'			; GOSUB DispoClick
 | |
| 	CASE Instruction = 'LURunPri'			; GOSUB LURunPri
 | |
| 	CASE Instruction = 'EditScribe'			; GOSUB SUSC_LOAD.OPTIONS
 | |
| 
 | |
| *    CASE EntID = @WINDOW:'.SUSC_LOAD'		    AND Event = 'OPTIONS'	; GOSUB SUSC_LOAD.OPTIONS	
 | |
| 	
 | |
| 	CASE 1
 | |
| 		ErrorMsg = 'Unknown Instruction ':QUOTE(Instruction):' passed to routine.'
 | |
| 		ErrMsg(ErrorMsg)
 | |
| 		
 | |
| END CASE
 | |
| 
 | |
| IF ErrorMsg NE '' THEN
 | |
| 	ErrMsg(ErrTitle:@SVM:ErrorMsg)
 | |
| END
 | |
| 
 | |
| RETURN Result
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Create:
 | |
| * * * * * * *
 | |
| 
 | |
| /*
 | |
| IF NOT(Security_Check('Reactor Event Log',READ$)) THEN
 | |
| 	Security_Err_Msg('Reactor Event Log',READ$)
 | |
| 	End_Window(@WINDOW)
 | |
| 	RETURN
 | |
| END
 | |
| */
 | |
| 
 | |
| obj_Appwindow('Create',@WINDOW)
 | |
| 
 | |
| 
 | |
| * Provides compatibility with the existing messaging attachment system
 | |
| 
 | |
| IF Parm1 NE '' THEN
 | |
| 	PassedKeys = FIELD(Parm1,'*',1)
 | |
| 	obj_Appwindow('ViewRelated',@WINDOW:@RM:PassedKeys)
 | |
| END
 | |
| 
 | |
| *
 | |
| 
 | |
| /*
 | |
| ReactorStyles = Send_Message(@WINDOW:'.REACTOR_LOAD','COLSTYLE',0,'')	
 | |
| ReactorStyles<COL$USAGE> = BitOr(ReactorStyles<COL$USAGE>,DROPDOWN_STYLE$)
 | |
| Send_Message(@WINDOW:'.REACTOR_LOAD','COLSTYLE',0,ReactorStyles)
 | |
| Send_Message(@WINDOW:'.REACTOR_LOAD','COLFORMAT',COL$USAGE,@VM:'TEST':@VM:'PROD':@VM:'DUMMY')
 | |
| */
 | |
| 
 | |
| 
 | |
| CharStyles 						= Send_Message(@WINDOW:'.CHAR_WFR_ID','COLSTYLE',0,'')			;* Get All Styes
 | |
| CharStyles<COL$CHAR_WFR_ID>	= BitOr(CharStyles<COL$CHAR_WFR_ID>,DTCS_OPTIONSBUTTON$)		;* Set column to Dropdown
 | |
| 
 | |
| Send_Message(@WINDOW:'.CHAR_WFR_ID','COLSTYLE',0,CharStyles)									;* Set Col Styles
 | |
| 
 | |
| SuscLoadStyles = Send_Message(@WINDOW:'.SUSC_LOAD','COLSTYLE',0,'')
 | |
| SuscLoadStyles<COL$SUSC_LOAD_WFR_SCRIBE>	= BitOr(SuscLoadStyles<COL$SUSC_LOAD_WFR_SCRIBE>,DTCS_OPTIONSBUTTON$)
 | |
| void = Send_Message(@WINDOW:'.SUSC_LOAD','COLSTYLE',0,SuscLoadStyles)
 | |
| 
 | |
| CarrStyles = Send_Message(@WINDOW:'.CARR_WFR_ID','COLSTYLE',0,'')
 | |
| 
 | |
| CarrStyles<COL$CARR_CHAR_FLAG>	= BitOr(CarrStyles<COL$CARR_CHAR_FLAG>,DTCS_CHECKBOX$)
 | |
| CarrStyles<COL$CARR_CHAR_FLAG>	= BitOr(CarrStyles<COL$CARR_CHAR_FLAG>,DTCS_CHECKBOXCENTER$)
 | |
| 
 | |
| void = Send_Message(@WINDOW:'.CARR_WFR_ID','COLSTYLE',0,CarrStyles)
 | |
| 
 | |
| Set_Property(@WINDOW:'.CANCELLED','ENABLE',0)
 | |
| 
 | |
| GOSUB Refresh
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Clear:
 | |
| * * * * * * *
 | |
| 
 | |
| 
 | |
| IF Get_Property(@WINDOW,'@READONLY') THEN
 | |
| 	obj_AppWindow('ReadOnly',@RM:1)			;* Reenables data bound controls
 | |
| 	Set_Property(@WINDOW,'@READONLY',0)		;* Clear flag on window
 | |
| END
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Refresh:
 | |
| * * * * * * *
 | |
| 
 | |
| RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
 | |
| CharWfrData = Get_Property(@WINDOW:'.CHAR_WFR_ID','DEFPROP')
 | |
| 
 | |
| CharWfrIDs = CharWfrData<COL$CHAR_WFR_ID>
 | |
| 
 | |
| WfrSigKeys = obj_React_Run('GetNextWfrStage',RDSNo:@RM:CharWfrIDs)
 | |
| 
 | |
| IF Get_Status(errCode) THEN
 | |
| 	ErrMsg(errCode)
 | |
| 	DEBUG
 | |
| END
 | |
| 
 | |
| RunPri = Get_Property(@WINDOW:'.RUN_PRI','DEFPROP')
 | |
| 
 | |
| BEGIN CASE 
 | |
| 	CASE RunPri = 'P1'		; PriBackColor = PR1_RED$
 | |
| 	CASE RunPri = 'P2'		; PriBackColor = PR2_RED$	
 | |
| 	CASE RunPri = 'P3'		; PriBackColor = PR3_RED$	
 | |
| 	CASE 1					; PriBackColor = GREEN$
 | |
| END CASE
 | |
| 
 | |
| Set_Property(@WINDOW:'.RUN_PRI_DESC','BACKCOLOR',PriBackColor)
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * * * * * * * * * * *  Original code below here needs a serious review JCH  * * * * * *& * * * * * * * *
 | |
| 
 | |
| SuppInst = Get_Property(@WINDOW:'.SUPP_INST','TEXT')
 | |
| SuppSig  = Get_Property(@WINDOW:'.SUPP_SIG','TEXT')
 | |
| 
 | |
| Ctrls  = @WINDOW:'.SUPP_SIG':@RM			; Props  = 'BACKCOLOR':@RM
 | |
| Ctrls := @WINDOW:'.SUPP_SIG_DTM':@RM		; Props := 'BACKCOLOR':@RM
 | |
| Ctrls := @WINDOW:'.SUPP_SIG_BUTTON':@RM		; Props := 'ENABLED':@RM
 | |
| Ctrls := @WINDOW:'..NEEDS_ATTENTION':@RM	; Props := 'TEXT':@RM
 | |
| Ctrls := @WINDOW:'..NEEDS_ATTENTION'		; Props := 'VISIBLE'
 | |
| 
 | |
| IF SuppSig = '' THEN
 | |
| 	Vals  = WHITE$:@RM
 | |
| 	Vals := WHITE$:@RM
 | |
| END ELSE
 | |
| 	Vals  = GREEN$:@RM
 | |
| 	Vals := GREEN$:@RM
 | |
| END
 | |
| 
 | |
| NeedsAttention = ''
 | |
| IF SuppInst NE '' THEN
 | |
| 	SuppSig = Get_Property(@WINDOW:'.SUPP_SIG','TEXT')
 | |
| 	IF SuppSig = '' THEN
 | |
| 		NeedsAttention = 'Supplemental Instruction is not signed!'
 | |
| 	END
 | |
| END
 | |
| 
 | |
| IF NeedsAttention = '' THEN Vals := 0:@RM ELSE Vals := 1:@RM		;* Turns the signbutton on
 | |
| Vals := NeedsAttention:@RM											;* Sets red text for operator 
 | |
| IF NeedsAttention = '' THEN Vals := 0 ELSE Vals := 1				;* Makes the text visible
 | |
| 
 | |
| Set_Property(Ctrls,Props,Vals)										;* Sets NEEDS_ATTENTION and associated stuff
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| * NeedsAttention NE ''
 | |
| 
 | |
| Ctrls  = @WINDOW:'.ADE_READ':@RM			; Props  = 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.LAST_WAFER_RHO':@RM		; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.FIN_WFR_QTY':@RM			; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.SHIFT':@RM				; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.FQA_LPD':@RM				; Props := 'DEFPROP':@RM		;* Added FQA_LPD property check		dkk 12/29/14
 | |
| Ctrls := @WINDOW:'.WFR_SIG':@RM				; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.UNLOAD_SIG':@RM			; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.POST_SIG':@RM			; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.FIN_SIG'					; Props := 'DEFPROP'
 | |
| 
 | |
| Vals = Get_Property(Ctrls,Props)
 | |
| 
 | |
| ADERead			= Vals[1,@RM]
 | |
| LastWaferRHO	= Vals[COL2()+1,@RM]
 | |
| FinWfrQty		= Vals[COL2()+1,@RM]
 | |
| Shift			= Vals[COL2()+1,@RM]
 | |
| FqaLpd			= Vals[COL2()+1,@RM]										;* Added FqaLpd check		dkk  12/29/14 
 | |
| WfrSig			= Vals[COL2()+1,@RM]
 | |
| UnloadSig		= Vals[COL2()+1,@RM]
 | |
| PostSig			= Vals[COL2()+1,@RM]
 | |
| FinSig			= Vals[COL2()+1,@RM]
 | |
| 
 | |
| IF NeedsAttention = '' AND ADERead NE '' AND LastWaferRHO NE '' AND FinWfrQty NE '' AND Shift NE '' AND FqaLpd NE '' Then;* Added FqaLpd check to ensure completed		dkk 12/29/14
 | |
| 
 | |
| 	BEGIN CASE
 | |
| 		CASE PostCIDesc NE '' AND PostSig NE '' AND UnloadSig NE '' AND FinSig = ''
 | |
| 			Set_Property(@WINDOW:'.FINAL_SIG_BUTTON','ENABLED',1)
 | |
| 			
 | |
| 		CASE PostCIDesc = '' AND WfrSig NE '' AND UnloadSig NE '' AND FinSig = ''
 | |
| 			Set_Property(@WINDOW:'.FINAL_SIG_BUTTON','ENABLED',1)
 | |
| 			
 | |
| 		CASE 1
 | |
| 			Set_Property(@WINDOW:'.FINAL_SIG_BUTTON','ENABLED',0)
 | |
| 	END CASE 
 | |
| 	
 | |
| END ELSE
 | |
| 	Set_Property(@WINDOW:'.FINAL_SIG_BUTTON','ENABLED',0)
 | |
| END
 | |
| 
 | |
| 
 | |
| IF Get_Property(@WINDOW:'.HOT_LOT','CHECK') THEN
 | |
| 	*Set_Property(@WINDOW:'.HOT_LOT_LABEL','VISIBLE',1)
 | |
| END ELSE
 | |
| 	*Set_Property(@WINDOW:'.HOT_LOT_LABEL','VISIBLE',0)
 | |
| END
 | |
| 
 | |
| 
 | |
| LoadLockVal = Get_Property(@WINDOW:'.LOAD_LOCK_SIDE_HIDDEN','TEXT')		;* This little bit of code clears the default radio button (with much difficulty!)
 | |
| IF LoadLockVal = '' THEN
 | |
| 	CurrSaveWarn = Get_Property(@WINDOW,'SAVEWARN')
 | |
| 	Set_Property(@WINDOW:'.LOAD_LOCK_SIDE','DEFPROP','')
 | |
| 	IF NOT(CurrSaveWarn) THEN
 | |
| 		Set_Property(@WINDOW,'SAVEWARN',0)
 | |
| 	END
 | |
| END
 | |
| 
 | |
| ReactType = Get_Property(@WINDOW:'.REACTOR_TYPE','INVALUE')
 | |
| 
 | |
| 
 | |
| Ctrls  = @WINDOW:'.LOAD_LOCK_SIDE':@RM				; Props  = 'ENABLED':@RM
 | |
| Ctrls := @WINDOW:'.ASM_LOAD_LOCK_LBL':@RM			; Props := 'ENABLED':@RM
 | |
| Ctrls := @WINDOW:'.ASM_LOAD_LOCK'					; Props := 'ENABLED'
 | |
| 
 | |
| IF ReactType = 'ASM+' THEN
 | |
| 	Vals = STR('1':@RM,9)
 | |
| 	Vals[-1,1] = ''
 | |
| END ELSE
 | |
| 	Vals = STR('0':@RM,9)
 | |
| 	Vals[-1,1] = ''
 | |
| END
 | |
| 
 | |
| Set_Property(Ctrls,Props,Vals)
 | |
| 
 | |
| 
 | |
| Ctrls  = @WINDOW:'.WFR_REJECT_LABEL':@RM		; Props  = 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.WFR_REJECT':@RM				; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.MU_WFRS_ADDED_LABEL':@RM		; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.MU_WFRS_ADDED':@RM			; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.MU_WFRS_REMOVED_LABEL':@RM	; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.MU_WFRS_REMOVED':@RM			; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.CURR_WFR_CNT_LABEL':@RM		; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.CURR_WFR_CNT':@RM			; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.CASS_SHIP_QTY_LABEL':@RM		; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.CASS_SHIP_QTY':@RM			; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.SIG_PROFILE':@RM				; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.LOAD_REQ_GROUP':@RM			; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.FINAL_QA_GROUP':@RM			; Props := 'VISIBLE':@RM
 | |
| 
 | |
| 
 | |
| Ctrls := @WINDOW:'.LOAD_SIG_BUTTON':@RM			; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.LOAD_SIG_LABEL':@RM			; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.LOAD_SIG':@RM				; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.LOAD_SIG_DTM':@RM			; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.UNLOAD_SIG_BUTTON':@RM		; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.UNLOAD_SIG_LABEL':@RM		; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.UNLOAD_SIG':@RM				; Props := 'VISIBLE':@RM
 | |
| Ctrls := @WINDOW:'.UNLOAD_SIG_DTM'				; Props := 'VISIBLE'
 | |
| 
 | |
| 
 | |
| IF ReactType = 'EPP' OR ReactType[1,6] = 'EpiPro'  THEN
 | |
| 
 | |
| 	
 | |
| 	
 | |
| END	Else
 | |
| 
 | |
| 
 | |
| 	Vals = STR('1':@RM,13):STR('0':@RM,8)	; Vals[-1,1] = ''
 | |
| 	Set_Property(Ctrls,Props,Vals)
 | |
| 	
 | |
| 	SigProfileList = Get_Property(@WINDOW:'.SIG_PROFILE','LIST')
 | |
| 	
 | |
| 	SigProfCnt = COUNT(SigProfileList,@FM) + (SigProfileList NE '')
 | |
| 	
 | |
| 	NextStepSigProf = ''
 | |
| 	
 | |
| 	FOR I =1 TO SigProfCnt
 | |
| 		SigProf		= SigProfileList<I,COL$SIG_PROF>
 | |
| 		Signature	= SigProfileList<I,COL$SIGNATURE>
 | |
| 		StageStatus	= SigProfileList<I,COL$STAGE_STATUS>
 | |
| 		BEGIN CASE
 | |
| 			CASE SigProf NE '' AND StageStatus EQ 'RUN'	;LineColor = LS3_GREEN$
 | |
| 			CASE SigProf NE '' AND StageStatus EQ 'SIG' ;LineColor = ORANGE$
 | |
| 			CASE SigProf NE '' AND 	Signature EQ ''		;LineColor = YELLOW$
 | |
| 			CASE SigProf NE '' AND 	Signature NE ''		;LineColor = GREEN$
 | |
| 			CASE SigProf EQ '' AND 	Signature EQ ''		;LineColor = WHITE$
 | |
| 			CASE 1	; LineColor = WHITE$
 | |
| 		END CASE
 | |
| 		stat = Send_Message(@WINDOW:'.SIG_PROFILE','COLOR_BY_POS',0,I,LineColor)
 | |
| 		
 | |
| 		IF LineColor = YELLOW$ AND NextStepSigProf = '' THEN
 | |
| 		
 | |
| 			BasicSigProf = ICONV(SigProf,'[SIG_PROFILE_CONV]')
 | |
| 			
 | |
| 			BEGIN CASE
 | |
| 				CASE BasicSigProf = 'VER'		; NextStepSigProf = 'VER'
 | |
| 				CASE BasicSigProf = 'LOAD'		; NextStepSigProf = 'LOAD'
 | |
| 				CASE BasicSigProf = 'UNLOAD'	; NextStepSigProf = 'UNLOAD'
 | |
| 				CASE BasicSigProf = 'QA'		; NextStepSigProf = 'QA'
 | |
| 			END CASE
 | |
| 			
 | |
| 			
 | |
| 		END	;* End of check for unsigned line and null NextStepSigProf
 | |
| 	NEXT I
 | |
| 	
 | |
| 	WfrSigProfileList = Get_Property(@WINDOW:'.WFR_SIG_PROFILE','LIST')
 | |
| 	
 | |
| 	WfrSigProfCnt = COUNT(WfrSigProfileList,@FM) + (WfrSigProfileList NE '')
 | |
| 		
 | |
| 	NextStepSigProf = ''
 | |
| 	
 | |
| 	FOR I =1 TO WfrSigProfCnt
 | |
| 		SigProf		= WfrSigProfileList<I,COL$SIG_PROF>
 | |
| 		Signature	= WfrSigProfileList<I,COL$SIGNATURE>
 | |
| 		StageStatus	= WfrSigProfileList<I,COL$CHAR_WFR_STATUS>
 | |
| 		
 | |
| 		BEGIN CASE
 | |
| 			CASE SigProf NE '' AND StageStatus EQ 'RUN'	;LineColor = LS3_GREEN$
 | |
| 			CASE SigProf NE '' AND StageStatus EQ 'SIG' ;LineColor = ORANGE$
 | |
| 			CASE SigProf NE '' AND 	Signature EQ ''		;LineColor = YELLOW$
 | |
| 			CASE SigProf NE '' AND 	Signature NE ''		;LineColor = GREEN$
 | |
| 			CASE SigProf EQ '' AND 	Signature EQ ''		;LineColor = WHITE$
 | |
| 			CASE 1	; LineColor = WHITE$
 | |
| 		END CASE
 | |
| 		stat = Send_Message(@WINDOW:'.WFR_SIG_PROFILE','COLOR_BY_POS',0,I,LineColor)
 | |
| 		
 | |
| 	NEXT I
 | |
| 	
 | |
| 	
 | |
| 	VerReqCtrl	= @WINDOW:'.VER_WFR_CNT'
 | |
| 	
 | |
| 	LoadReqCtrls  = @WINDOW:'.LOAD_WFR_CNT':@RM
 | |
| 	LoadReqCtrls := @WINDOW:'.LOAD_LOCK_SIDE'
 | |
| 	
 | |
| 	UnloadReqCtrl = @WINDOW:'.WFR_UNLOAD_QTY'
 | |
| 	
 | |
| 	QAReqCtrls  = @WINDOW:'.ADE_READ':@RM
 | |
| 	QAReqCtrls := @WINDOW:'.LAST_WAFER_RHO':@RM
 | |
| 	QAReqCtrls := @WINDOW:'.SHIFT':@RM
 | |
| 	QAReqCtrls := @WINDOW:'.FIN_WFR_CNT'
 | |
| 	QAReqCtrls := @WINDOW:'.FQA_LPD'				;* Added LPD's here -dkk 12/3/14
 | |
| 	
 | |
| 	ClearCtrls = ''
 | |
| 	
 | |
| 	IF NextStepSigProf = 'VER' THEN	
 | |
| 		Val = Get_Property(VerReqCtrl,'DEFPROP')
 | |
| 		IF Val = '' THEN BackColor = RED$ ELSE BackColor = WHITE$
 | |
| 		Set_Property(VerReqCtrl,'BACKCOLOR',BackColor)
 | |
| 	END ELSE
 | |
| 		ClearCtrls := VerReqCtrl:@RM
 | |
| 	END
 | |
| 			
 | |
| 	IF NextStepSigProf = 'LOAD' THEN
 | |
| 		CtrlCnt = 2
 | |
| 		Vals = Get_Property(LoadReqCtrls,'DEFPROP')
 | |
| 		BackColors = ''
 | |
| 		FOR I = 1 TO CtrlCnt
 | |
| 			IF FIELD(Vals,@RM,I) = '' THEN
 | |
| 				BackColors = FieldStore(BackColors,@RM,I,1,RED$)
 | |
| 			END ELSE
 | |
| 				BackColors = FieldStore(BackColors,@RM,I,1,WHITE$)
 | |
| 			END
 | |
| 		NEXT I
 | |
| 		Set_Property(LoadReqCtrls,'BACKCOLOR',BackColors)
 | |
| 	END ELSE
 | |
| 		ClearCtrls := LoadReqCtrls:@RM
 | |
| 	END
 | |
| 	
 | |
| 	IF NextStepSigProf = 'UNLOAD' THEN
 | |
| 		Val	= Get_Property(UnloadReqCtrl,'DEFPROP')
 | |
| 		IF Val = '' THEN BackColor = RED$ ELSE BackColor = WHITE$
 | |
| 		Set_Property(UnloadReqCtrl,'BACKCOLOR',BackColor)
 | |
| 	END ELSE
 | |
| 		ClearCtrls := UnloadReqCtrl:@RM
 | |
| 	END
 | |
| 	
 | |
| 	IF NextStepSigProf = 'QA' THEN
 | |
| 		CtrlCnt = 4										
 | |
| 		Vals = Get_Property(QAReqCtrls,'DEFPROP')
 | |
| 		BackColors = ''
 | |
| 		FOR I = 1 TO CtrlCnt
 | |
| 			IF FIELD(Vals,@RM,I) = '' THEN
 | |
| 				BackColors = FieldStore(BackColors,@RM,I,1,YELLOW$)
 | |
| 			END ELSE
 | |
| 				BackColors = FieldStore(BackColors,@RM,I,1,WHITE$)
 | |
| 			END
 | |
| 		NEXT I
 | |
| 		Set_Property(QAReqCtrls,'BACKCOLOR',BackColors)
 | |
| 	END ELSE
 | |
| 		ClearCtrls := QAReqCtrls:@RM
 | |
| 	END
 | |
| 	
 | |
| 	ClearCtrls[-1,1] = ''
 | |
| 	
 | |
| 	Set_Property(ClearCtrls,'BACKCOLOR',WHITE$)
 | |
| 	
 | |
| END ;* End of check for EpiPro reactor
 | |
| 
 | |
| 
 | |
| *************
 | |
| 
 | |
| * QBF buttons
 | |
| 
 | |
| Ctrls  = @WINDOW:'.QBF_FIRST_FIX':@RM		; Props  = 'ENABLED':@RM
 | |
| Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM		; Props := 'ENABLED':@RM
 | |
| Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM			; Props := 'ENABLED':@RM
 | |
| Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM		; Props := 'ENABLED':@RM
 | |
| Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM		; Props := 'ENABLED':@RM
 | |
| Ctrls := @WINDOW:'.QBF_STOP_FIX'			; Props := 'ENABLED'
 | |
| 
 | |
| IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
 | |
| 	Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
 | |
| END ELSE
 | |
| 	Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
 | |
| END
 | |
| 
 | |
| Set_Property(Ctrls,Props,Vals)
 | |
| 
 | |
| * 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_WFR_ID' 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:'.RDS_LS_ID'
 | |
| 
 | |
| LayerList = Get_Property(CtrlID,'LIST')
 | |
| 
 | |
| FOR I = 1 TO COUNT(LayerList,@FM) + (LayerList NE '')
 | |
| 
 | |
| 	IF ICONV(LayerList<I,COL$PARMS_OUT>,'B') = 1 THEN
 | |
| 		ParmColor = RED$
 | |
| 	END ELSE
 | |
| 		IF ICONV(LayerList<I,COL$PARAMS>,'B') = 0 THEN
 | |
| 			ParmColor = YELLOW$
 | |
| 			EnableSignButton = 0
 | |
| 		END ELSE
 | |
| 			ParmColor = GREEN$
 | |
| 		END
 | |
| 	END
 | |
| 	
 | |
| 	FOR Col = COL$LSID TO COL$PARMS_OUT
 | |
| 		stat = Send_Message(CtrlID,'COLOR_BY_POS',Col,I,ParmColor)
 | |
| 	NEXT Col
 | |
| 	
 | |
| 	
 | |
| 	IF ICONV(LayerList<I,COL$MET_TWSIG>,'B') = 0 THEN
 | |
| 		MetColor = ORANGE$
 | |
| 		EnableLoadButton = 0
 | |
| 	END ELSE
 | |
| 		IF ICONV(LayerList<I,COL$MET_OUT>,'B') = 1 THEN
 | |
| 			MetColor = RED$
 | |
| 			EnableSignButton = 0
 | |
| 		END ELSE
 | |
| 			IF LayerList<I,COL$THICK_AVG> = '' AND LayerList<I,COL$RRHO_AVG> = '' AND LayerList<I,COL$MET_NO> NE '' THEN
 | |
| 				MetColor = YELLOW$
 | |
| 				EnableSignButton = 0
 | |
| 			END ELSE
 | |
| 				MetColor = GREEN$
 | |
| 			END
 | |
| 		END
 | |
| 	END
 | |
| 	
 | |
| 	FOR Col = COL$MET_NO TO COL$RRHO_AVG
 | |
| 		stat = Send_Message(CtrlID,'COLOR_BY_POS',Col,I,MetColor)
 | |
| 	NEXT Col
 | |
| 	
 | |
| 	IF ICONV(LayerList<I,COL$MET_TWSIG_Z1>,'B') = 0 THEN
 | |
| 		MetColorZ1 = ORANGE$
 | |
| 		EnableLoadButton = 0
 | |
| 	END ELSE
 | |
| 		IF ICONV(LayerList<I,COL$MET_OUT_Z1>,'B') = 1 THEN
 | |
| 			MetColorZ1 = RED$
 | |
| 			EnableSignButton = 0
 | |
| 		END ELSE
 | |
| 			IF LayerList<I,COL$THICK_AVG_Z1> = '' AND LayerList<I,COL$RRHO_AVG_Z1> = '' AND LayerList<I,COL$MET_NO_Z1> NE '' THEN
 | |
| 				MetColorZ1 = YELLOW$
 | |
| 				EnableSignButton = 0
 | |
| 			END ELSE
 | |
| 				MetColorZ1 = PRE_BLUE$
 | |
| 			END
 | |
| 		END
 | |
| 	END
 | |
| 	
 | |
| 	FOR Col = COL$MET_NO_Z1 TO COL$RRHO_AVG_Z1
 | |
| 		stat = Send_Message(CtrlID,'COLOR_BY_POS',Col,I,MetColorZ1)
 | |
| 	NEXT Col
 | |
| 	
 | |
| 	IF ICONV(LayerList<I,COL$MET_TWSIG_Z2>,'B') = 0 THEN
 | |
| 		MetColorZ2 = ORANGE$
 | |
| 		EnableLoadButton = 0
 | |
| 	END ELSE
 | |
| 		IF ICONV(LayerList<I,COL$MET_OUT_Z2>,'B') = 1 THEN
 | |
| 			MetColorZ2 = RED$
 | |
| 			EnableSignButton = 0
 | |
| 		END ELSE
 | |
| 			IF LayerList<I,COL$THICK_AVG_Z2> = '' AND LayerList<I,COL$RRHO_AVG_Z2> = '' AND LayerList<I,COL$MET_NO_Z2> NE '' THEN
 | |
| 				MetColorZ2 = YELLOW$
 | |
| 				EnableSignButton = 0
 | |
| 			END ELSE
 | |
| 				MetColorZ2 = INP_BLUE$
 | |
| 			END
 | |
| 		END
 | |
| 	END
 | |
| 	
 | |
| 	FOR Col = COL$MET_NO_Z2 TO COL$RRHO_AVG_Z2
 | |
| 		stat = Send_Message(CtrlID,'COLOR_BY_POS',Col,I,MetColorZ2)
 | |
| 	NEXT Col
 | |
| 	
 | |
| NEXT I
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| CtrlID = @WINDOW:'.CHAR_WFR_ID'
 | |
| 
 | |
| CharWfrList = Get_Property(CtrlID,'LIST')
 | |
| 
 | |
| 
 | |
| FOR I = 1 TO COUNT(CharWfrList,@FM) + (CharWfrList NE '')
 | |
| 
 | |
| 	CurrStage	= CharWfrList<I,COL$CURR_STAGE>
 | |
| 	CharDest	= CharWfrList<I,COL$CHAR_DEST>
 | |
| 	StageStatus	= CharWfrList<I,COL$CHAR_WFR_STATUS>
 | |
| 		
 | |
| 		BEGIN CASE
 | |
| 			CASE SigProf NE '' AND StageStatus EQ 'RUN'		;LineColor = LS3_GREEN$
 | |
| 			CASE SigProf NE '' AND StageStatus EQ 'SIG' 	;LineColor = ORANGE$
 | |
| 			CASE SigProf NE '' AND StageStatus EQ 'PART'	;LineColor = GREY$
 | |
| 			CASE SigProf NE '' AND 	Signature EQ ''			;LineColor = YELLOW$
 | |
| 			CASE SigProf NE '' AND 	Signature NE ''			;LineColor = GREEN$
 | |
| 			CASE SigProf EQ '' AND 	Signature EQ ''			;LineColor = WHITE$
 | |
| 			CASE 1	; LineColor = WHITE$
 | |
| 		END CASE
 | |
| 		
 | |
| 		* * * * * * *  Change to display 'DEST' column to red if destroyed, rest of line to LineColor  ********** ****************************
 | |
| 	
 | |
| 	BEGIN CASE
 | |
| 	
 | |
| 		CASE CurrStage = '-'		; 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_DEST,I,RED$)
 | |
| 	END
 | |
| NEXT I
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Read:
 | |
| * * * * * * *
 | |
| 
 | |
| ReactNo = Get_Property(@WINDOW:'.REACTOR','DEFPROP')
 | |
| ReactType = XLATE('REACTOR',ReactNo,REACTOR_REACT_TYPE$,'X')
 | |
| 
 | |
| IF ReactType = 'EPP' THEN
 | |
| 	
 | |
| 	PSNo		= Get_Property(@WINDOW:'.PS_NO','DEFPROP')
 | |
| 	ReactorLoad = Get_Property(@WINDOW:'.REACTOR_LOAD','LIST')
 | |
| 	CurrPockets = ReactorLoad<COL$POCKET>
 | |
| 
 | |
| 	CONVERT @VM	TO '' IN CurrPockets
 | |
| 	
 | |
| 	IF CurrPockets = '' THEN
 | |
| 		PSNWaferSize = XLATE('PROD_SPEC',PSNo,'SUB_WAFER_SIZE','X')
 | |
| 		
 | |
| 		BEGIN CASE
 | |
| 			CASE PSNWaferSize = '150 mm 6 in'
 | |
| 				EpiSusceptor = XLATE('EPI_SUSCEPTOR','6','','X')
 | |
| 				
 | |
| 			CASE PSNWaferSize = '125 mm 5 in'
 | |
| 				EpiSusceptor = XLATE('EPI_SUSCEPTOR','5','','X')
 | |
| 			
 | |
| 			CASE 1
 | |
| 				ErrorMsg  = 'PSN: ':QUOTE(PSNo):' has a wafer size of ':PSNWaferSize:'.':CRLF$:CRLF$
 | |
| 				ErrorMsg := 'The EpiPRO reactors cannot process wafers of this size.'
 | |
| 				ErrMsg(ErrorMsg)
 | |
| 				GOSUB Refresh
 | |
| 				RETURN
 | |
| 				
 | |
| 		END CASE
 | |
| 		
 | |
| 		Pockets = EpiSusceptor<EPI_SUSCEPTOR_POCKET_NO$>
 | |
| 		Zones	= EpiSusceptor<EPI_SUSCEPTOR_POCKET_ZONE$>
 | |
| 		PTypes	= EpiSusceptor<EPI_SUSCEPTOR_POCKET_TYPE$>
 | |
| 
 | |
| 		FOR I = 1 TO COUNT(Pockets,@VM) + (Pockets NE '')
 | |
| 			Set_Property(@WINDOW:'.REACTOR_LOAD','CELLPOS',Pockets<1,I>,COL$POCKET:@FM:I)
 | |
| 			Set_Property(@WINDOW:'.REACTOR_LOAD','CELLPOS',PTypes<1,I>,COL$USAGE:@FM:I)
 | |
| 			Set_Property(@WINDOW:'.REACTOR_LOAD','CELLPOS',Zones<1,I>,COL$ZONE:@FM:I)
 | |
| 		NEXT I
 | |
| 	
 | |
| 	END	;* End of check for Pocket column data
 | |
| 
 | |
| END	;* End of check for EpiPro reactor type
 | |
| 
 | |
| 
 | |
| GOSUB Refresh
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Page:
 | |
| * * * * * * *
 | |
| 
 | |
| 
 | |
| Page = Get_Property(@WINDOW:'.TABCONTROL', 'VALUE')
 | |
| 
 | |
| Set_Property(@WINDOW,'VPOSITION', Page)
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| VScroll:
 | |
| * * * * * * *
 | |
| 
 | |
| 
 | |
| 
 | |
| Page = Parm1
 | |
| 
 | |
| Set_Property(@WINDOW:'.TABCONTROL','VALUE', Page)
 | |
| 
 | |
| 
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Write:
 | |
| * * * * * * *
 | |
| 
 | |
| 
 | |
| 
 | |
| prevControl = Get_Property("SYSTEM" , "PREVFOCUS")
 | |
| 
 | |
| 
 | |
| Result = 1
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Delete:
 | |
| * * * * * * *
 | |
| 
 | |
| /*
 | |
| IF Security_Check('Order',Delete$) THEN
 | |
| 	Result = 1		;* Proceed with delete
 | |
| END ELSE
 | |
| 	Security_Err_Msg('Order',Delete$)
 | |
| 	Result = 0		;* Stop event chain
 | |
| END
 | |
| */
 | |
| 
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| RDSNoLF:
 | |
| * * * * * * *
 | |
| 
 | |
| PromptDataIn = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
 | |
| 
 | |
| CONVERT '.' TO '*' IN PromptDataIN
 | |
| 
 | |
| IF INDEX(PromptDataIn,'*',1) THEN
 | |
| 	WOMatRec = XLATE('WO_MAT',PromptDataIn,'','X')
 | |
| 	IF WOMatRec NE '' THEN
 | |
| 		RDSNos = WOMatRec<WO_MAT_RDS_NO$>
 | |
| 		
 | |
| 		IF RDSNos NE '' THEN
 | |
| 			IF INDEX(RDSNos,@VM,1) THEN
 | |
| 				TypeOver = ''
 | |
| 				TypeOver<PDISPLAY$> = RDSNos
 | |
| 				RDSNo = Popup(@WINDOW,TypeOver,'REACT_RUN')
 | |
| 				IF RDSNo = CHAR(27) OR RDSNo = '' THEN RETURN
 | |
| 				Set_Property(@WINDOW:'.RDS_NO','DEFPROP','')
 | |
| 				obj_AppWindow('LoadFormKeys',@WINDOW:@RM:RDSNo)
 | |
| 			END ELSE
 | |
| 				Set_Property(@WINDOW:'.RDS_NO','DEFPROP','')
 | |
| 				obj_AppWindow('LoadFormKeys',@WINDOW:@RM:RDSNos)
 | |
| 			END	
 | |
| 		END ELSE
 | |
| 			* Must be EpiPro
 | |
| 			WMIRdsNos	= XLATE('WO_MAT',PromptDataIn,'WMI_RDS_NO','X')
 | |
| 			WMISlotNCRs	= XLATE('WO_MAT',PromptDataIn,'WMI_SLOT_NCR','X')
 | |
| 			WMORdsNos	= XLATE('WO_MAT',PromptDataIn,'WMO_RDS_NO','X')
 | |
| 			WMOSlotNCRs	= XLATE('WO_MAT',PromptDataIn,'WMO_SLOT_NCR','X')
 | |
| 			
 | |
| 			WMICnt = COUNT(WMIRdsNos,@VM) + (WMIRdsNos NE '')
 | |
| 			WMOCnt = COUNT(WMORdsNos,@VM) + (WMORdsNos NE '')
 | |
| 			
 | |
| 			InboundRDSs = ''
 | |
| 			OutBoundRDSs = ''
 | |
| 			
 | |
| 			FOR I = 1 TO WMICnt
 | |
| 				RDSNo = WMIRdsNos<1,I>
 | |
| 				
 | |
| 				IF WMISlotNCRs<1,I> = '' THEN
 | |
| 					LOCATE RDSNo IN InboundRDSs USING @VM SETTING Pos ELSE
 | |
| 						InboundRDSs = INSERT(InboundRDSs,1,Pos,0,RDSNo)
 | |
| 					END
 | |
| 				END
 | |
| 			NEXT I
 | |
| 			
 | |
| 			FOR I = 1 TO WMOCnt
 | |
| 				RDSNo = WMORdsNos<1,I>
 | |
| 				
 | |
| 				IF WMOSlotNCRs<1,I> = '' THEN
 | |
| 					LOCATE RDSNo IN OutboundRDSs USING @VM SETTING Pos ELSE
 | |
| 						OutboundRDSs = INSERT(OutboundRDSs,1,Pos,0,RDSNo)
 | |
| 					END
 | |
| 				END
 | |
| 			NEXT I
 | |
| 			
 | |
| 			IRCnt = COUNT(InboundRDSs,@VM) + (InboundRDSs NE '')
 | |
| 			ORCnt = COUNT(OutboundRDSs,@VM) + (OutboundRDSs NE '')
 | |
| 			
 | |
| 			Display = ''
 | |
| 			
 | |
| 			FOR I = 1 TO IRCnt
 | |
| 				Display<1,-1> = 'Inbound':@SVM:InboundRDSs<1,I>
 | |
| 			NEXT I
 | |
| 			
 | |
| 			FOR I = 1 TO ORCnt
 | |
| 				Display<1,-1> = 'Outbound':@SVM:OutboundRDSs<1,I>
 | |
| 			NEXT I
 | |
| 			
 | |
| 			TypeOver = ''
 | |
| 			TypeOver<PDISPLAY$> = Display
 | |
| 			RDSNo = Popup(@WINDOW,TypeOver,'EPI_PRO_WO_MAT_RDS')
 | |
| 			
 | |
| 			IF RDSNo = CHAR(27) OR RDSNo = '' THEN RETURN
 | |
| 			Set_Property(@WINDOW:'.RDS_NO','DEFPROP','')
 | |
| 			obj_AppWindow('LoadFormKeys',@WINDOW:@RM:RDSNo)
 | |
| 			
 | |
| 		END
 | |
| 	END
 | |
| END 
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| CIClick:
 | |
| * * * * * * *
 | |
| CINO = 0
 | |
| 
 | |
| CurrCtrl = Parm1
 | |
| 
 | |
| /*BEGIN CASE
 | |
| 	CASE CurrCtrl = @WINDOW:'.PRE_EPI_CI_BUTTON'	; CIKey = Get_Property(@WINDOW:'.PRE_EPI_CI_BUTTON','TEXT')
 | |
| 	CASE CurrCtrl = @WINDOW:'.UNLOAD_CI_BUTTON'		; CIKey = Get_Property(@WINDOW:'.UNLOAD_CI_BUTTON','TEXT')
 | |
| 	CASE CurrCtrl = @WINDOW:'.POST_CI_BUTTON'		; CIKey = Get_Property(@WINDOW:'.POST_CI_BUTTON','TEXT')
 | |
| 	CASE 1	; RETURN
 | |
| END Case*/
 | |
| 
 | |
| BEGIN Case											;* Substituted for remarked out code above. Copied from COMM_RDS. -dkk 10/22/14 
 | |
| 	CASE @WINDOW = 'REACT_RUN'						;* CASE @WINDOW = 'RDS_PRE_EPI'
 | |
| 		Stage = 'PRE'
 | |
| 		CICtrl = @WINDOW:'.PRE_EPI_CI_BUTTON'
 | |
| 		
 | |
| 	CASE @WINDOW = 'REACT_RUN'						;* CASE @WINDOW = 'RDS'
 | |
| 		Stage = 'FWI'
 | |
| 		CICtrl = @WINDOW:'.LOAD_CI_BUTTON'
 | |
| 		
 | |
| 	CASE @WINDOW = 'REACT_RUN'						;* CASE @WINDOW = 'RDS_UNLOAD'
 | |
| 		Stage = 'LWI'
 | |
| 		CICtrl = @WINDOW:'.UNLOAD_CI_BUTTON'
 | |
| 
 | |
| 	CASE @WINDOW = 'REACT_RUN'						;* CASE @WINDOW = 'RDS_POST_EPI'
 | |
| 		Stage = 'POST'
 | |
| 		CICtrl = @WINDOW:'.POST_CI_BUTTON'
 | |
| 
 | |
| 	CASE 1	; RETURN
 | |
| 	
 | |
| END CASE
 | |
| 
 | |
| DetWindow	= 'CLEAN_INSP'
 | |
| DetKeys		= CINO
 | |
| DefaultRec	= ''
 | |
| 
 | |
| obj_AppWindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:'')
 | |
| 
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| LURunPri:
 | |
| * * * * * * *
 | |
| 
 | |
| RunPri = Popup(@WINDOW,'','GAN_WFR_PRIORITY')
 | |
| 
 | |
| IF RunPri = CHAR(27)  THEN RETURN	;* Canceled
 | |
| 
 | |
| obj_Appwindow('LUValReturn',RunPri:@RM:@WINDOW:'.RUN_PRI')
 | |
| 
 | |
| 
 | |
| GOSUB Refresh
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| LURDSNo:
 | |
| * * * * * * *
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| LUReactNo:
 | |
| * * * * * * *
 | |
| 
 | |
| ReactorNo = Get_Property(@WINDOW:'.REACTOR','DEFPROP')
 | |
| 
 | |
| Set_Status(0)
 | |
| 
 | |
| ReactorNo = Popup(@WINDOW,'','REACTORS')
 | |
| 
 | |
| IF ReactorNo = '' THEN RETURN
 | |
| 
 | |
| obj_Appwindow('LUValReturn',ReactorNo:@RM:@WINDOW:'.REACTOR')
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| LUReactEsc:
 | |
| * * * * * * * 
 | |
| 
 | |
| IF NOT(ASSIGNED(Parm1)) THEN FocusControl = ''	ELSE FocusControl = Parm1
 | |
| IF NOT(ASSIGNED(Parm2)) THEN FocusPos = ''		ELSE FocusPos = Parm2
 | |
| 
 | |
| Set_Status(0)
 | |
| 
 | |
| EventKeys = obj_React_Esc('Find')	
 | |
| 
 | |
| IF Get_Status(errCode) THEN ErrMsg(ErrCode)
 | |
| 
 | |
| IF INDEX(EventKeys,@VM,1) THEN
 | |
| 	TypeOver = ''
 | |
| 	TypeOver<PMODE$> = 'K'
 | |
| 	TypeOver<PDISPLAY$> = EventKeys
 | |
| 	EventKeys = Popup(@WINDOW,TypeOver,'REACT_ESC_QUERY')
 | |
| END
 | |
| 
 | |
| CONVERT @VM TO @FM IN EventKeys
 | |
| 
 | |
| IF INDEX(EventKeys,@FM,1) THEN
 | |
| 	Send_Event(@WINDOW,'QBFINIT')
 | |
| 	Set_Property(@WINDOW,'QBFLIST',EventKeys)
 | |
| 	GOSUB Refresh
 | |
| 	Send_Event(@WINDOW,'QBFIRST')
 | |
| END ELSE
 | |
| 	obj_Appwindow('LoadFormKeys',@WINDOW:@RM:EventKeys)
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Close:
 | |
| * * * * * * *
 | |
| 
 | |
| 
 | |
| obj_Notes('Inbox',@USER4)	;* Checks for any new messages
 | |
| 
 | |
| Parent = Get_Property(@WINDOW,'PARENT')
 | |
| 
 | |
| IF Parent[1,7] = 'WO_PROD' THEN
 | |
| 	Post_Event(Parent, 'READ')
 | |
| END
 | |
| 
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| CopyMetrology:
 | |
| * * * * * * *
 | |
| 
 | |
| RDSNo      = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
 | |
| WONo       = Get_Property(@Window:'.WO_NO', 'TEXT')
 | |
| DestRDSNos = Dialog_Box('NDW_RDS_QUERY', @Window, WONo : @FM : 'quick')
 | |
| 
 | |
| SourceMetKeys = obj_React_Run('GetMetKeys',RDSNo)
 | |
| 
 | |
| RDSCnt = COUNT(DestRDSNos,@VM) + (DestRDSNos NE '')
 | |
| 
 | |
| FOR I = 1 TO RDSCnt
 | |
| 	Copy = 1						;* Set flag
 | |
| 	DestRDSNo = DestRDSNos<1,I>
 | |
| 	
 | |
| 	MetEntered = XLATE('RDS',DestRDSNo,'LS_MET_ENTERED','X')			;* @VM list of binary values by layer
 | |
| 	
 | |
| 	IF MetEntered[1,1] = 1 THEN
 | |
| 		MsgInfo = ''
 | |
| 		MsgInfo<MTEXT$>	= 'RDS ':DestRDSNo:' already has Metrology Results.  Do you wish to overwrite them?'
 | |
| 		MsgInfo<MICON$> = '?'
 | |
| 		MsgInfo<MTYPE$> = 'BNY'
 | |
| 		MsgInfo<MDEFBTN$> = '2'				;* This sets the default to the No button
 | |
| 		Copy = Msg(@WINDOW,MsgInfo)
 | |
| 	END
 | |
| 	
 | |
| 	IF Copy THEN
 | |
| 		DestMetKeys = obj_React_Run('GetMetKeys',DestRDSNo)
 | |
| 		
 | |
| 		IF SourceMetKeys<1> = DestMetKeys<1> THEN
 | |
| 			Set_Status(0)
 | |
| 			obj_RDS_Test('CopyStats',SourceMetKeys<2>:@RM:DestMetKeys<2>)
 | |
| 			IF Get_Status(errCode) THEN
 | |
| 				ErrMsg(errCode)
 | |
| 			END		
 | |
| 		END ELSE
 | |
| 			ErrMsg('SourceMetKeys not equal DestMetKeys: Contact FI')
 | |
| 		END
 | |
| 	
 | |
| 	END	;* End of check for Copy flag
 | |
| 
 | |
| NEXT I
 | |
| 
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| LSIdDC:
 | |
| * * * * * * *
 | |
| 
 | |
| CtrlEntID = @WINDOW:'.RDS_LS_ID'
 | |
| RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
 | |
| 
 | |
| IF Get_Property(@WINDOW,'SAVEWARN') THEN
 | |
| 	Set_Property(@WINDOW,'@SKIP_SAVEWARN',0)
 | |
| END ELSE
 | |
| 	Set_Property(@WINDOW,'@SKIP_SAVEWARN',1)
 | |
| END
 | |
| 
 | |
| CurrPos = Get_Property(CtrlEntID,'SELPOS')
 | |
| CurrCol = CurrPos<1>
 | |
| CurrRow = CurrPos<2>
 | |
| 
 | |
| 
 | |
| IF CurrCol LT COL$MET_NO THEN
 | |
| 	LSId = Get_Property(CtrlEntID,'CELLPOS',COL$LSID:@FM:CurrRow)
 | |
| 
 | |
| 	IF RDSNo NE '' AND LSId NE '' THEN
 | |
| 	
 | |
| 	Send_Event('REACT_RUN','WRITE')
 | |
| 
 | |
| 	RdsLSID = RDSNo:'*':LSId
 | |
| 
 | |
| 	DetWindow	= 'RDS_LAYER'
 | |
| 	DetKeys		= RdsLSID
 | |
| 	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)
 | |
| 	
 | |
| 	END
 | |
| END
 | |
| 
 | |
| IF CurrCol = COL$MET_NO OR CurrCol = COL$MET_NO_Z1 OR CurrCol = COL$MET_NO_Z2 THEN
 | |
| 	MetNo = Get_Property(CtrlEntID,'CELLPOS',CurrCol:@FM:CurrRow)
 | |
| 
 | |
| 	IF MetNo NE '' THEN
 | |
| 		
 | |
| 		Send_Event('REACT_RUN','WRITE')
 | |
| 
 | |
| 		DetWindow	= 'RDS_TEST'
 | |
| 		DetKeys		= MetNo
 | |
| 		DefaultRec	= ''
 | |
| 		RetKey		= RDSNo
 | |
| 		RetWin		= 'RDS'
 | |
| 		RetPage		= 1
 | |
| 		RetCtrl		= CtrlEntID
 | |
| 		RetPos		= CurrPos
 | |
| 		
 | |
| 		obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
 | |
| 			
 | |
| 	END
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| AddZoneMet:
 | |
| * * * * * * *
 | |
| 
 | |
| CtrlEntID = @WINDOW:'.RDS_LS_ID_FIX'
 | |
| 
 | |
| RDSNo	= Get_Property(@WINDOW:'.RDS_NO_FIX','DEFPROP')
 | |
| PSNo	= Get_Property(@WINDOW:'.PS_NO_FIX','DEFPROP')
 | |
| LSArray = Get_Property(CtrlEntID,'DEFPROP')
 | |
| 
 | |
| LSIDs		= LSArray<COL$LSID>
 | |
| MetNos		= LSArray<COL$MET_NO>
 | |
| MetNosZ1	= LSArray<COL$MET_NO_Z1>
 | |
| MetNosZ2	= LSArray<COL$MET_NO_Z2>
 | |
| 
 | |
| MetTest	= MetNos
 | |
| Z1Test	= MetNosZ1
 | |
| Z2Test	= MetNosZ2
 | |
| 
 | |
| CONVERT @VM TO '' IN MetTest
 | |
| CONVERT @VM TO '' IN Z1Test
 | |
| CONVERT @VM TO '' IN Z2Test
 | |
| 
 | |
| IF MetTest = '' THEN
 | |
| 	BEGIN CASE
 | |
| 		CASE Z1Test = '' AND Z2Test = ''
 | |
| 			* Ask for z1 or z2
 | |
| 			TypeOver = ''
 | |
| 			TypeOver<MTYPE$>	= 'B&1,&2,&Cancel'
 | |
| 			TypeOver<MCAPTION$>	= 'Add Reactor Zone Metrology'
 | |
| 			TypeOver<MICON$>	= '?'
 | |
| 			TypeOver<MDEFBTN$>	= '3'
 | |
| 			TypeOver<MTEXT$>	= 'Add Metrology for Zone:'
 | |
| 			
 | |
| 			NewZone = Msg(@WINDOW,TypeOver,'')
 | |
| 			
 | |
| 			IF NewZone = 3 THEN RETURN
 | |
| 			
 | |
| 			
 | |
| 		CASE Z1Test = '' AND Z2Test NE ''
 | |
| 			NewZone = 1
 | |
| 			
 | |
| 		CASE Z1Test NE '' AND Z2Test = ''
 | |
| 			NewZone = 2
 | |
| 			
 | |
| 		CASE 1
 | |
| 			ErrMsg('No open Zone to move to.')
 | |
| 			RETURN
 | |
| 			
 | |
| 	END CASE
 | |
| 	
 | |
| 	Send_Event(@WINDOW,'WRITE')
 | |
| 	
 | |
| 	FOR I = 1 TO COUNT(LSIDs,@VM) + (LSIDs NE '')
 | |
| 		IF LSIDs<1,I> NE '' THEN
 | |
| 			LSID = LSIDs<1,I>
 | |
| 			
 | |
| 			oRTParms  = RDSNo:@RM
 | |
| 			oRTParms := LSID:@RM
 | |
| 			oRTParms := PSNo:@RM
 | |
| 			oRTParms := NewZone
 | |
| 			
 | |
| 			obj_RDS_Test('Create',oRTPARms)
 | |
| 		END
 | |
| 	NEXT I
 | |
| 	
 | |
| 	Set_Property(@WINDOW:'.RDS_NO','DEFPROP',RDSNo)
 | |
| 	Send_Event(@WINDOW,'READ')
 | |
| 	
 | |
| END 
 | |
| 		
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| MoveMetToZone:
 | |
| * * * * * * *
 | |
| 
 | |
| CtrlEntID = @WINDOW:'.RDS_LS_ID_FIX'
 | |
| RDSNo = Get_Property(@WINDOW:'.RDS_NO_FIX','DEFPROP')
 | |
| 
 | |
| LSArray = Get_Property(CtrlEntID,'DEFPROP')
 | |
| 
 | |
| MetNos		= LSArray<COL$MET_NO>
 | |
| MetNosZ1	= LSArray<COL$MET_NO_Z1>
 | |
| MetNosZ2	= LSArray<COL$MET_NO_Z2>
 | |
| 
 | |
| MetTest	= MetNos
 | |
| Z1Test	= MetNosZ1
 | |
| Z2Test	= MetNosZ2
 | |
| 
 | |
| CONVERT @VM TO '' IN MetTest
 | |
| CONVERT @VM TO '' IN Z1Test
 | |
| CONVERT @VM TO '' IN Z2Test
 | |
| 
 | |
| IF MetTest NE '' THEN
 | |
| 	BEGIN CASE
 | |
| 		CASE Z1Test = '' AND Z2Test = ''
 | |
| 			* Ask for z1 or z2
 | |
| 			TypeOver = ''
 | |
| 			TypeOver<MTYPE$>	= 'B&1,&2,&Cancel'
 | |
| 			TypeOver<MCAPTION$>	= 'Move  Metrology to Reactor Zone'
 | |
| 			TypeOver<MICON$>	= '?'
 | |
| 			TypeOver<MDEFBTN$>	= '3'
 | |
| 			TypeOver<MTEXT$>	= 'Move Metrology to Zone:'
 | |
| 			
 | |
| 			DestZone = Msg(@WINDOW,TypeOver,'')
 | |
| 			
 | |
| 			IF DestZone = 3 THEN RETURN
 | |
| 			
 | |
| 			
 | |
| 		CASE Z1Test = '' AND Z2Test NE ''
 | |
| 			DestZone = 1
 | |
| 			
 | |
| 		CASE Z1Test NE '' AND Z2Test = ''
 | |
| 			DestZone = 2
 | |
| 			
 | |
| 		CASE 1
 | |
| 			ErrMsg('No open Zone to move to.')
 | |
| 			RETURN
 | |
| 			
 | |
| 	END CASE
 | |
| 	
 | |
| 	Send_Event(@WINDOW,'WRITE')
 | |
| 	
 | |
| 	FOR I = 1 TO COUNT(MetNos,@VM) + (MetNos NE '')
 | |
| 		IF MetNos<1,I> NE '' THEN
 | |
| 			MetNo = MetNos<1,I>
 | |
| 			
 | |
| 			oRTParms  = MetNo:@RM
 | |
| 			oRTParms := DestZone
 | |
| 			
 | |
| 			obj_RDS_Test('SetZone',oRTPARms)
 | |
| 		END
 | |
| 	NEXT I
 | |
| 	
 | |
| 	Set_Property(@WINDOW:'.RDS_NO','DEFPROP',RDSNo)
 | |
| 	Send_Event(@WINDOW,'READ')
 | |
| 	
 | |
| END 
 | |
| 		
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| ViewWOMat:
 | |
| * * * * * * *
 | |
| 
 | |
| Ctrls  = @WINDOW:'.WO_NO':@RM			; Props  = 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.CASS_NO':@RM			; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.RDS_NO':@RM			; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.REACTOR':@RM			; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.WO_STEP'				; Props := 'DEFPROP'
 | |
| 
 | |
| Vals = Get_Property(Ctrls,Props)
 | |
| 
 | |
| WONo	= Vals[1,@RM]
 | |
| CassNo	= Vals[COL2()+1,@RM]
 | |
| RDSNo	= Vals[COL2()+1,@RM]
 | |
| Reactor	= Vals[COL2()+1,@RM]
 | |
| WOStep	= Vals[COL2()+1,@RM]
 | |
| 
 | |
| Send_Event(@WINDOW,'WRITE')
 | |
| 
 | |
| thisFormWindowUp = Get_Property('WO_MAT_WFR','VISIBLE')	;* Returns 0 = hidden, 1 = visible, 2 = minimized, 3 = maximized 
 | |
| 
 | |
| IF thisFormWindowUp = ''	THEN
 | |
| 	Start_Window('WO_MAT_WFR',@WINDOW,'')
 | |
| END ELSE
 | |
| 
 | |
| 	IF thisFormWindowUp = 2		THEN Set_Property('WO_MAT_WFR','VISIBLE',9)	;* Restore the window if minimized
 | |
| 
 | |
| 	IF Get_Property('WO_MAT_WFR','SAVEWARN') THEN
 | |
| 		Set_Property('WO_MAT_WFR','@SKIP_CARD_RETURN',1)	;* This stops the Return behavior
 | |
| 		Send_Event('WO_MAT_WFR','CLEAR')					;* Clear anything existing (prompts for save first)
 | |
| 	END
 | |
| END
 | |
| 	
 | |
| * Load Key Controls with Key Parts
 | |
| 
 | |
| Ctrls  = 'WO_MAT_WFR':@RM				; Props  = '@RETURN_KEY':@RM		; Vals  = RDSNo:@RM
 | |
| Ctrls := 'WO_MAT_WFR':@RM				; Props := '@RETURN_PAGE':@RM		; Vals := '':@RM
 | |
| Ctrls := 'WO_MAT_WFR':@RM				; Props := '@RETURN_CONTROL':@RM	; Vals := '':@RM
 | |
| Ctrls := 'WO_MAT_WFR':@RM				; Props := '@RETURN_POS':@RM		; Vals := '':@RM
 | |
| Ctrls := 'WO_MAT_WFR':@RM				; Props := '@RDS_NO':@RM			; Vals := RDSNo:@RM
 | |
| Ctrls := 'WO_MAT_WFR':@RM				; Props := '@REACTOR':@RM			; Vals := Reactor:@RM
 | |
| Ctrls := 'WO_MAT_WFR':@RM				; Props := '@WO_STEP_NO':@RM		; Vals := WOStep:@RM
 | |
| 
 | |
| Ctrls := 'WO_MAT_WFR.WO_NO':@RM			; Props := 'DEFPROP':@RM			; Vals := WONo:@RM
 | |
| Ctrls := 'WO_MAT_WFR.CASS_NO'			; Props := 'DEFPROP'				; Vals := CassNo
 | |
| 	
 | |
| Set_Property(Ctrls,Props,Vals)
 | |
| 
 | |
| Send_Event('WO_MAT_WFR.CASS_NO','LOSTFOCUS')
 | |
| 	
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| SendMsg:
 | |
| * * * * * * *
 | |
| 
 | |
| CurrWindow	= @WINDOW
 | |
| CurrKey		= Get_Property(CurrWindow,'ID')
 | |
| 
 | |
| IF CurrKey = '' THEN 
 | |
|  	MsgInfo = ''
 | |
|     MsgInfo<MTEXT$> = 'You must have a record  present...' 
 | |
|     MsgInfo<MICON$> = 'H'
 | |
|     Msg( '', MsgInfo )
 | |
| 	RETURN
 | |
| END
 | |
| 
 | |
| IF RowExists('REACT_RUN',CurrKey) THEN
 | |
| 
 | |
| 	NoteID = NextKey('NOTES')
 | |
| 	obj_AppWindow('ViewRelated','NOTE_MESSAGE':@RM:NoteID:@RM:@WINDOW:@FM:CurrKey)
 | |
|    
 | |
| END ELSE
 | |
| 
 | |
|     MsgInfo = ''
 | |
|     MsgInfo<mtext$> = 'You must save this run data sheet first...' 
 | |
|     MsgInfo<micon$> = 'H'
 | |
|     Msg( '', MsgInfo )
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| * * * * * * * 
 | |
| CtrlPlanClick:
 | |
| * * * * * * *
 | |
| 
 | |
| PSNo = Get_Property(@WINDOW:'.PS_NO','DEFPROP')
 | |
| 
 | |
| IF PSNo NE '' THEN
 | |
| 	Print_Control_Plan(PSNo)
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| ViewPSN:
 | |
| * * * * * * *
 | |
| 
 | |
| PSNo = Get_Property(@WINDOW:'.PS_NO','DEFPROP')
 | |
| 
 | |
| IF PSNo NE '' THEN
 | |
| 	Start_Window('PROD_SPEC',@WINDOW, PSNo:'*CENTER', '', '' )	;* Old style call to old style window
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| ViewWO:
 | |
| * * * * * * *
 | |
| 
 | |
| WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
 | |
| 
 | |
| IF WONo NE '' THEN
 | |
|     NewForm = Xlate('APP_INFO', 'NEW_WO_FORM', '', 'X')
 | |
|     If NewForm then
 | |
|         Start_Window('NDW_WO_LOG', @Window, WONo)
 | |
|     end else
 | |
|         Start_Window('WO_LOG2',@WINDOW, WONo:'*CENTER', '', '' )	;* Added (copied from ViewPSN) -dkk 10/23/14
 | |
|     end
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| PrintInstruction:
 | |
| * * * * * * *
 | |
| 
 | |
| RDSNo = Get_Property(@WINDOW:'.RDS_NO','TEXT')
 | |
| 
 | |
| IF RDSNo NE '' THEN
 | |
| 	Print_RDS_Instruction(RDSNo)
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| SignSuppl:
 | |
| * * * * * * *
 | |
| 
 | |
| IF MemberOf( @USER4, 'DATA_ENTRY' ) OR MemberOf( @USER4, 'SUPERVISOR' ) THEN
 | |
|     Valid = Dialog_Box('NDW_VERIFY_USER', @Window, @User4)
 | |
|     Valid = Valid<1>
 | |
| 	IF Valid THEN
 | |
| 		Set_Property(@WINDOW:'.SUPP_SIG','INVALUE',@USER4)
 | |
| 		*Set_Property(@WINDOW:'.SUPP_SIG','TEXT',XLATE('LSL_USERS',@USER4,'FIRST_LAST','X' )
 | |
| 		Set_Property(@WINDOW:'.SUPP_SIG_DTM','INVALUE',ICONV(OCONV(Date(), 'D4/'):' ':OCONV(Time(), 'MTHS'),'DT'))
 | |
| 
 | |
|     END
 | |
| END ELSE
 | |
|    MsgInfo = ''
 | |
|    MsgInfo<micon$> = '!'
 | |
|    MsgInfo<mtext$> = 'Only cleanroom personnel are permitted to sign the work order verification.'
 | |
|    Msg( '', MsgInfo )
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| SignFinalQA:
 | |
| * * * * * * *
 | |
| 
 | |
| Ctrls  = @WINDOW:'RDS_NO':@RM		; Props  = 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.WO_NO':@RM		; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.CASS_NO':@RM		; Props := 'DEFPROP':@RM
 | |
| Ctrls := @WINDOW:'.STEP_NO'			; Props := 'DEFPROP'
 | |
| 
 | |
| Vals = Get_Property(Ctrls,Props)
 | |
| 
 | |
| RDSNo 	= Vals[1,@RM]
 | |
| WONo	= Vals[COL2()+1,@RM]
 | |
| CassNo	= Vals[COL2()+1,@RM]
 | |
| StepNo	= Vals[COL2()+1,@RM]
 | |
| 
 | |
| RETURN
 | |
| /*
 | |
| * This section adjusts the SchedQty on the Next RDS to run on this box
 | |
| 
 | |
| WOMatRec = XLATE('WO_MAT',WONo:'*':CassNo,'','X')
 | |
| WOMRDSKeys = WOMatRec<WO_MAT_RDS_NO$>
 | |
| 
 | |
| LOCATE RDSNo IN WOMRDSKeys USING @VM SETTING Pos THEN
 | |
| 	IF WOMRDSKeys<1,Pos+1> NE '' THEN
 | |
| 		NextRDSNo = WOMRDSKeys<1,Pos+1>
 | |
| 		CurrWfrQty = obj_WO_Mat('CurrWaferCnt',WONo:'*':CassNo:@RM:WOMatRec)
 | |
| 		obj_React_Run('SetSchedWfrCnt',
 | |
| 		
 | |
| 	END	;* End of check for next WO_Step run
 | |
| END
 | |
| */
 | |
| 
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| SigProfileClick:
 | |
| * * * * * * *
 | |
| 
 | |
| CtrlEntID = @WINDOW:'.SIG_PROFILE'
 | |
| 
 | |
| 
 | |
| SigList = Get_Property(CtrlEntID,'LIST')
 | |
| 
 | |
| CurrPos = Get_Property(CtrlEntID,'SELPOS')
 | |
| 
 | |
| CurrRow = CurrPos<2>
 | |
| 
 | |
| CurrSigProf = ICONV(SigList<CurrRow,1>,'[SIG_PROFILE_CONV]')
 | |
| 
 | |
| 
 | |
| RDSNo		= Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
 | |
| CurrStage	= CurrSigProf
 | |
| 
 | |
| IF RDSNo NE '' AND CurrStage NE '' THEN
 | |
| 
 | |
| 	RunStageKey = RDSNo:'*':CurrStage
 | |
| 	
 | |
| 	
 | |
| 	Send_Event('REACT_RUN','WRITE')
 | |
| 
 | |
| 	DetWindow	= 'RUN_STAGE'
 | |
| 	DetKeys		= RunStageKey
 | |
| 	DefaultRec	= ''
 | |
| 	RetKey		= RDSNo
 | |
| 	RetWin		= @WINDOW
 | |
| 	RetPage		= 1
 | |
| 	RetCtrl		= @WINDOW:'.RDS_NO'
 | |
| 	RetPos		= CurrPos
 | |
| 
 | |
| 	obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
 | |
| 	
 | |
| 	IF Get_Status(errCode) THEN
 | |
| 		ErrMsg(errCode)
 | |
| 	END	
 | |
| 	
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| CharWfrDC:
 | |
| * * * * * * *
 | |
| 
 | |
| CtrlEntID = @WINDOW:'.CHAR_WFR_ID'
 | |
| 
 | |
| RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
 | |
| 
 | |
| IF RDSNo = '' THEN RETURN
 | |
| 
 | |
| CurrPos = Get_Property(CtrlEntID,'SELPOS')
 | |
| CurrCol = CurrPos<1>
 | |
| CurrRow = CurrPos<2>
 | |
| 
 | |
| WfrList			= Get_Property(CtrlEntID,'LIST')
 | |
| CharWfrID		= WfrList<CurrRow,COL$CHAR_WFR_ID>
 | |
| 	
 | |
| BEGIN CASE
 | |
| 	CASE CurrCol = COL$CHAR_WFR_ID
 | |
| 					
 | |
| 		WfrSigProfile = obj_React_Run('GetWfrSigKeys',RDSNo:@RM:CharWfrID)
 | |
| 
 | |
| 		TypeOver = ''
 | |
| 		TypeOver<PDISPLAY$> = WfrSigProfile
 | |
| 
 | |
| 		RunStageWfrKey = Popup(@WINDOW,TypeOver,'CHAR_WFR_STAGES')
 | |
| 		
 | |
| 		IF Get_Status(errCode) THEN ErrMsg(errCode)
 | |
| 		
 | |
| 		IF RunStageWfrKey = CHAR(27) OR RunStageWfrKey = '' THEN RETURN
 | |
| 		
 | |
| 		Send_Event('REACT_RUN','WRITE')
 | |
| 
 | |
| 		DetWindow	= 'RUN_STAGE_WFR'
 | |
| 		DetKeys		= RunStageWfrKey
 | |
| 		DefaultRec	= ''
 | |
| 		RetKey		= RDSNo
 | |
| 		RetWin		= @WINDOW
 | |
| 		RetPage		= 1
 | |
| 		RetCtrl		= @WINDOW:'.RDS_NO'
 | |
| 		RetPos		= CurrPos
 | |
| 
 | |
| 		obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
 | |
| 
 | |
| 		IF Get_Status(errCode) THEN
 | |
| 			ErrMsg(errCode)
 | |
| 		END	
 | |
| 		
 | |
| 	
 | |
| 	CASE CurrCol = COL$CURR_STAGE
 | |
| 	
 | |
| 		CurrStage = WfrList<CurrRow,CurrCol>
 | |
| 		CurrStatus = WfrList<CurrRow,COL$CHAR_WFR_STATUS>
 | |
| 		
 | |
| 		IF CurrStatus = 'PART' THEN
 | |
| 			Msg(@WINDOW,'','PART_CHAR')
 | |
| 			RETURN
 | |
| 		END
 | |
| 		
 | |
| 		IF CurrStage = '-' THEN
 | |
| 			RunStageWfrKey = ''
 | |
| 		END ELSE
 | |
| 		
 | |
| 			WfrKID = CharWfrID
 | |
| 			CONVERT '*' TO '.' IN WfrKID
 | |
| 			
 | |
| 			RunStageWfrKey = RDSNo:'*':CurrStage:'*':WfrKID
 | |
| 					
 | |
| 			Send_Event('REACT_RUN','WRITE')
 | |
| 
 | |
| 			DetWindow	= 'RUN_STAGE_WFR'
 | |
| 			DetKeys		= RunStageWfrKey
 | |
| 			DefaultRec	= ''
 | |
| 			RetKey		= RDSNo
 | |
| 			RetWin		= @WINDOW
 | |
| 			RetPage		= 1
 | |
| 			RetCtrl		= @WINDOW:'.RDS_NO'
 | |
| 			RetPos		= CurrPos
 | |
| 
 | |
| 			obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
 | |
| 
 | |
| 			IF Get_Status(errCode) THEN
 | |
| 				ErrMsg(errCode)
 | |
| 			END	
 | |
| 
 | |
| 		END
 | |
| 		
 | |
| 	CASE CurrCol = COL$CHAR_TW_NO
 | |
| 	
 | |
| 		TWNo = WfrList<CurrRow,CurrCol>
 | |
| 		
 | |
| 		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
 | |
| 	
 | |
| 	
 | |
| 	
 | |
| 
 | |
| 	CASE 1
 | |
| 	
 | |
| 		NULL
 | |
| 		
 | |
| END CASE
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| CharWfrOptions:
 | |
| * * * * * * *
 | |
| 
 | |
| CtrlEntID = @WINDOW:'.CHAR_WFR_ID'
 | |
| 
 | |
| CurrPos = Get_Property(CtrlEntID,'SELPOS')
 | |
| CurrCol = CurrPos<1>
 | |
| CurrRow = CurrPos<2>
 | |
| 
 | |
| WfrList			= Get_Property(CtrlEntID,'LIST')
 | |
| CharWfrID		= WfrList<CurrRow,COL$CHAR_WFR_ID>
 | |
| 
 | |
| IF CharWfrID NE '' THEN
 | |
| 	TraceData = obj_WO_Wfr('TraceData',CharWfrID:@RM:'')
 | |
| END
 | |
| 
 | |
| TypeOver = ''
 | |
| TypeOver<PDISPLAY$> = TraceData
 | |
| 
 | |
| void = Popup(@WINDOW,TypeOver,'WAFER_TRACE')
 | |
| 
 | |
| 
 | |
| IF Get_Status(errCode) THEN
 | |
| 	ErrMsg(errCode)
 | |
| 	RETURN
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| CarrWfrDC:
 | |
| * * * * * * *
 | |
| 
 | |
| RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
 | |
| 
 | |
| IF RDSNo = '' THEN RETURN
 | |
| 
 | |
| CtrlEntID = @WINDOW:'.CARR_WFR_ID'
 | |
| 
 | |
| 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','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
 | |
| 
 | |
| 
 | |
| * * * * * * * 
 | |
| SplitClick:
 | |
| * * * * * * * 
 | |
| 
 | |
| RDSNo		= Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
 | |
| CarrWfrIDs	= Get_Property(@WINDOW:'.CARR_WFR_ID','DEFPROP')<1>
 | |
| Stage		= ''
 | |
| ToolID		= ''
 | |
| 	
 | |
| TestCarrWfrIDs = CarrWfrIDs
 | |
| 
 | |
| CONVERT @VM TO '' IN TestCarrWfrIDS
 | |
| 
 | |
| IF TestCarrWfrIDs = '' THEN
 | |
| 	ErrMsg('Wafers have not been unloaded from the reactor.')
 | |
| 	RETURN
 | |
| END
 | |
| 
 | |
| Send_Event(@WINDOW,'WRITE')
 | |
| 
 | |
| * The process of splitting the wafer writes the REACT_RUN record after pulling stuff off the window *
 | |
| 
 | |
| WfrID = Dialog_Box('DIALOG_SPLIT_WAFER', 'REACT_RUN', RDSNo:@FM:Stage:@FM:ToolID:@FM:CarrWfrIDs)
 | |
| 
 | |
| 
 | |
| IF Get_Status(errCode) THEN
 | |
| 	ErrMsg(errCode)
 | |
| 	RETURN
 | |
| END
 | |
| 
 | |
| obj_Appwindow('LoadFormKeys','REACT_RUN':@RM:RDSNo)		;* Reloads the updated REACT_RUN record
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| DispoClick:
 | |
| * * * * * * * 
 | |
| 
 | |
|     RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP')
 | |
| 
 | |
|     Send_Event(@WINDOW,'WRITE')
 | |
| 
 | |
|     DetWindow	= 'REACT_RUN_DISP'
 | |
|     DetKeys		= RDSNo
 | |
|     DefaultRec	= ''
 | |
|     RetKey		= RDSNo
 | |
|     RetPage		= 1
 | |
|     RetCtrl		= ''
 | |
|     RetPos		= ''
 | |
| 
 | |
|     obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos)
 | |
| 
 | |
|     IF Get_Status(errCode) THEN
 | |
|         ErrMsg(errCode)
 | |
|         RETURN
 | |
|     END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| SUSC_LOAD.OPTIONS:
 | |
| 
 | |
|     CtrlEntID = @WINDOW:'.SUSC_LOAD'
 | |
| 
 | |
|     SelPos  = Get_Property(CtrlEntID, 'SELPOS')
 | |
|     Array   = Get_Property(CtrlEntID, 'ARRAY')
 | |
|     ColPos  = SelPos<1>
 | |
|     RowPos  = SelPos<2>
 | |
|     WOWfrID = Array<COL$SUSC_LOAD_WFR_ID, RowPos>
 | |
|     rv      = Dialog_Box('DIALOG_WO_WFR_SCRIBE', @Window, WOWfrID)
 | |
|     Send_Event(CtrlEntID, 'CALCULATE', COL$SUSC_LOAD_WFR_SCRIBE)
 | |
| 
 | |
| return
 | |
| 
 |