open-insight/LSL2/STPROC/OBJ_RDS_LAYER.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

641 lines
18 KiB
Plaintext

COMPILE FUNCTION obj_RDS_Layer(Method,Parms)
/*
Methods for RDS Layer (RDS_LAYER) table
03/01/2006 JCH - Initial Coding
Properties:
Methods:
Create() ;* Creates New Records
*/
#pragma precomp SRP_PreCompiler
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, ErrMsg, Logging_Services, Environment_Services
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, obj_WO_Log, NextKey, Logging_Services
DECLARE FUNCTION obj_Prod_Spec, obj_RDS_Test, obj_Recipe, Tool_Parms_Services, Database_Services, Environment_Services
$INSERT MSG_EQUATES
$INSERT RDS_EQU
$INSERT RDS_LAYER_EQUATES
$INSERT RDS_TEST_EQUATES
$INSERT PRS_LAYER_EQU
$INSERT PROD_SPEC_EQUATES
$INSERT QUOTE_SPEC_EQU
$INSERT RECIPE_EQU
$INSERT RECIPE_PARMS_EQU
$INSERT DICT_EQUATES
$INSERT TOOL_PARMS_EQUATES
EQU CRLF$ TO \0D0A\
ErrTitle = 'Error in Stored Procedure "obj_RDS_Layer"'
ErrorMsg = ''
IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
IF NOT(ASSIGNED(Parms)) THEN Parms = ''
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
RETURN ''
END
Result = ''
BEGIN CASE
CASE Method = 'Create' ; GOSUB Create
CASE Method = 'Delete' ; GOSUB Delete
CASE Method = 'OutOfSpec' ; GOSUB OutOfSpec
CASE Method = 'Complete' ; GOSUB Complete
CASE Method = 'UpdateLimits' ; GOSUB UpdateLimits
CASE 1
ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to routine.'
END CASE
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
RETURN ''
END
RETURN Result
* * * * * * *
Create:
* * * * * * *
RDSNo = Parms[1,@RM]
LayerSet = Parms[COL2()+1,@RM]
PSNId = Parms[COL2()+1,@RM]
NoCombinedLayerSetFlag = Parms[COL2()+1,@RM]
IF RDSNo = '' THEN ErrorMsg = 'Null parameter "RDSNo" passed to routine (':Method:').'
IF LayerSet = '' THEN ErrorMsg = 'Null parameter "LayerSet" passed to routine (':Method:').'
IF PSNId = '' THEN ErrorMsg = 'Null parameter "PSNId" passed to routine (':Method:').'
IF ErrorMsg NE '' THEN RETURN
PSNRec = XLATE('PROD_SPEC',PSNId,'','X')
IF PSNRec = '' THEN
ErrorMsg = 'Invalid PSNId ':QUOTE(PSNId):' passed to routine (':Method:').'
RETURN
END
BEGIN CASE
CASE LayerSet = 'L1' ; LayerNo = 1 ;* This is needed to deal with the incorrect data layouts in the old system
CASE LayerSet = 'L2' ; LayerNo = 2
CASE LayerSet = '2' ; LayerNo = 3
CASE LayerSet = 'L3' ; LayerNo = 4
CASE LayerSet = '3' ; LayerNo = 5
CASE LayerSet = 'L4' ; LayerNo = 6
CASE LayerSet = '4' ; LayerNo = 7
END CASE
IF NoCombinedLayerSetFlag THEN LayerNo = LayerSet
EpiLayers = PSNRec<PROD_SPEC_SPEC_EPI$>
CONVERT CHAR(248) TO @RM IN EpiLayers
CONVERT @VM TO @FM IN EpiLayers
CONVERT @SVM TO @VM IN EpiLayers
CONVERT '~' TO @VM IN EpiLayers
FirstLayer = FIELD(EpiLayers,@RM,1,1)
RecipeNo = FirstLayer<QSEpiRecipe$>
EpiLayer = FIELD(EpiLayers,@RM,LayerNo,1)
RDSLayerRec = ''
*RDSLayerRec<RDS_LAYER_DEP_TIME_RATIO$> = PSNRec<PROD_SPEC_DEP_TIME_RATIO$> ;* Added 4/19/2010 JCH for HTR IGBT runs
IF INDEX(LayerSet,'L',1) OR NoCombinedLayerSetFlag THEN
IF NoCombinedLayerSetFlag THEN
LayerLimits = obj_Recipe('GetLimits',RecipeNo:@RM:PSNId:@RM:'L':LayerNo)
END ELSE
LayerLimits = obj_Recipe('GetLimits',RecipeNo:@RM:PSNId:@RM:LayerSet)
END
RDSLayerRec<RDS_LAYER_RECIPE_NO$> = RecipeNo
RDSLayerRec<RDS_LAYER_DOPANT$> = LayerLimits<RP_DOPANT$>
RDSLayerRec<RDS_LAYER_EPI_DILUENT$> = LayerLimits<RP_EPI_DILUENT$>
RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> = LayerLimits<RP_DEPOSIT_TIME_MIN$>
RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> = LayerLimits<RP_DEPOSIT_TIME_MAX$>
RDSLayerRec<RDS_LAYER_DILUENT_MIN$> = LayerLimits<RP_DILUENT_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_DILUENT_MAX$> = LayerLimits<RP_DILUENT_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> = LayerLimits<RP_DOPANT_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> = LayerLimits<RP_DOPANT_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> = LayerLimits<RP_HCL_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> = LayerLimits<RP_HCL_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> = LayerLimits<RP_BAKE_TIME_MIN$>
RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> = LayerLimits<RP_BAKE_TIME_MAX$>
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> = LayerLimits<RP_H2_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> = LayerLimits<RP_H2_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> = LayerLimits<RP_TCS_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> = LayerLimits<RP_TCS_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> = LayerLimits<RP_DCS_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> = LayerLimits<RP_DCS_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_AUX1_MIN$> = LayerLimits<RP_AUX1_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_AUX1_MAX$> = LayerLimits<RP_AUX1_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_AUX2_MIN$> = LayerLimits<RP_AUX2_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_AUX2_MAX$> = LayerLimits<RP_AUX2_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> = LayerLimits<RP_FOFFSET_MIN$>
RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> = LayerLimits<RP_FOFFSET_MAX$>
RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> = LayerLimits<RP_SOFFSET_MIN$>
RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> = LayerLimits<RP_SOFFSET_MAX$>
RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> = LayerLimits<RP_ROFFSET_MIN$>
RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> = LayerLimits<RP_ROFFSET_MAX$>
RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> = LayerLimits<RP_SUSC_ETCH_MIN$>
RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> = LayerLimits<RP_SUSC_ETCH_MAX$>
RDSLayerRec<RDS_LAYER_ETCH1_MIN$> = LayerLimits<RP_ETCH1_MIN$>
RDSLayerRec<RDS_LAYER_ETCH1_MAX$> = LayerLimits<RP_ETCH1_MAX$>
RDSLayerRec<RDS_LAYER_ETCH2_MIN$> = LayerLimits<RP_ETCH2_MIN$>
RDSLayerRec<RDS_LAYER_ETCH2_MAX$> = LayerLimits<RP_ETCH2_MAX$>
RDSLayerRec<RDS_LAYER_ETCH3_MIN$> = LayerLimits<RP_ETCH3_MIN$>
RDSLayerRec<RDS_LAYER_ETCH3_MAX$> = LayerLimits<RP_ETCH3_MAX$>
RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> = LayerLimits<RP_UL_TEMP_MIN$>
RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> = LayerLimits<RP_UL_TEMP_MAX$>
END
obj_Tables('WriteRec','RDS_LAYER':@RM:RDSNo:'*':LayerSet:@RM:@RM:RDSLayerRec)
RETURN
* * * * * * *
Delete:
* * * * * * *
LayerKeys = Parms[1,@RM]
IF LayerKeys = '' THEN RETURN
CONVERT @VM:@SVM TO @FM:@FM IN LayerKeys
OPEN 'RDS_LAYER' TO RDSLayerFile THEN
KeyCnt = COUNT(LayerKeys,@FM) + (LayerKeys NE '')
FOR I = 1 TO KeyCnt
DELETE RDSLayerFile,LayerKeys<I> ELSE NULL
NEXT I
END
RETURN
* * * * * * *
OutOfSpec:
* * * * * * *
RDSLayerKey = Parms[1,@RM]
RDSLayerRec = Parms[COL2()+1,@RM]
IF RDSLayerKey = '' THEN ErrorMsg = 'Null parameter "RDSLayerKey" passed to routine (':Method:').'
IF ErrorMsg NE '' THEN RETURN
IF RDSLayerRec = '' THEN
RDSLayerRec = XLATE('RDS_LAYER',RDSLayerKey,'','X')
IF RDSLayerRec = '' THEN RETURN
END
EpiTime = RDSLayerRec<RDS_LAYER_EPI_TIME$>
Diluent = RDSLayerRec<RDS_LAYER_DILUENT_ADJ_PARAM$>
DopantFlow = RDSLayerRec<RDS_LAYER_DOPANT_FLOW$>
HCLFlow = RDSLayerRec<RDS_LAYER_HCL_FLOW$>
BakeTime = RDSLayerRec<RDS_LAYER_BAKE_TIME$>
EpiH2Flow = RDSLayerRec<RDS_LAYER_EPI_H2_FLOW$>
TCSFlow = RDSLayerRec<RDS_LAYER_TCS_FLOW$>
DCSFLow = RDSLayerRec<RDS_LAYER_DCS_FLOW$>
Aux1 = RDSLayerRec<RDS_LAYER_AUX1$>
Aux2 = RDSLayerRec<RDS_LAYER_AUX2$>
FOffset = RDSLayerRec<RDS_LAYER_F_OFFSET$>
SOffset = RDSLayerRec<RDS_LAYER_S_OFFSET$>
ROffset = RDSLayerRec<RDS_LAYER_R_OFFSET$>
SuscEtch = RDSLayerRec<RDS_LAYER_SUSC_ETCH$>
Etch1 = RDSLayerRec<RDS_LAYER_ETCH1$>
Etch2 = RDSLayerRec<RDS_LAYER_ETCH2$>
Etch3 = RDSLayerRec<RDS_LAYER_ETCH3$>
ULTemp = RDSLayerRec<RDS_LAYER_UL_TEMP$>
IF EpiTime NE '' THEN
IF EpiTime < RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> OR EpiTime > RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> THEN
Result = 1
RETURN
END
END
IF Diluent NE '' THEN
IF Diluent < RDSLayerRec<RDS_LAYER_DILUENT_MIN$> OR Diluent > RDSLayerRec<RDS_LAYER_DILUENT_MAX$> THEN
Result = 1
RETURN
END
END
IF DopantFlow NE '' THEN
IF DopantFlow < RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> OR DopantFlow > RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> THEN
Result = 1
RETURN
END
END
IF HCLFlow NE '' THEN
IF HCLFlow < RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> OR HCLFlow > RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> THEN
Result = 1
RETURN
END
END
IF BakeTime NE '' THEN
IF BakeTime < RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> OR BakeTime > RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> THEN
Result = 1
RETURN
END
END
IF EpiH2Flow NE '' THEN
IF EpiH2Flow < RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> OR EpiH2Flow > RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> THEN
Result = 1
RETURN
END
END
IF TCSFlow NE '' THEN
IF TCSFlow < RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> OR TCSFlow > RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> THEN
Result = 1
RETURN
END
END
IF DCSFlow NE '' THEN
IF DCSFlow < RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> OR DCSFlow > RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> THEN
Result = 1
RETURN
END
END
IF Aux1 NE '' THEN
IF Aux1 < RDSLayerRec<RDS_LAYER_AUX1_MIN$> OR Aux1 > RDSLayerRec<RDS_LAYER_AUX1_MAX$> THEN
Result = 1
RETURN
END
END
IF Aux2 NE '' THEN
IF Aux2 < RDSLayerRec<RDS_LAYER_AUX2_MIN$> OR Aux2 > RDSLayerRec<RDS_LAYER_AUX2_MAX$> THEN
Result = 1
RETURN
END
END
IF FOffset NE '' THEN
IF FOffset < RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> OR FOffset > RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> THEN
Result = 1
RETURN
END
END
IF SOffset NE '' THEN
IF SOffset < RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> OR SOffset > RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> THEN
Result = 1
RETURN
END
END
IF ROffset NE '' THEN
IF ROffset < RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> OR ROffset > RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> THEN
Result = 1
RETURN
END
END
IF SuscEtch NE '' THEN
IF SuscEtch <RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> OR SuscEtch > RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> THEN
Result = 1
RETURN
END
END
IF Etch1 NE '' THEN
IF Etch1 < RDSLayerRec<RDS_LAYER_ETCH1_MIN$> OR Etch1 > RDSLayerRec<RDS_LAYER_ETCH1_MAX$> THEN
Result = 1
RETURN
END
END
IF Etch2 NE '' THEN
IF Etch2 < RDSLayerRec<RDS_LAYER_ETCH2_MIN$> OR Etch2 > RDSLayerRec<RDS_LAYER_ETCH2_MAX$> THEN
Result = 1
RETURN
END
END
IF Etch3 NE '' THEN
IF Etch3 < RDSLayerRec<RDS_LAYER_ETCH3_MIN$> OR Etch3 > RDSLayerRec<RDS_LAYER_ETCH3_MAX$> THEN
Result = 1
RETURN
END
END
IF ULTemp NE '' THEN
IF ULTemp < RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> OR ULTemp > RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> THEN
Result = 1
RETURN
END
END
RETURN
* * * * * * *
Complete:
* * * * * * *
RDSLayerKey = Parms[1,@RM]
RDSLayerRec = Parms[COL2()+1,@RM]
IF RDSLayerKey = '' THEN ErrorMsg = 'Null parameter "RDSLayerKey" passed to routine (':Method:').'
IF ErrorMsg NE '' THEN RETURN
IF RDSLayerRec = '' THEN
RDSLayerRec = XLATE('RDS_LAYER',RDSLayerKey,'','X')
IF RDSLayerRec = '' THEN RETURN
END
EpiTime = RDSLayerRec<RDS_LAYER_EPI_TIME$>
Diluent = RDSLayerRec<RDS_LAYER_DILUENT_ADJ_PARAM$>
DopantFlow = RDSLayerRec<RDS_LAYER_DOPANT_FLOW$>
HCLFlow = RDSLayerRec<RDS_LAYER_HCL_FLOW$>
BakeTime = RDSLayerRec<RDS_LAYER_BAKE_TIME$>
EpiH2Flow = RDSLayerRec<RDS_LAYER_EPI_H2_FLOW$>
TCSFlow = RDSLayerRec<RDS_LAYER_TCS_FLOW$>
DCSFLow = RDSLayerRec<RDS_LAYER_DCS_FLOW$>
Aux1 = RDSLayerRec<RDS_LAYER_AUX1$>
Aux2 = RDSLayerRec<RDS_LAYER_AUX2$>
FOffset = RDSLayerRec<RDS_LAYER_F_OFFSET$>
SOffset = RDSLayerRec<RDS_LAYER_S_OFFSET$>
ROffset = RDSLayerRec<RDS_LAYER_R_OFFSET$>
Etch1 = RDSLayerRec<RDS_LAYER_ETCH1$>
Etch2 = RDSLayerRec<RDS_LAYER_ETCH2$>
Etch3 = RDSLayerRec<RDS_LAYER_ETCH3$>
SuscEtch = RDSLayerRec<RDS_LAYER_SUSC_ETCH$>
ULTemp = RDSLayerRec<RDS_LAYER_UL_TEMP$>
Result = 1
IF EpiTime = '' AND (RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF Diluent = '' AND (RDSLayerRec<RDS_LAYER_DILUENT_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_DILUENT_MAX$> NE '') THEN
Result = 0
RETURN
END
IF DopantFlow = '' AND ( RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> NE '') THEN
Result = 0
RETURN
END
IF HCLFlow = '' AND ( RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> NE '') THEN
Result = 0
RETURN
END
IF BakeTime = '' AND ( RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> NE '') THEN
Result = 0
RETURN
END
IF EpiH2Flow = '' AND ( RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF TCSFlow = '' AND ( RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF DCSFlow = '' AND ( RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF Aux1 = '' AND ( RDSLayerRec<RDS_LAYER_AUX1_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_AUX1_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF Aux2 = '' AND ( RDSLayerRec<RDS_LAYER_AUX2_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_AUX2_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF FOffset = '' AND ( RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF SOffset = '' AND ( RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF ROffset = '' AND ( RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF SuscEtch = '' AND ( RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF Etch1 = '' AND ( RDSLayerRec<RDS_LAYER_ETCH1_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_ETCH1_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF Etch2 = '' AND ( RDSLayerRec<RDS_LAYER_ETCH2_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_ETCH2_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF Etch3 = '' AND ( RDSLayerRec<RDS_LAYER_ETCH3_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_ETCH3_MAX$> NE '' ) THEN
Result = 0
RETURN
END
IF ULTemp = '' AND (RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> NE '') then
Result = 0
RETURN
end
RETURN
* * * * * * *
UpdateLimits:
* * * * * * *
RDSNo = Parms[1,@RM]
LayerSet = Parms[COL2()+1,@RM]
RecipeNo = Parms[COL2()+1,@RM]
IF RDSNo = '' THEN ErrorMsg = 'Null parameter "RDSNo" passed to routine (':Method:').'
IF LayerSet = '' THEN ErrorMsg = 'Null parameter "LayerSet" passed to routine (':Method:').'
IF ErrorMsg NE '' THEN RETURN
RLKey = RDSNo:'*':LayerSet
Set_Status(0)
RLParms = 'RDS_LAYER':@RM:RLKey
RDSLayerRec = obj_Tables('ReadOnlyRec',RLParms)
IF Get_Status(errCode) THEN
ErrorMsg = 'Unable to read RDS_LAYER record ':QUOTE(RLKey):' for Limits Update.'
RETURN
END
IF RDSLayerRec<RDS_LAYER_RECIPE_NO$> = '' AND RecipeNo NE '' THEN
RDSLayerRec<RDS_LAYER_RECIPE_NO$> = RecipeNo ;* Added 8/24/2012 JCH
END
RecipeNo = RDSLayerRec<RDS_LAYER_RECIPE_NO$>
WOStepKey = XLATE('RDS',RDSNo,RDS_WO_STEP_KEY$,'X')
PSNId = XLATE('WO_STEP',WOStepKey,1,'X')
IF INDEX(LayerSet,'L',1) THEN
LayerLimits = obj_Recipe('GetLimits',RecipeNo:@RM:PSNId:@RM:LayerSet)
RDSLayerRec<RDS_LAYER_RECIPE_NO$> = RecipeNo
RDSLayerRec<RDS_LAYER_DOPANT$> = LayerLimits<RP_DOPANT$>
RDSLayerRec<RDS_LAYER_EPI_DILUENT$> = LayerLimits<RP_EPI_DILUENT$>
RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> = LayerLimits<RP_DEPOSIT_TIME_MIN$>
RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> = LayerLimits<RP_DEPOSIT_TIME_MAX$>
RDSLayerRec<RDS_LAYER_DILUENT_MIN$> = LayerLimits<RP_DILUENT_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_DILUENT_MAX$> = LayerLimits<RP_DILUENT_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> = LayerLimits<RP_DOPANT_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> = LayerLimits<RP_DOPANT_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> = LayerLimits<RP_HCL_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> = LayerLimits<RP_HCL_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> = LayerLimits<RP_BAKE_TIME_MIN$>
RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> = LayerLimits<RP_BAKE_TIME_MAX$>
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> = LayerLimits<RP_H2_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> = LayerLimits<RP_H2_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> = LayerLimits<RP_TCS_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> = LayerLimits<RP_TCS_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> = LayerLimits<RP_DCS_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> = LayerLimits<RP_DCS_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_AUX1_MIN$> = LayerLimits<RP_AUX1_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_AUX1_MAX$> = LayerLimits<RP_AUX1_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_AUX2_MIN$> = LayerLimits<RP_AUX2_FLOW_MIN$>
RDSLayerRec<RDS_LAYER_AUX2_MAX$> = LayerLimits<RP_AUX2_FLOW_MAX$>
RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> = LayerLimits<RP_FOFFSET_MIN$>
RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> = LayerLimits<RP_FOFFSET_MAX$>
RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> = LayerLimits<RP_SOFFSET_MIN$>
RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> = LayerLimits<RP_SOFFSET_MAX$>
RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> = LayerLimits<RP_ROFFSET_MIN$>
RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> = LayerLimits<RP_ROFFSET_MAX$>
RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> = LayerLimits<RP_SUSC_ETCH_MIN$>
RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> = LayerLimits<RP_SUSC_ETCH_MAX$>
RDSLayerRec<RDS_LAYER_ETCH1_MIN$> = LayerLimits<RP_ETCH1_MIN$>
RDSLayerRec<RDS_LAYER_ETCH1_MAX$> = LayerLimits<RP_ETCH1_MAX$>
RDSLayerRec<RDS_LAYER_ETCH2_MIN$> = LayerLimits<RP_ETCH2_MIN$>
RDSLayerRec<RDS_LAYER_ETCH2_MAX$> = LayerLimits<RP_ETCH2_MAX$>
RDSLayerRec<RDS_LAYER_ETCH3_MIN$> = LayerLimits<RP_ETCH3_MIN$>
RDSLayerRec<RDS_LAYER_ETCH3_MAX$> = LayerLimits<RP_ETCH3_MAX$>
RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> = LayerLimits<RP_UL_TEMP_MIN$>
RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> = LayerLimits<RP_UL_TEMP_MAX$>
END
RLParms = FieldStore(RLParms, @RM, 4, 1, RDSLayerRec)
obj_Tables('WriteOnlyRec',RLParms)
RETURN