Fixed min row limit issue causing cells to be colored incorrectly. Fixed sheet rho units in rds test modules
		
			
				
	
	
		
			511 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			511 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| COMPILE Subroutine MOVE_RDS_DICT(Dummy)
 | |
| * ROWDEF(CHARSTR)
 | |
| 
 | |
| DECLARE SUBROUTINE obj_Schedule,Send_Dyn,Send_Info, Send_Dyn, obj_WO_Step, Set_Status, RList, obj_RDS_Layer
 | |
| DECLARE FUNCTION Get_Status, Set_Printer, obj_RDS, NextKey, obj_Prod_Spec, obj_RDS_Test
 | |
| 
 | |
| $INSERT DICT_EQUATES
 | |
| $INSERT RDS_EQU
 | |
| $INSERT RDS_LAYER_EQUATES
 | |
| $INSERT RDS_TEST_EQUATES
 | |
| $INSERT RDS_LAYER_INFO_EQU
 | |
| $INSERT PRS_LAYER_EQU
 | |
| $INSERT RECIPE_EQU
 | |
| $INSERT RECIPE_LAYER_INFO_EQU
 | |
| 
 | |
| 
 | |
| EQU SHEETRHO_SPEC_UNITS$	TO \EA2FDC\
 | |
| EQU RES_SPEC_UNITS$			TO \EA2D636D\
 | |
| 
 | |
| 
 | |
| OPEN 'RDS' TO RDSTable ELSE
 | |
| 	DEBUG
 | |
| 	GOTO Bail
 | |
| END
 | |
| 
 | |
| OPEN 'RDS_LAYER' TO RDSLayerTable ELSE
 | |
| 	DEBUG
 | |
| 	GOTO Bail
 | |
| END
 | |
| 
 | |
| OPEN 'RDS_TEST' TO RDSTestTable ELSE
 | |
| 	DEBUG
 | |
| 	GOTO Bail
 | |
| END
 | |
| 
 | |
| 
 | |
| OPEN 'DICT.RDS' TO FileIn ELSE
 | |
| 	DEBUG
 | |
| 	GOTO Bail
 | |
| END
 | |
| 
 | |
| OPEN 'DICT.RDS_LAYER' TO FileOut ELSE
 | |
| 	DEBUG
 | |
| 	GOTO Bail
 | |
| END
 | |
| 
 | |
| OPEN 'DICT.RDS_TEST' TO DictRDSTest ELSE
 | |
| 	DEBUG
 | |
| 	GOTO Bail
 | |
| END
 | |
| 
 | |
| 
 | |
| 
 | |
| IF Get_Status(errCode) THEN DEBUG
 | |
| 
 | |
| * Now do the fields for the RDS_TEST (metrology table)
 | |
| 
 | |
| SelectSent = 'SELECT RDS WITH WO < 130261'
 | |
| 
 | |
| EQU TARGET_ACTIVELIST$ to 5
 | |
| RList(SelectSent,TARGET_ACTIVELIST$, "", "", "")
 | |
| 
 | |
| 
 | |
| 
 | |
| RecCnt = 0
 | |
| Done = 0
 | |
| 
 | |
| LOOP
 | |
| 	READNEXT RDSNo ELSE Done = 1
 | |
| UNTIL Done
 | |
| 
 | |
| 	READ RDSRec FROM RDSTable,RDSNo THEN
 | |
| 		RecCnt += 1
 | |
| 		Send_Info(RecCnt)
 | |
| 		RecLen = LEN(RDSRec)
 | |
| 		IF RecLen > 261 THEN
 | |
| 			PSNId = RDSRec<RDS_PROD_SPEC_ID$>
 | |
| 			RDSLayRec = ''
 | |
| 			LS_ID = 'L1'			;* Always have at least this layer
 | |
| 			
 | |
| 			obj_RDS_Layer('Create',RDSNo:@RM:LS_ID:@RM:PSNId)  	;* Creates record and load recipe limits in it
 | |
| 			
 | |
| 			READ RDSLayerRec FROM RDSLayerTable,RDSNO:'*':LS_ID THEN
 | |
| 				RDSLayerRec<RDS_LAYER_RECIPE_NO$>			= RDSRec<RDS_RECIPE_NO$>
 | |
| 				RDSLayerRec<RDS_LAYER_EPI_TIME$>			= RDSRec<RDS_EPI_TIME$>
 | |
| 				RDSLayerRec<RDS_LAYER_DILUENT_ADJ_PARAM$>	= RDSRec<RDS_DILUENT_ADJ_PARAM$>
 | |
| 				RDSLayerRec<RDS_LAYER_DOPANT_FLOW$>			= RDSRec<RDS_DOPANT_FLOW$>
 | |
| 				RDSLayerRec<RDS_LAYER_HCL_FLOW$>			= RDSRec<RDS_HCL_FLOW$>
 | |
| 				RDSLayerRec<RDS_LAYER_BAKE_TIME$>			= RDSRec<RDS_BAKE_TIME$>
 | |
| 				RDSLayerRec<RDS_LAYER_EPI_H2_FLOW$>			= RDSRec<RDS_EPI_H2_FLOW$>
 | |
| 				RDSLayerRec<RDS_LAYER_TCS_FLOW$>			= RDSRec<RDS_TCS_FLOW$>
 | |
| 				RDSLayerRec<RDS_LAYER_DCS_FLOW$>			= RDSRec<RDS_DCS_FLOW$>
 | |
| 				RDSLayerRec<RDS_LAYER_AUX1$>				= RDSRec<RDS_AUX1$>
 | |
| 				RDSLayerRec<RDS_LAYER_AUX2$>				= RDSRec<RDS_AUX2$>
 | |
| 				RDSLayerRec<RDS_LAYER_F_OFFSET$>			= RDSRec<RDS_F_OFFSET$>
 | |
| 				RDSLayerRec<RDS_LAYER_S_OFFSET$>			= RDSRec<RDS_S_OFFSET$>
 | |
| 				RDSLayerRec<RDS_LAYER_R_OFFSET$>			= RDSRec<RDS_R_OFFSET$>
 | |
| 				RDSLayerRec<RDS_LAYER_ETCH1$>				= RDSRec<RDS_ETCH1$>
 | |
| 				RDSLayerRec<RDS_LAYER_ETCH2$>				= RDSRec<RDS_ETCH2$>
 | |
| 				RDSLayerRec<RDS_LAYER_ETCH3$>				= RDSRec<RDS_ETCH3$>
 | |
| 				RDSLayerRec<RDS_LAYER_UL_TEMP$>			    = RDSRec<RDS_UL_TEMP$>
 | |
| 
 | |
| 				WRITE RDSLayerRec ON RDSLayerTable,RDSNO:'*':LS_ID ELSE NULL
 | |
| 			END
 | |
| 			
 | |
| 			WaferSize		= XLATE( 'PROD_SPEC', PSNId, 'SUB_WAFER_SIZE', 'X' )
 | |
| 			SubOrientation	= XLATE('PROD_SPEC',PSNId,'SUB_ORIENTATION','X')
 | |
| 			ResUnits		= RDSRec<RDS_RES_UNITS$>
 | |
| 			
 | |
| 			RDSTestRec = ''
 | |
| 			RDSTestRec<RDS_TEST_RDS_NO$> = RDSNo
 | |
| 			RDSTestRec<RDS_TEST_LS_ID$> = 'L1'
 | |
| 			RDSTestRec<RDS_TEST_WAFER_SIZE$>			= WaferSize
 | |
| 			RDSTestRec<RDS_TEST_SUB_ORIENTATION$>		= SubOrientation
 | |
| 			
 | |
| 			RDSTestRec<RDS_TEST_SPEC_THICK_MIN$>		= RDSRec<RDS_THICK_MIN$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_THICK_TARGET$>		= RDSRec<RDS_THICK_TARGET$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_THICK_MAX$>		= RDSRec<RDS_THICK_MAX$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_THICK_UNITS$>		= RDSRec<RDS_THICK_UNITS$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_RES_MIN$>			= RDSRec<RDS_RES_MIN$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_RES_TARGET$>		= RDSRec<RDS_RES_TARGET$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_RES_MAX$>			= RDSRec<RDS_RES_MAX$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_RES_UNITS$>		= RDSRec<RDS_RES_UNITS$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_CON_MIN$>			= RDSRec<RDS_CON_MIN$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_CON_TARGET$>		= RDSRec<RDS_CON_TARGET$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_CON_MAX$>			= RDSRec<RDS_CON_MAX$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_CON_UNITS$>		= RDSRec<RDS_CON_UNITS$>
 | |
| 			
 | |
| 			RDSTestRec<RDS_TEST_READ_SHEET_RHO$>		= ICONV(OCONV(RDSRec<RDS_SHEETRHO_READ$>,'MD2'),'MD3')
 | |
| 			
 | |
| 			RDSTestRec<RDS_TEST_READ_THICK$>			= RDSRec<RDS_THICK_READ$>
 | |
| 			
 | |
| 			RDSTestRec<RDS_TEST_THICK_AVG$>				= RDSRec<RDS_TTHICK_AVG$>
 | |
| 			RDSTestRec<RDS_TEST_THICK_STDV$>			= RDSRec<RDS_TTHICK_STDEV$>
 | |
| 			RDSTestRec<RDS_TEST_THICK_UNIF$>			= RDSRec<RDS_TTHICK_UNIF$>
 | |
| 			RDSTestRec<RDS_TEST_THICK_MIN$>				= RDSRec<RDS_TTHICK_MIN$>
 | |
| 			RDSTestRec<RDS_TEST_THICK_MAX$>				= RDSRec<RDS_TTHICK_MAX$>
 | |
| 			
 | |
| 			IF ResUnits = SHEETRHO_SPEC_UNITS$ THEN
 | |
| 			
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_AVG$>			= RDSRec<RDS_TRES_AVG$>
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_STDV$>			= RDSRec<RDS_TRES_STDEV$>
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_UNIF$>			= RDSRec<RDS_TRES_UNIF$>
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_MIN$>			= RDSRec<RDS_TRES_MIN$>
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_MAX$>			= RDSRec<RDS_TRES_MAX$>
 | |
| 				
 | |
| 				RDSTestRec<RDS_TEST_RES_AVG$>				= ''
 | |
| 				RDSTestRec<RDS_TEST_RES_STDV$>				= ''
 | |
| 				RDSTestRec<RDS_TEST_RES_UNIF$>				= ''
 | |
| 				RDSTestRec<RDS_TEST_RES_MIN$>				= ''
 | |
| 				RDSTestRec<RDS_TEST_RES_MAX$>				= ''
 | |
| 			
 | |
| 			END ELSE
 | |
| 			
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_AVG$>			= ''
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_STDV$>			= ''
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_UNIF$>			= ''
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_MIN$>			= ''
 | |
| 				RDSTestRec<RDS_TEST_SHEETRHO_MAX$>			= ''
 | |
| 				
 | |
| 				RDSTestRec<RDS_TEST_RES_AVG$>				= RDSRec<RDS_TRES_AVG$>
 | |
| 				RDSTestRec<RDS_TEST_RES_STDV$>				= RDSRec<RDS_TRES_STDEV$>
 | |
| 				RDSTestRec<RDS_TEST_RES_UNIF$>				= RDSRec<RDS_TRES_UNIF$>
 | |
| 				RDSTestRec<RDS_TEST_RES_MIN$>				= RDSRec<RDS_TRES_MIN$>
 | |
| 				RDSTestRec<RDS_TEST_RES_MAX$>				= RDSRec<RDS_TRES_MAX$>
 | |
| 				
 | |
| 			END
 | |
| 			
 | |
| 			RDSTestRec<RDS_TEST_THICK_OVERGROW_AVG$>	= RDSRec<RDS_THICK_OVR_GROWTH_AVG$>
 | |
| 			
 | |
| 			RDSTestRec<RDS_TEST_SRP_PROFILE_PATH$>		= RDSRec<RDS_SRP_PROFILE_PATH$>
 | |
| 						
 | |
| 			* Now load the specification stuff that was not copied in the org system
 | |
| 			
 | |
| 			SpecLayerData	= obj_Prod_Spec('GetLayerProp',PSNId:@RM:LS_ID:@RM:1)	;* Gets 1st layer WO/Conversiion
 | |
| 			SpecLayerID		= SpecLayerData[1,@FM]
 | |
| 			SpecLayerData	= FIELD(SpecLayerData,@FM,2,999)
 | |
| 					
 | |
| 			RDSTestRec<RDS_TEST_SPEC_DOPANT$>		= SpecLayerData<PRS_LAYER_DOPANT$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_RECIPE$>		= SpecLayerData<PRS_LAYER_RECIPE$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_RECIPE_NAME$>	= SpecLayerData<PRS_LAYER_RECIPE_NAME$>
 | |
| 			
 | |
| 			
 | |
| 			FOR A = 11 TO 19
 | |
| 				RDSTestRec<A> = SpecLayerData<PRS_LAYER_THICK_MEASUREMENT$,A-10>
 | |
| 			NEXT A
 | |
| 				
 | |
| 			FOR A = 24 TO 32
 | |
| 				RDSTestRec<A> = SpecLayerData<PRS_LAYER_RES_MEASUREMENT$,A-23>
 | |
| 			NEXT A
 | |
| 			
 | |
| 			FOR A = 37 TO 45
 | |
| 				RDSTestRec<A> = SpecLayerData<PRS_LAYER_CONC_MEASUREMENT$,A-36>
 | |
| 			NEXT A
 | |
| 			
 | |
| 			FOR A = 50 to 58
 | |
| 				RDSTestRec<A> = SpecLayerData<PRS_LAYER_STRESS_MEASUREMENT$,A-49>
 | |
| 			NEXT A
 | |
| 
 | |
| 			RDSTestRec<RDS_TEST_SPEC_TRANS$>				= SpecLayerData<PRS_LAYER_TRANS_SPEC$>
 | |
| 			RDSTestRec<RDS_TEST_SPEC_TRANS_MEASUREMENT$>	= SpecLayerData<PRS_LAYER_TRANS_MEASUREMENT$>
 | |
| 			
 | |
| 			
 | |
| 			GOSUB LoadTestWafers
 | |
| 			
 | |
| 			RDSTestRec = obj_RDS_Test('CalcMissing',RDSTestRec)
 | |
| 			
 | |
| 			NextTestKey = NextKey('RDS_TEST')
 | |
| 			
 | |
| 			WRITE RDSTestRec ON RDSTestTable,NextTestKey ELSE NULL
 | |
| 			
 | |
| 			
 | |
| 			
 | |
| 			* Check for additional layers shoved down the rabbit hole in field <33>
 | |
| 			
 | |
| 			LayerMess = RDSRec<RDS_LAYER_INFO$>
 | |
| 			
 | |
| 			CONVERT CHAR(248) TO @FM IN LayerMess
 | |
| 			
 | |
| 			LayerCnt = COUNT(LayerMess,@FM) + (LayerMess NE '')
 | |
| 			
 | |
| 			
 | |
| 			
 | |
| 			FOR N= 1 TO LayerCnt
 | |
| 				LayerNo = N + 1
 | |
| 				IF N = LayerCnt THEN
 | |
| 					LS_ID = N
 | |
| 				END ELSE
 | |
| 					LS_ID = 'L':LayerNo
 | |
| 				END
 | |
| 				
 | |
| 				RecipeNo = LayerMess<N,RLRecipeNo$>
 | |
| 				
 | |
| 				IF INDEX(LS_ID,'L',1) THEN
 | |
| 					obj_RDS_Layer('Create',RDSNo:@RM:LS_ID:@RM:PSNId)  	;* Creates record and load recipe limits in it
 | |
| 					READ RDSLayerRec FROM RDSLayerTable,RDSNO:'*':LS_ID ELSE NULL
 | |
| 				END ELSE
 | |
| 					RDSLayerRec = ''
 | |
| 				END
 | |
| 							
 | |
| 				RDSLayerRec<RDS_LAYER_RECIPE_NO$>			= RecipeNo
 | |
| 				
 | |
| 				IF INDEX(LS_ID,'L',1) THEN
 | |
| 					RDSLayerRec<RDS_LAYER_EPI_TIME$>			= LayerMess<N,RLEpiTime$>
 | |
| 					RDSLayerRec<RDS_LAYER_DOPANT_FLOW$>			= LayerMess<N,RLDopantFlow$>
 | |
| 				END
 | |
| 				
 | |
| 				WRITE RDSLayerRec ON RDSLayerTable,RDSNO:'*':LS_ID ELSE NULL
 | |
| 				
 | |
| 				
 | |
| 				PSNLayerData = obj_Prod_Spec('GetLayerProp',PSNId:@RM:LS_ID)
 | |
| 				PSNLayerData = FIELD(PSNLayerData,@FM,2,999)	;* Layer ID is returned in the 1st field position
 | |
| 				 				
 | |
| 				NextTestKey = NextKey('RDS_TEST')
 | |
| 				
 | |
| 				RDSTestRec = ''
 | |
| 				RDSTestRec<RDS_TEST_RDS_NO$>					= RDSNo
 | |
| 				RDSTestRec<RDS_TEST_LS_ID$>						= LS_ID
 | |
| 				RDSTestRec<RDS_TEST_SPEC_THICK_MIN$>			= LayerMess<N,RLThickMin$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_THICK_TARGET$>			= LayerMess<N,RLThickTarget$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_THICK_MAX$>			= LayerMess<N,RLThickMax$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_THICK_UNITS$>			= LayerMess<N,RLThickUnits$>
 | |
| 				
 | |
| 				RDSTestRec<RDS_TEST_SPEC_RES_MIN$>				= LayerMess<N,RLResMin$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_RES_TARGET$>			= LayerMess<N,RLResTarget$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_RES_MAX$>				= LayerMess<N,RLResMax$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_RES_UNITS$>			= LayerMess<N,RLResUnits$>
 | |
| 				
 | |
| 				RDSTestRec<RDS_TEST_SPEC_CON_MIN$>				= LayerMess<N,RLConMin$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_CON_TARGET$>			= LayerMess<N,RLConTarget$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_CON_MAX$>				= LayerMess<N,RLConMax$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_CON_UNITS$>			= LayerMess<N,RLConUnits$>
 | |
| 				
 | |
| 				RDSTestRec<RDS_TEST_SPEC_STRESS_MIN$>			= PSNLayerData<PRS_LAYER_STRESS_MIN$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_STRESS_MAX$>			= PSNLayerData<PRS_LAYER_STRESS_MAX$>
 | |
| 				
 | |
| 				RDSTestRec<RDS_TEST_SPEC_TRANS$>				= PSNLayerData<PRS_LAYER_TRANS_SPEC$>
 | |
| 				RDSTestRec<RDS_TEST_SPEC_TRANS_MEASUREMENT$>	= PSNLayerData<PRS_LAYER_TRANS_MEASUREMENT$>
 | |
| 				
 | |
| 				RDSTestRec<RDS_TEST_WAFER_SIZE$>				= WaferSize
 | |
| 				RDSTestRec<RDS_TEST_SUB_ORIENTATION$>			= SubOrientation
 | |
| 				
 | |
| 				SheetRHOReads  = LayerMess<N,RLSheetRHORead$>
 | |
| 				ThicknessReads = LayerMess<N,RLThickRead$>
 | |
| 				
 | |
| 				CONVERT @SVM TO @VM IN SheetRHOReads
 | |
| 				CONVERT @SVM TO @VM IN ThicknessReads
 | |
| 				
 | |
| 				A1 = SheetRHOReads
 | |
| 				
 | |
| 				RDSTestRec<RDS_TEST_READ_SHEET_RHO$>			= ICONV(OCONV(SheetRHOReads,'MD2'),'MD3')
 | |
| 				RDSTestRec<RDS_TEST_READ_THICK$>				= ThicknessReads
 | |
| 				
 | |
| 				
 | |
| 				RDSTestRec<RDS_TEST_THICK_AVG$>				= LayerMess<N,RLTThickAvg$>
 | |
| 				RDSTestRec<RDS_TEST_THICK_STDV$>			= LayerMess<N,RLTThickStdev$>
 | |
| 				RDSTestRec<RDS_TEST_THICK_UNIF$>			= LayerMess<N,RLTThickUnif$>
 | |
| 				RDSTestRec<RDS_TEST_THICK_MIN$>				= LayerMess<N,RLTThickMin$>
 | |
| 				RDSTestRec<RDS_TEST_THICK_MAX$>				= LayerMess<N,RLTThickMax$>
 | |
| 				
 | |
| 				
 | |
| 				IF ResUnits = SHEETRHO_SPEC_UNITS$ THEN
 | |
| 				
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_AVG$>			= LayerMess<N,RLTResAvg$>
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_STDV$>			= LayerMess<N,RLTResStdev$>
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_UNIF$>			= LayerMess<N,RLTResUnif$>
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_MIN$>			= LayerMess<N,RLTResMin$>
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_MAX$>			= LayerMess<N,RLTResMax$>
 | |
| 					
 | |
| 					RDSTestRec<RDS_TEST_RES_AVG$>				= ''
 | |
| 					RDSTestRec<RDS_TEST_RES_STDV$>				= ''
 | |
| 					RDSTestRec<RDS_TEST_RES_UNIF$>				= ''
 | |
| 					RDSTestRec<RDS_TEST_RES_MIN$>				= ''
 | |
| 					RDSTestRec<RDS_TEST_RES_MAX$>				= ''
 | |
| 				
 | |
| 				END ELSE
 | |
| 				
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_AVG$>			= ''
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_STDV$>			= ''
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_UNIF$>			= ''
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_MIN$>			= ''
 | |
| 					RDSTestRec<RDS_TEST_SHEETRHO_MAX$>			= ''
 | |
| 					
 | |
| 					RDSTestRec<RDS_TEST_RES_AVG$>				= LayerMess<N,RLTResAvg$>
 | |
| 					RDSTestRec<RDS_TEST_RES_STDV$>				= LayerMess<N,RLTResStdev$>
 | |
| 					RDSTestRec<RDS_TEST_RES_UNIF$>				= LayerMess<N,RLTResUnif$>
 | |
| 					RDSTestRec<RDS_TEST_RES_MIN$>				= LayerMess<N,RLTResMin$>
 | |
| 					RDSTestRec<RDS_TEST_RES_MAX$>				= LayerMess<N,RLTResMax$>
 | |
| 				
 | |
| 				END
 | |
| 										
 | |
| 										
 | |
| 				FOR A = 11 TO 19
 | |
| 					RDSTestRec<A> = PSNLayerData<PRS_LAYER_THICK_MEASUREMENT$,A-10>
 | |
| 				NEXT A
 | |
| 					
 | |
| 				FOR A = 24 TO 32
 | |
| 					RDSTestRec<A> = PSNLayerData<PRS_LAYER_RES_MEASUREMENT$,A-23>
 | |
| 				NEXT A
 | |
| 				
 | |
| 				FOR A = 37 TO 45
 | |
| 					RDSTestRec<A> = PSNLayerData<PRS_LAYER_CONC_MEASUREMENT$,A-36>
 | |
| 				NEXT A
 | |
| 				
 | |
| 				FOR A = 50 to 58
 | |
| 					RDSTestRec<A> = PSNLayerData<PRS_LAYER_STRESS_MEASUREMENT$,A-49>
 | |
| 				NEXT A
 | |
| 				
 | |
| 				
 | |
| 				GOSUB LoadTestWafers
 | |
| 				
 | |
| 				RDSTestRec = obj_RDS_Test('CalcMissing',RDSTestRec)
 | |
| 				
 | |
| 				WRITE RDSTestRec ON RDSTestTable,NextTestKey ELSE NULL
 | |
| 				
 | |
| 			NEXT N
 | |
| 		END	;* End of check for Null RDS records
 | |
| 		
 | |
| 	END
 | |
| REPEAT
 | |
| 
 | |
| 
 | |
| * * * * * * * 
 | |
| LoadTestWafers:
 | |
| * * * * * * *
 | |
| 
 | |
| TWLine = 0
 | |
| 
 | |
| IF RDSRec<RDS_TW_NMINUS_CNT$> NE '' THEN
 | |
| 	TWType = 'N-'
 | |
| 	FOR T = 1 TO COUNT(RDSRec<RDS_TW_NMINUS_CODE$>,@VM) + (RDSRec<RDS_TW_NMINUS_CODE$> NE '')
 | |
| 		
 | |
| 		TWTool		= RDSRec<RDS_TW_NMINUS_TOOL$,T>
 | |
| 		TWCode		= RDSRec<RDS_TW_NMINUS_CODE$,T>
 | |
| 		TWTrans		= RDSRec<RDS_TW_NMINUS_TRANS$,T>
 | |
| 		TWCnt		= RDSRec<RDS_TW_NMINUS_CNT$,T>
 | |
| 		TWCon		= RDSRec<RDS_TW_NMINUS_CON$,T>
 | |
| 		TWRes		= RDSRec<RDS_TW_NMINUS_RES$,T>
 | |
| 		TWRho		= RDSRec<RDS_TW_NMINUS_RHO$,T>
 | |
| 		TWStress	= RDSRec<RDS_TW_NMINUS_STRESS$,T>
 | |
| 		TWThick		= RDSRec<RDS_TW_NMINUS_THICK$,T>
 | |
| 
 | |
| 		GOSUB LoadTWLine
 | |
| 		
 | |
| 	NEXT T
 | |
| END
 | |
| 
 | |
| IF RDSRec<RDS_TW_NPLUS_CNT$> NE '' THEN
 | |
| 	TWType = 'N+'
 | |
| 	FOR T = 1 TO COUNT(RDSRec<RDS_TW_NPLUS_CODE$>,@VM) + (RDSRec<RDS_TW_NPLUS_CODE$> NE '')
 | |
| 		
 | |
| 		TWTool		= RDSRec<RDS_TW_NPLUS_TOOL$,T>
 | |
| 		TWCode		= RDSRec<RDS_TW_NPLUS_CODE$,T>
 | |
| 		TWTrans		= RDSRec<RDS_TW_NPLUS_TRANS$,T>
 | |
| 		TWCnt		= RDSRec<RDS_TW_NPLUS_CNT$,T>
 | |
| 		TWCon		= RDSRec<RDS_TW_NPLUS_CON$,T>
 | |
| 		TWRes		= RDSRec<RDS_TW_NPLUS_RES$,T>
 | |
| 		TWRho		= RDSRec<RDS_TW_NPLUS_RHO$,T>
 | |
| 		TWStress	= RDSRec<RDS_TW_NPLUS_STRESS$,T>
 | |
| 		TWThick		= RDSRec<RDS_TW_NPLUS_THICK$,T>
 | |
| 
 | |
| 		GOSUB LoadTWLine
 | |
| 		
 | |
| 	NEXT T
 | |
| END
 | |
| 
 | |
| IF RDSRec<RDS_TW_PMINUS_CNT$> NE '' THEN
 | |
| 	TWType = 'P-'
 | |
| 	FOR T = 1 TO COUNT(RDSRec<RDS_TW_PMINUS_CODE$>,@VM) + (RDSRec<RDS_TW_PMINUS_CODE$> NE '')
 | |
| 		
 | |
| 		TWTool		= RDSRec<RDS_TW_PMINUS_TOOL$,T>
 | |
| 		TWCode		= RDSRec<RDS_TW_PMINUS_CODE$,T>
 | |
| 		TWTrans		= RDSRec<RDS_TW_PMINUS_TRANS$,T>
 | |
| 		TWCnt		= RDSRec<RDS_TW_PMINUS_CNT$,T>
 | |
| 		TWCon		= RDSRec<RDS_TW_PMINUS_CON$,T>
 | |
| 		TWRes		= RDSRec<RDS_TW_PMINUS_RES$,T>
 | |
| 		TWRho		= RDSRec<RDS_TW_PMINUS_RHO$,T>
 | |
| 		TWStress	= RDSRec<RDS_TW_PMINUS_STRESS$,T>
 | |
| 		TWThick		= RDSRec<RDS_TW_PMINUS_THICK$,T>
 | |
| 
 | |
| 		GOSUB LoadTWLine
 | |
| 		
 | |
| 	NEXT T
 | |
| END
 | |
| 
 | |
| IF RDSRec<RDS_TW_PPLUS_CNT$> NE '' THEN
 | |
| 	TWType = 'P+'
 | |
| 	FOR T = 1 TO COUNT(RDSRec<RDS_TW_PPLUS_CODE$>,@VM) + (RDSRec<RDS_TW_PPLUS_CODE$> NE '')
 | |
| 		
 | |
| 		TWTool		= RDSRec<RDS_TW_PPLUS_TOOL$,T>
 | |
| 		TWCode		= RDSRec<RDS_TW_PPLUS_CODE$,T>
 | |
| 		TWTrans		= RDSRec<RDS_TW_PPLUS_TRANS$,T>
 | |
| 		TWCnt		= RDSRec<RDS_TW_PPLUS_CNT$,T>
 | |
| 		TWCon		= RDSRec<RDS_TW_PPLUS_CON$,T>
 | |
| 		TWRes		= RDSRec<RDS_TW_PPLUS_RES$,T>
 | |
| 		TWRho		= RDSRec<RDS_TW_PPLUS_RHO$,T>
 | |
| 		TWStress	= RDSRec<RDS_TW_PPLUS_STRESS$,T>
 | |
| 		TWThick		= RDSRec<RDS_TW_PPLUS_THICK$,T>
 | |
| 
 | |
| 		GOSUB LoadTWLine
 | |
| 		
 | |
| 	NEXT T
 | |
| END
 | |
| 
 | |
| IF RDSRec<RDS_TW_PROD_CNT$> NE '' THEN
 | |
| 	TWType = 'Prod'
 | |
| 	FOR T = 1 TO COUNT(RDSRec<RDS_TW_PROD_CODE$>,@VM) + (RDSRec<RDS_TW_PROD_CODE$> NE '')
 | |
| 		
 | |
| 		TWTool		= RDSRec<RDS_TW_PROD_TOOL$,T>
 | |
| 		TWCode		= RDSRec<RDS_TW_PROD_CODE$,T>
 | |
| 		TWTrans		= RDSRec<RDS_TW_PROD_TRANS$,T>
 | |
| 		TWCnt		= RDSRec<RDS_TW_PROD_CNT$,T>
 | |
| 		TWCon		= RDSRec<RDS_TW_PROD_CON$,T>
 | |
| 		TWRes		= RDSRec<RDS_TW_PROD_RES$,T>
 | |
| 		TWRho		= RDSRec<RDS_TW_PROD_RHO$,T>
 | |
| 		TWStress	= RDSRec<RDS_TW_PROD_STRESS$,T>
 | |
| 		TWThick		= RDSRec<RDS_TW_PROD_THICK$,T>
 | |
| 
 | |
| 		GOSUB LoadTWLine
 | |
| 		
 | |
| 	NEXT T
 | |
| END
 | |
| 
 | |
| IF RDSRec<RDS_TW_RECLAIM_CNT$> NE '' THEN
 | |
| 	TWType = 'Reclaim'
 | |
| 	FOR T = 1 TO COUNT(RDSRec<RDS_TW_RECLAIM_CODE$>,@VM) + (RDSRec<RDS_TW_RECLAIM_CODE$> NE '')
 | |
| 		
 | |
| 		TWTool		= RDSRec<RDS_TW_RECLAIM_TOOL$,T>
 | |
| 		TWCode		= RDSRec<RDS_TW_RECLAIM_CODE$,T>
 | |
| 		TWTrans		= RDSRec<RDS_TW_RECLAIM_TRANS$,T>
 | |
| 		TWCnt		= RDSRec<RDS_TW_RECLAIM_CNT$,T>
 | |
| 		TWCon		= RDSRec<RDS_TW_RECLAIM_CON$,T>
 | |
| 		TWRes		= RDSRec<RDS_TW_RECLAIM_RES$,T>
 | |
| 		TWRho		= RDSRec<RDS_TW_RECLAIM_RHO$,T>
 | |
| 		TWStress	= RDSRec<RDS_TW_RECLAIM_STRESS$,T>
 | |
| 		TWThick		= RDSRec<RDS_TW_RECLAIM_THICK$,T>
 | |
| 
 | |
| 		GOSUB LoadTWLine
 | |
| 		
 | |
| 	NEXT T
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| LoadTWLine:
 | |
| * * * * * * *
 | |
| 
 | |
| TWLine += 1
 | |
| 
 | |
| RDSTestRec<RDS_TEST_TW_TYPE$,TWLine>	= TWType
 | |
| RDSTestRec<RDS_TEST_TW_TOOL$,TWLine>	= TWTool
 | |
| RDSTestRec<RDS_TEST_TW_CODE$,TWLine>	= TWCode
 | |
| RDSTestRec<RDS_TEST_TW_TRANS$,TWLine>	= TWTrans
 | |
| RDSTestRec<RDS_TEST_TW_CNT$,TWLine>		= TWCnt
 | |
| RDSTestRec<RDS_TEST_TW_CON$,TWLine>		= TWCon
 | |
| RDSTestRec<RDS_TEST_TW_RES$,TWLine>		= TWRes
 | |
| RDSTestRec<RDS_TEST_TW_RHO$,TWLine>		= TWRho
 | |
| RDSTestRec<RDS_TEST_TW_STRESS$,TWLine>	= TWStress
 | |
| RDSTestRec<RDS_TEST_TW_THICK$,TWLine>	= TWThick
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Bail:
 | |
| * * * * * * *
 | |
| 
 | |
| Return
 |