649 lines
16 KiB
Plaintext
649 lines
16 KiB
Plaintext
COMPILE ROUTINE FIX_PROD_SPEC(Dummy)
|
|
ROWDEF(CHARSTR)
|
|
|
|
DECLARE SUBROUTINE obj_Schedule,Send_Dyn,Send_Info, RList, ErrMsg, obj_Prod_Spec, Btree.Extract, obj_PRS_Stage
|
|
DECLARE FUNCTION Get_Status, Set_Printer, obj_Prod_Spec, NextKEy
|
|
|
|
$INSERT PROD_SPEC_EQUATES
|
|
$INSERT QUOTE_SPEC_EQU
|
|
$INSERT PART_EQUATES
|
|
|
|
$INSERT CUST_EPI_PART_EQUATES
|
|
$INSERT PRS_STAGE_EQUATES
|
|
$INSERT PROD_VER_EQUATES
|
|
|
|
EQU TAB$ TO \09\:'/'
|
|
|
|
EQU CRLF$ TO \0D0A\
|
|
|
|
OPEN 'PROD_SPEC' TO ProdSpecTable ELSE
|
|
DEBUG
|
|
GOTO Bail
|
|
END
|
|
|
|
OPEN 'DICT.PROD_SPEC' TO DictProdSpec Else
|
|
DEBUG
|
|
GOTO Bail
|
|
END
|
|
|
|
OPEN 'PRS_STAGE' TO StageTable ELSE
|
|
DEBUG
|
|
GOTO Bail
|
|
END
|
|
|
|
OPEN 'PART_WORK' TO PartWorkTable ELSE
|
|
DEBUG
|
|
GOTO Bail
|
|
END
|
|
|
|
OPEN 'CUST_EPI_PART' TO CustEpiTable ELSE
|
|
DEBUG
|
|
GOTO Bail
|
|
END
|
|
|
|
DEBUG
|
|
|
|
GOTO Bail
|
|
|
|
SELECT ProdSpecTable
|
|
|
|
RList('SELECT PROD_SPEC WITH TRANS_MEAS_TYPE NE "" OR WITH STRESS_MEAS_TYPE NE ""',5)
|
|
|
|
|
|
CleanTools = ''
|
|
|
|
Done = 0
|
|
RecCnt = @RECCOUNT
|
|
FixCnt = 0
|
|
|
|
DEBUG
|
|
|
|
LOOP
|
|
READNEXT PSNo ELSE Done = 1
|
|
UNTIL Done
|
|
Send_Dyn(PSNo)
|
|
obj_Prod_Spec('PushTech',PSNo)
|
|
|
|
|
|
REPEAT
|
|
|
|
|
|
GOTO Bail
|
|
|
|
|
|
|
|
|
|
*******************************************************************
|
|
|
|
|
|
SELECT ProdSpecTable
|
|
|
|
RList('SELECT PROD_SPEC BY-DSND SEQ',5)
|
|
|
|
|
|
CleanTools = ''
|
|
|
|
Done = 0
|
|
RecCnt = @RECCOUNT
|
|
FixCnt = 0
|
|
|
|
DEBUG
|
|
|
|
LOOP
|
|
READNEXT PSNo ELSE Done = 1
|
|
UNTIL Done
|
|
|
|
READ ProdSpecRec FROM ProdSpecTable,PSNo THEN
|
|
|
|
StageKeys = ProdSpecRec<PROD_SPEC_PRS_STAGE_KEY$>
|
|
|
|
StageCnt = COUNT(StageKeys,@VM) + (StageKeys NE '')
|
|
|
|
FOR I = 1 TO StageCnt
|
|
StageKey = StageKeys<1,I>
|
|
READ StageRec FROM StageTable,StageKey THEN
|
|
RecCnt += 1
|
|
WriteFlag = 0
|
|
IF StageRec<PRS_STAGE_CLEAN_TOOL$> NE '' THEN
|
|
StageRec<PRS_STAGE_CLEAN_SIG_REQ$> = 1
|
|
WriteFlag = 1
|
|
END
|
|
|
|
IF StageRec<PRS_STAGE_BRIGHTLIGHT$> NE '' OR StageRec<PRS_STAGE_MICROSCOPE$> NE '' THEN
|
|
StageRec<PRS_STAGE_INSP_SIG_REQ$> = 1
|
|
WriteFlag = 1
|
|
END
|
|
|
|
IF StageRec<PRS_STAGE_SURFSCAN_RECIPE$> NE '' THEN
|
|
StageRec<PRS_STAGE_SURFSCAN_SIG_REQ$> = 1
|
|
WriteFlag = 1
|
|
END
|
|
|
|
IF WriteFlag = 1 THEN
|
|
*WRITE StageRec ON StageTable,StageKey THEN
|
|
|
|
FixCnt += 1
|
|
|
|
Send_Info(FixCnt:TAB$:RecCnt:TAB$:StageKey)
|
|
*END
|
|
|
|
END ;* End of check for WriteFlag
|
|
END
|
|
|
|
|
|
|
|
|
|
NEXT I
|
|
|
|
|
|
END
|
|
REPEAT
|
|
|
|
|
|
GOTO Bail
|
|
|
|
**********************
|
|
ctCnt = COUNT(CleanTools,@FM) + (CleanTools NE '')
|
|
|
|
|
|
DEBUG
|
|
|
|
FOR I = 1 TO ctCnt
|
|
|
|
CTool = TRIM(CleanTools<I>)
|
|
OrgCTool = CTool
|
|
|
|
CONVERT @LOWER_CASE TO @UPPER_CASE in CTool
|
|
SWAP 'AKRION 1' WITH 'AKRION1' in CTool
|
|
|
|
IF CTool[1,2] _EQC 'NO' THEN CTool = ''
|
|
IF CTool[1,2] _EQC 'IF' THEN CTool = ''
|
|
|
|
SWAP ' OR ' WITH @VM IN CTool
|
|
SWAP 'SC1+SC2' WITH 'CB3' IN CTool
|
|
SWAP 'ONLY' WITH '' IN CTool
|
|
SWAP 'HF+ SC1' WITH 'CB3' IN CTool
|
|
SWAP 'SC1' WITH 'CB3' IN CTool
|
|
|
|
intCTools = TRIM(CTool)
|
|
|
|
nCnt = COUNT(intCTools,@VM) + (intCTools NE '')
|
|
|
|
Fixed = 0
|
|
FOR N = 1 TO nCnt
|
|
intCTool = intCTools<1,N>
|
|
IF IntCTool = 'AKRION' THEN
|
|
intCTools<1,N> = 'AKRION1':@VM:'AKRION2'
|
|
Fixed = 1
|
|
END
|
|
UNTIL Fixed
|
|
NEXT N
|
|
|
|
SWAP @VM WITH ', ' IN intCTools
|
|
|
|
Send_Dyn(OrgCTool:' -> ':intCTools)
|
|
|
|
NEXT I
|
|
|
|
|
|
GOTO Bail
|
|
|
|
|
|
* * * * * * * *
|
|
|
|
SELECT ProdSpecTable
|
|
|
|
RList('SELECT PROD_SPEC BY-DSND SEQ',5)
|
|
|
|
|
|
Done = 0
|
|
RecCnt = @RECCOUNT
|
|
FixCnt = 0
|
|
|
|
|
|
|
|
LOOP
|
|
READNEXT PSNo ELSE Done = 1
|
|
UNTIL Done
|
|
|
|
READ PsRec FROM ProdSpecTable,PSNo THEN
|
|
|
|
* Pre Epi Cleans ***************
|
|
|
|
PreTool = PSRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPreClean$>
|
|
PreToolRecipe = PSRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPreAkrionRecipe$>
|
|
|
|
IF PreTool[1,2] _EQC 'NO' THEN PreTool = ''
|
|
IF PreTool[1,2] _EQC 'IF' THEN PreTool = ''
|
|
IF PreToolRecipe[1,2] _EQC 'NO' THEN PreToolRecipe = ''
|
|
|
|
SWAP 'Akrion1' WITH 'Akrion' IN PreTool
|
|
SWAP ' or ' WITH @VM IN PreTool
|
|
SWAP 'SC1+SC2' WITH 'CB3' IN PreTool
|
|
SWAP 'Only' WITH '' IN PreTool
|
|
PreTool = TRIM(PreTool)
|
|
|
|
PreFlag = 0
|
|
|
|
IF PreTool OR PreToolRecipe THEN
|
|
PreFlag = 1
|
|
Send_Dyn(PSNo:' Pre: Cleans ':PreTool:TAB$:PreToolRecipe)
|
|
END
|
|
|
|
* Pre Epi Inspection **
|
|
|
|
PreBrightlightFlag = PSRec<PROD_SPEC_PRE_BRIGHTLIGHT$>
|
|
PreMicroscopeFlag = PSRec<PROD_SPEC_PRE_MICROSCOPE$>
|
|
|
|
IF PreBrightlightFlag = 1 or PreMicroscopeFlag = 1 THEN
|
|
Send_Dyn(PSNo:' Pre: Inspection Brightlight ':PreBrightlightFlag:TAB$:' Microscope ':PreMicroscopeFlag)
|
|
END
|
|
|
|
* Pre Epi SurfScan **
|
|
|
|
PreSurfscanRecipe = PSRec<PROD_SPEC_PRE_SURFSCAN_RECIPE$>
|
|
|
|
IF PreSurfscanRecipe THEN
|
|
Send_Dyn(PSNo:' Pre: SurfScan ':PreSurfscanFlag:TAB$:PreSurfscanRecipe)
|
|
END
|
|
|
|
|
|
* Wafer Inspection ****************
|
|
|
|
Spec_FWI_LWI = PSRec<PROD_SPEC_POST_FWI_LWI$> ;* FWI OR LWI
|
|
|
|
IF Spec_FWI_LWI = 'FWI' THEN
|
|
|
|
FwiBrightLightFlag = PSRec<PROD_SPEC_FIRST_BRIGHTLIGHT$>
|
|
FwiMicroscopeFlag = PSRec<PROD_SPEC_FIRST_MICROSCOPE$>
|
|
|
|
IF FwiBrightLightFlag = 1 OR FwiMicroscopeFlag = 1 THEN
|
|
Send_Dyn(PSNo:' FWI Inspection Brightlight ':FwiBrightLightFlag:TAB$:'Microscope ':FwiMicroscopeFlag)
|
|
END
|
|
|
|
FwiSurfscanFlag = PSRec<PROD_SPEC_FIRST_SURFSCAN$>
|
|
FwiSurfscanRecipe = PSRec<PROD_SPEC_FIRST_SURFSCAN_RECIPE$>
|
|
|
|
IF FwiSurfscanFlag = 1 OR FwiSurfscanRecipe THEN
|
|
Send_Dyn(PSNo:' FWI Inspection Surfscan Flag ':FwiSurfscanFlag:TAB$:' Recipe ':FwiSurfscanRecipe)
|
|
END
|
|
|
|
END
|
|
|
|
IF Spec_FWI_LWI = 'LWI' THEN
|
|
|
|
LwiBrightLightFlag = PSRec<PROD_SPEC_FIRST_BRIGHTLIGHT$>
|
|
LwiMicroscopeFlag = PSRec<PROD_SPEC_FIRST_MICROSCOPE$>
|
|
|
|
IF LwiBrightLightFlag = 1 OR LwiMicroscopeFlag = 1 THEN
|
|
Send_Dyn(PSNo:' LWI Inspection Brightlight ':LwiBrightLightFlag:TAB$:'Microscope ':LwiMicroscopeFlag)
|
|
END
|
|
|
|
LwiSurfscanFlag = PSRec<PROD_SPEC_FIRST_SURFSCAN$>
|
|
LwiSurfscanRecipe = PSRec<PROD_SPEC_FIRST_SURFSCAN_RECIPE$>
|
|
|
|
IF LwiSurfscanFlag = 1 OR LwiSurfscanRecipe = 1 THEN
|
|
Send_Dyn(PSNo:' LWI Inspection Surfscan Flag ':LwiSurfscanFlag:TAB$:' Recipe ':LwiSurfscanRecipe)
|
|
END
|
|
END
|
|
|
|
* Post Epi Cleans ****************
|
|
|
|
PostTool = PSRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPostClean$>
|
|
PostToolRecipe = PSRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPostAkrionRecipe$>
|
|
|
|
IF PostTool[1,2] _EQC 'NO' THEN PostTool = ''
|
|
IF PostToolRecipe[1,2] _EQC 'NO' THEN PostToolRecipe = ''
|
|
|
|
IF PostTool NE '' OR PostToolRecipe NE '' THEN
|
|
Send_Dyn(PSNo:' POST Clean ':PostTool:TAB$:PostToolRecipe)
|
|
END
|
|
|
|
|
|
* Post Epi Inspection **
|
|
|
|
PostBrightLight = PSRec<PROD_SPEC_POST_CLEAN_BRIGHTLIGHT$>
|
|
|
|
IF PostBrightLight = 1 THEN
|
|
Send_Dyn(PSNo:' POST Inspection Brightlight ':PostBrightlight)
|
|
END
|
|
|
|
* PostEpi SurfScan
|
|
|
|
PostSurfscan = PSRec<PROD_SPEC_POST_CLEAN_SURFSCAN$>
|
|
PostSurfscanRecipe = PSRec<PROD_SPEC_POST_CLEAN_SURFSCAN_RECIPE$>
|
|
|
|
IF PostSurfscan OR PostSurfscanRecipe NE '' THEN
|
|
Send_Dyn(PSNo:' POST Surfscan Flag ':PostSurfscan:TAB$:PostSurfscanRecipe)
|
|
END
|
|
|
|
Send_Dyn(' ')
|
|
|
|
|
|
END ;* End of ProdSpecRec read
|
|
REPEAT
|
|
|
|
|
|
GOTO Bail
|
|
|
|
|
|
|
|
|
|
|
|
****************************************
|
|
|
|
RList('SELECT PROD_SPEC BY-DSND SEQ',5)
|
|
|
|
|
|
Done = 0
|
|
RecCnt = @RECCOUNT
|
|
|
|
DEBUG
|
|
|
|
LOOP
|
|
READNEXT PSNo ELSE Done = 1
|
|
UNTIL Done
|
|
|
|
READ ProdSpecRec FROM ProdSpecTable,PSNo THEN
|
|
|
|
ModeCodes = 'U':@VM:'Q':@VM:'E':@VM:'P'
|
|
|
|
|
|
ProdSpecRec<PROD_SPEC_MODE_CODE$> = ModeCodes
|
|
*PROD_SPEC_MODE_SIG$
|
|
*PROD_SPEC_MODE_SIG_DTM$
|
|
|
|
SpecAddtl = ProdSpecRec<PROD_SPEC_SPEC_ADDTL$>
|
|
|
|
SpecType = ProdSpecRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubSpecType$>
|
|
|
|
PreQualSig = SpecAddtl<1,QSAddPreQualSig$>
|
|
PreQualDate = OCONV(SpecAddtl<1,QSAddPreQualSigDate$>,'D4/')
|
|
PreQualTime = OCONV(SpecAddtl<1,QSAddPreQualSigTime$>,'MTS')
|
|
|
|
IF PreQualSig NE '' THEN
|
|
ProdSpecRec<PROD_SPEC_MODE_SIG$,1> = PreQualSig
|
|
ProdSpecRec<PROD_SPEC_MODE_SIG_DTM$,1> = ICONV(PreQualDate:' ':PreQualTime,'DT')
|
|
END
|
|
|
|
QualSig = SpecAddtl<1,QSAddQualSig$>
|
|
QualDate = OCONV(SpecAddtl<1,QSAddQualSigDate$>,'D4/')
|
|
QualTime = OCONV(SpecAddtl<1,QSAddQualSigTime$>,'MTS')
|
|
|
|
IF QualSig NE '' THEN
|
|
ProdSpecRec<PROD_SPEC_MODE_SIG$,2> = QualSig
|
|
ProdSpecRec<PROD_SPEC_MODE_SIG_DTM$,2> = ICONV(QualDate:' ':QualTime,'DT')
|
|
END
|
|
|
|
PreProdSig = SpecAddtl<1,QSAddPreProdSig$>
|
|
PreProdDate = OCONV(SpecAddtl<1,QSAddPreProdSigDate$>,'D4/')
|
|
PreProdTime = OCONV(SpecAddtl<1,QSAddPreProdSigTime$>,'MTS')
|
|
|
|
IF PreProdSig NE '' THEN
|
|
ProdSpecRec<PROD_SPEC_MODE_SIG$,3> = PreProdSig
|
|
ProdSpecRec<PROD_SPEC_MODE_SIG_DTM$,3> = ICONV(PreProdDate:' ':PreProdTime,'DT')
|
|
END
|
|
|
|
|
|
ProdSig = SpecAddtl<1,QSAddProdSig$>
|
|
ProdDate = OCONV(SpecAddtl<1,QSAddProdSigDate$>,'D4/')
|
|
ProdTime = OCONV(SpecAddtl<1,QSAddProdSigTime$>,'MTS')
|
|
|
|
IF PreProdSig NE '' THEN
|
|
ProdSpecRec<PROD_SPEC_MODE_SIG$,4> = ProdSig
|
|
ProdSpecRec<PROD_SPEC_MODE_SIG_DTM$,4> = ICONV(ProdDate:' ':ProdTime,'DT')
|
|
END
|
|
|
|
Send_Dyn(PSNo:' - ':SpecType:' - ')
|
|
Send_Dyn(PSNo:ProdSpecRec<PROD_SPEC_MODE_CODE$,1>:' ':ProdSpecRec<PROD_SPEC_MODE_SIG$,1>:' ':ProdSpecRec<PROD_SPEC_MODE_SIG_DTM$,1>)
|
|
Send_Dyn(PSNo:ProdSpecRec<PROD_SPEC_MODE_CODE$,2>:' ':ProdSpecRec<PROD_SPEC_MODE_SIG$,2>:' ':ProdSpecRec<PROD_SPEC_MODE_SIG_DTM$,2>)
|
|
Send_Dyn(PSNo:ProdSpecRec<PROD_SPEC_MODE_CODE$,3>:' ':ProdSpecRec<PROD_SPEC_MODE_SIG$,3>:' ':ProdSpecRec<PROD_SPEC_MODE_SIG_DTM$,3>)
|
|
Send_Dyn(PSNo:ProdSpecRec<PROD_SPEC_MODE_CODE$,4>:' ':ProdSpecRec<PROD_SPEC_MODE_SIG$,4>:' ':ProdSpecRec<PROD_SPEC_MODE_SIG_DTM$,4>)
|
|
Send_Dyn(' ')
|
|
|
|
|
|
|
|
WRITE ProdSpecRec ON ProdSpecTable,PSNo THEN
|
|
*Send_Dyn(PSNo:' ':ReactType:' ':ProdSpecRec<PROD_SPEC_MET_TEST$>:' ':ProdSpecRec<PROD_SPEC_MET_INTERVAL$>:' ':ProdSpecRec<PROD_SPEC_MET_START$>)
|
|
END
|
|
|
|
|
|
|
|
|
|
END
|
|
REPEAT
|
|
|
|
|
|
GOTO Bail
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*****************************
|
|
|
|
*SelectSent = 'REACTOR_TYPE':@VM:'P':@FM
|
|
SelectSent = 'STATUS':@VM:'A':@FM
|
|
|
|
Btree.Extract(SelectSent,'PROD_SPEC',DictProdSpec,EpiProSpecNos,'','')
|
|
|
|
IF Get_Status(errCode) THEN DEBUG
|
|
|
|
Done = 0
|
|
RecCnt = COUNT(EpiProSpecNos,@VM) + (EpiProSpecNos NE '')
|
|
|
|
|
|
FOR I = 1 TO RecCnt
|
|
PSNo = EpiProSpecNos<1,I>
|
|
READ ProdSpecRec FROM ProdSpecTable,PSNo THEN
|
|
ReactType = XLATE('PROD_SPEC',PSNo,'REACTOR_TYPE','X')
|
|
|
|
ThickMin = OCONV(XLATE('PROD_SPEC',PSNo,'THICK_MIN_ALL','X')[-1,'B':@VM],'MD2')
|
|
ThickMax = OCONV(XLATE('PROD_SPEC',PSNo,'THICK_MAX_ALL','X')[-1,'B':@VM],'MD2')
|
|
|
|
ResMin = OCONV(XLATE('PROD_SPEC',PSNo,'RES_MIN_ALL','X')[-1,'B':@VM],'MD3')
|
|
ResMax = OCONV(XLATE('PROD_SPEC',PSNo,'RES_MAX_ALL','X')[-1,'B':@VM],'MD3')
|
|
|
|
IF ReactType = 'P' THEN
|
|
|
|
SubstrateInfo = ProdSpecRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubInstructions$>
|
|
|
|
TestCnt = 1
|
|
|
|
IF INDEX(SubstrateInfo,'FLEXUS',1) THEN
|
|
ProdSpecRec<PROD_SPEC_MET_TEST$,TestCnt> = 'FLEXUS'
|
|
ProdSpecRec<PROD_SPEC_MET_INTERVAL$,TestCnt> = '5'
|
|
ProdSpecRec<PROD_SPEC_MET_START$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_SLOT$,TestCnt> = 'A' ;* All Wafers
|
|
ProdSpecRec<PROD_SPEC_MET_RUN_STEP$,TestCnt> = 'MO_QA'
|
|
TestCnt += 1
|
|
END
|
|
|
|
ProdSpecRec<PROD_SPEC_MET_TEST$,TestCnt> = 'ADE'
|
|
ProdSpecRec<PROD_SPEC_MET_MIN$,TestCnt> = ThickMin
|
|
ProdSpecRec<PROD_SPEC_MET_MAX$,TestCnt> = ThickMax
|
|
ProdSpecRec<PROD_SPEC_MET_INTERVAL$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_START$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_SLOT$,TestCnt> = '2'
|
|
ProdSpecRec<PROD_SPEC_MET_RUN_STEP$,TestCnt> = 'MO_QA'
|
|
|
|
END ELSE
|
|
SubstrateInfo = ProdSpecRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubInstructions$>
|
|
|
|
TestCnt = 1
|
|
|
|
ProdSpecRec<PROD_SPEC_MET_TEST$,TestCnt> = 'THICK_ONLY'
|
|
ProdSpecRec<PROD_SPEC_MET_MIN$,TestCnt> = ThickMin
|
|
ProdSpecRec<PROD_SPEC_MET_MAX$,TestCnt> = ThickMax
|
|
ProdSpecRec<PROD_SPEC_MET_INTERVAL$,TestCnt> = '2'
|
|
ProdSpecRec<PROD_SPEC_MET_START$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_SLOT$,TestCnt> = 'L'
|
|
ProdSpecRec<PROD_SPEC_MET_RUN_STEP$,TestCnt> = 'UNLOAD'
|
|
TestCnt += 1
|
|
|
|
|
|
IF ProdSpecRec<PROD_SPEC_LW_RHO_MIN$> NE '' OR ProdSpecRec<PROD_SPEC_LW_RHO_MAX$> NE '' THEN
|
|
ProdSpecRec<PROD_SPEC_MET_TEST$,TestCnt> = 'LW_RHO'
|
|
ProdSpecRec<PROD_SPEC_MET_MIN$,TestCnt> = ResMin
|
|
ProdSpecRec<PROD_SPEC_MET_MAX$,TestCnt> = ResMax
|
|
ProdSpecRec<PROD_SPEC_MET_INTERVAL$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_START$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_SLOT$,TestCnt> = 'L'
|
|
ProdSpecRec<PROD_SPEC_MET_RUN_STEP$,TestCnt> = 'UNLOAD'
|
|
TestCnt += 1
|
|
END
|
|
|
|
ProdSpecRec<PROD_SPEC_MET_TEST$,TestCnt> = 'ADE'
|
|
ProdSpecRec<PROD_SPEC_MET_MIN$,TestCnt> = ThickMin
|
|
ProdSpecRec<PROD_SPEC_MET_MAX$,TestCnt> = ThickMax
|
|
ProdSpecRec<PROD_SPEC_MET_INTERVAL$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_START$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_SLOT$,TestCnt> = 'L'
|
|
ProdSpecRec<PROD_SPEC_MET_RUN_STEP$,TestCnt> = 'QA'
|
|
TestCnt += 1
|
|
|
|
IF INDEX(SubstrateInfo,'FLEXUS',1) THEN
|
|
ProdSpecRec<PROD_SPEC_MET_TEST$,TestCnt> = 'FLEXUS'
|
|
ProdSpecRec<PROD_SPEC_MET_INTERVAL$,TestCnt> = '5'
|
|
ProdSpecRec<PROD_SPEC_MET_START$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_SLOT$,TestCnt> = 'A' ;* All Wafers
|
|
ProdSpecRec<PROD_SPEC_MET_RUN_STEP$,TestCnt> = 'QA'
|
|
TestCnt += 1
|
|
END
|
|
|
|
IF ProdSpecRec<PROD_SPEC_LW_RHO_MIN$> NE '' OR ProdSpecRec<PROD_SPEC_LW_RHO_MAX$> NE '' THEN
|
|
|
|
ProdSpecRec<PROD_SPEC_MET_TEST$,TestCnt> = 'LW_RHO'
|
|
ProdSpecRec<PROD_SPEC_MET_MIN$,TestCnt> = ResMin
|
|
ProdSpecRec<PROD_SPEC_MET_MAX$,TestCnt> = ResMax
|
|
ProdSpecRec<PROD_SPEC_MET_INTERVAL$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_START$,TestCnt> = '1'
|
|
ProdSpecRec<PROD_SPEC_MET_SLOT$,TestCnt> = 'L'
|
|
ProdSpecRec<PROD_SPEC_MET_RUN_STEP$,TestCnt> = 'QA'
|
|
TestCnt += 1
|
|
END
|
|
|
|
END
|
|
|
|
|
|
|
|
WRITE ProdSpecRec ON ProdSpecTable,PSNo THEN
|
|
Send_Dyn(PSNo:' ':ReactType:' ':ProdSpecRec<PROD_SPEC_MET_TEST$>:' ':ProdSpecRec<PROD_SPEC_MET_INTERVAL$>:' ':ProdSpecRec<PROD_SPEC_MET_START$>)
|
|
END
|
|
|
|
|
|
|
|
|
|
END
|
|
NEXT I
|
|
|
|
|
|
GOTO Bail
|
|
|
|
|
|
|
|
|
|
RList('SELECT PROD_SPEC WITH SUB_SUPPLIED_BY "C" AND WITH BOM_EPI_PART_NO NE "" AND WITH STATUS = "A"',5)
|
|
|
|
Done = 0
|
|
RecCnt = 0
|
|
|
|
LOOP
|
|
READNEXT PSNo ELSE Done = 1
|
|
UNTIL Done
|
|
READ ProdSpecRec FROM ProdSpecTable,PSNo THEN
|
|
SubPartNos = ProdSpecRec<PROD_SPEC_SUB_PART_NUMS$>
|
|
SubMfgs = ProdSpecRec<PROD_SPEC_SUB_WAFER_MFG$>
|
|
CustNo = ProdSpecRec<PROD_SPEC_CUST_ID$>
|
|
|
|
BOMEpiPartNos = XLATE('PROD_SPEC',PSNo,'BOM_EPI_PART_NO','X')
|
|
EpiPartNo = BOMEpiPartNos<1,1>
|
|
|
|
IF SubPartNos NE '' AND EpiPartNo NE '' AND CustNo NE '' THEN
|
|
READ CustEpiRec FROM CustEpiTable,CustNo:'*':EpiPartNo THEN
|
|
CustEpiRec<CUST_EPI_PART_SUBSTRATE_PART_NO$> = SubPartNos
|
|
CustEpiRec<CUST_EPI_PART_SUBSTRATE_MFR$> = SubMfgs
|
|
WRITE CustEpiRec ON CustEpiTable,CustNo:'*':EpiPartNo THEN
|
|
Send_Dyn(CustNo:'*':EpiPartNo)
|
|
END
|
|
END
|
|
END
|
|
|
|
|
|
END
|
|
REPEAT
|
|
|
|
|
|
GOTO Bail
|
|
|
|
/*
|
|
RList('SELECT PROD_SPEC WITH BOM_NO NE "" AND WITH EPI_PART_NO = "" ',5)
|
|
|
|
SelCnt = @RECCOUNT
|
|
DEBUG
|
|
Done = 0
|
|
RecCnt = 0
|
|
FixCnt = 0
|
|
LOOP
|
|
READNEXT ProdSpecNo ELSE Done = 1
|
|
UNTIL Done
|
|
|
|
READ ProdSpecRec FROM ProdSpecTable,ProdSpecNo THEN
|
|
|
|
BomNo = ProdSpecRec<PROD_SPEC_BOM_NO$,1>
|
|
EpiPartNo = XLATE('BOM',BomNo,BOM_EPI_PART_NO$,'X')
|
|
|
|
ProdSpecRec<PROD_SPEC_EPI_PART_NO$> = EpiPartNo
|
|
|
|
FixCnt += 1
|
|
|
|
*WRITE ProdSpecRec ON ProdSpecTable,ProdSpecNo THEN
|
|
|
|
Send_Dyn(RecCnt:' - ':FixCnt:' ':ProdSpecNo:' BOM: ':BomNo:' -> ':EpiPartNo)
|
|
*END
|
|
|
|
|
|
END ;* End of read
|
|
|
|
REPEAT
|
|
|
|
|
|
GOTO Bail
|
|
*/
|
|
|
|
RList('SELECT PROD_SPEC WITH STATUS = "A" AND WITH EPI_PART_NO NE "" ',5)
|
|
|
|
SelCnt = @RECCOUNT
|
|
DEBUG
|
|
Done = 0
|
|
RecCnt = 0
|
|
FixCnt = 0
|
|
LOOP
|
|
READNEXT ProdSpecNo ELSE Done = 1
|
|
UNTIL Done
|
|
|
|
READ ProdSpecRec FROM ProdSpecTable,ProdSpecNo THEN
|
|
|
|
|
|
obj_Prod_Spec('PushSplit',ProdSpecNo)
|
|
|
|
FixCnt += 1
|
|
|
|
Send_Info(RecCnt:' - ':FixCnt)
|
|
|
|
|
|
END ;* End of read
|
|
|
|
REPEAT
|
|
|
|
|
|
|
|
|
|
* * * * * * *
|
|
Bail:
|
|
* * * * * * *
|
|
|
|
END
|