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

797 lines
21 KiB
Plaintext

COMPILE FUNCTION EPI_Part(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5)
#pragma precomp SRP_PreCompiler
/*
Commuter module for EPI_Part window
02/18/2011 - 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 Set_List_Box_Data, obj_Epi_Part, Epi_Part_Services
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Utility, Popup, Collect.Ixvals, obj_Popup, Epi_Part_Services
DECLARE FUNCTION Send_Message, Msg, Security_Check, obj_React_Run_CI, Select_Into, obj_EPI_Part, obj_Prod_Spec, MemberOf
$INSERT MSG_EQUATES
$INSERT APPCOLORS
$INSERT LSL_USERS_EQU
$INSERT SECURITY_RIGHTS_EQU
$INSERT REACT_EVENT_EQUATES
$INSERT POPUP_EQUATES
$INSERT LOGICAL
$INSERT RTI_STYLE_EQUATES
$INSERT CUST_EPI_PART_EQUATES
$INSERT PROD_VER_EQUATES
$INSERT PRS_LAYER_EQU
$INSERT PROD_SPEC_EQUATES
$Insert EPI_PART_EQUATES
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
EQU CRLF$ TO \0D0A\
EQU TAB$ TO \09\
EQU COL$LAYER TO 1
EQU COL$STEP TO 2
EQU COL$STEP_LS_ID TO 3
EQU COL$DOPANT TO 4
EQU COL$THICK_MIN TO 5
EQU COL$THICK_MAX TO 6
EQU COL$THICK_TARGET TO 7
EQU COL$RES_MIN TO 8
EQU COL$RES_MAX TO 9
EQU COL$RES_TARGET TO 10
EQU COL$PROD_VER_NO TO 1
EQU COL$PROD_VER_DESC TO 2
EQU COL$REACT_TYPE TO 3
EQU COL$SHIP_PSN TO 4
EQU COL$PROD_VER_SUB_PART_NO TO 5
EQU COL$PROD_VER_CUST_NO TO 6
EQU COL$PROD_VER_CUST_PART_NO TO 7
EQU COL$THIN_EPI_THICK TO 8
EQU COL$THICK_EPI_THICK TO 9
EQU COL$PART_STATUS TO 10
EQU COL$PSN_STATUS TO 11
EQU COL$TYPE_CODE TO 1
EQU COL$TYPE_DESC TO 2
EQU COL$TYPE_SIG TO 3
EQU COL$TYPE_SIG_DTM TO 4
EQU COL$CUST_NO TO 1
EQU COL$DUMMY_1_PIXEL_WIDE TO 1 ;* Used for both INSP_SPEC and INSP controls
EQU HIDDEN$ TO 32
EQU SKIPPED$ TO 4100
ErrTitle = 'Error in EPI_Part'
ErrorMsg = ''
ErrCode = ''
Result = ''
BEGIN CASE
CASE EntID = @WINDOW
BEGIN CASE
CASE Event = 'CLEAR' ; GOSUB Clear
CASE Event = 'CREATE' ; GOSUB Create
CASE Event = 'CLOSE' ; GOSUB Close
CASE Event = 'READ' ; GOSUB Read
CASE Event = 'WRITE' ; GOSUB Write
CASE Event[1,3] = 'QBF' ; GOSUB Refresh
END CASE
CASE EntID = @WINDOW:'.LU_EPI_PART_NO' AND Event = 'CLICK' ; GOSUB LUEpiPartNo
CASE EntID = @WINDOW:'.TAB_CONTROL' AND Event = 'CLICK' ; GOSUB TabClick
CASE EntID = @WINDOW:'.NAVIGATOR'
BEGIN CASE
CASE Event = 'DBLCK'
GOSUB NavigatorDC
END CASE
CASE EntID = @WINDOW:'.PROD_VER_NO'
BEGIN CASE
CASE Event = 'POSCHANGED' ; GOSUB ProdVerPC
CASE Event = 'DBLCLK' ; GOSUB ProdVerDC
END CASE
CASE EntID = @WINDOW:'.CUST_NO'
BEGIN CASE
CASE Event = 'DBLCLK' ; GOSUB CustNoDC
END CASE
CASE EntID = @WINDOW:'.INACTIVE_PROD_VER'
BEGIN CASE
CASE Event = 'DBLCLK' ; GOSUB InactiveProdVerDC
END CASE
CASE EntID = @WINDOW:'.SUB_WAFER_SIZE' AND Event = 'GOTFOCUS' ; GOSUB SubSizeGF
CASE EntID = @WINDOW:'.LOAD_LAYERS' AND Event = 'CLICK' ; GOSUB LoadLayers
CASE EntID = @WINDOW:'.LU_SIZE' AND Event = 'CLICK' ; GOSUB LUSubSize
Case EntID = @Window : '.MPW_ASM_SCHEDULER' AND Event = 'LOSTFOCUS' ; GoSub MPW_ASM_SCHEDULER.LOSTFOCUS
Case EntID = @Window : '.MPW_ASM_PLUS_SCHEDULER' AND Event = 'LOSTFOCUS' ; GoSub MPW_ASM_PLUS_SCHEDULER.LOSTFOCUS
Case EntID = @Window : '.MPW_HTR_SCHEDULER' AND Event = 'LOSTFOCUS' ; GoSub MPW_HTR_SCHEDULER.LOSTFOCUS
Case EntID = @Window : '.MPW_EPIPRO_SCHEDULER' AND Event = 'LOSTFOCUS' ; GoSub MPW_EPIPRO_SCHEDULER.LOSTFOCUS
Case EntID = @Window : '.MPW_GAN_SCHEDULER' AND Event = 'LOSTFOCUS' ; GoSub MPW_GAN_SCHEDULER.LOSTFOCUS
CASE 1
ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter'
ErrMsg(ErrorMsg)
END CASE
IF ErrorMsg NE '' THEN
ErrMsg(ErrTitle:@SVM:ErrorMsg)
END
RETURN Result
* * * * * * *
Create:
* * * * * * *
obj_Appwindow('Create',@WINDOW)
if (MemberOf(@USER4,'EXPORT_CONTROL_ADMINS')) then
Set_Property(@WINDOW:'.EXPORT_CONTROL','VISIBLE',1)
end else
Set_Property(@WINDOW:'.EXPORT_CONTROL','VISIBLE',0)
end
obj_Appwindow('SetDropDowns')
* Set result table special styles (Dropdowns)
LayerStyles = Send_Message(@WINDOW:'.LAYER_SPEC','COLSTYLE',0,'')
LayerStyles<COL$DOPANT> = BitOr(LayerStyles<COL$DOPANT>,DTCS_DROPDOWN$)
Send_Message(@WINDOW:'.LAYER_SPEC','COLSTYLE',0,LayerStyles)
Dopants = XLATE('LISTBOX_CONFIG','DOPANT','','X')
Send_Message(@WINDOW:'.LAYER_SPEC','COLFORMAT',COL$DOPANT,Dopants)
If Parm1 NE '' then
EpiPart = Parm1[1, '*']
Set_Property(@Window : '.EPI_PN', 'TEXT', EpiPart)
Post_Event(@Window, 'READ')
end else
GOSUB Refresh
end
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:
* * * * * * *
EpiPN = Get_Property(@WINDOW:'.EPI_PN','DEFPROP')
EpiPartDesc = Get_Property(@WINDOW:'.EPI_PART_DESC','DEFPROP')
IF EpiPartDesc NE '' THEN
EpiPart = EpiPN:' - ':EpiPartDesc
END ELSE
EpiPart = EpiPN
END
NavList = ''
IF EpiPart NE '' THEN
NavList<1> = '1-1:':EpiPart
END
* SAP Substrate Section
SubParts = ''
SubPartList = Get_Property(@WINDOW:'.SUB_PART_NO','LIST')
SubCnt = COUNT(SubPartList,@FM) + (SubPartList NE '')
FOR I = 1 TO SubCnt
IF SubPartList<I,1> NE '' THEN
SubParts<-1> = '7-3:':SubPartList<I,1>:' - ':SubPartList<I,3>
END
NEXT I
IF SubParts NE '' THEN
NavList := @FM:'2-2:SAP Substrates':@FM:SubParts
END
* Customer Section
CustList = Get_Property(@WINDOW:'.CUST_NO','LIST')
CustCount = COUNT(CustList,@FM) + (CustList NE '')
FOR I = 1 TO CustCount
IF CustList<I,1> NE '' THEN
IF I = 1 THEN
NavList := @FM:'2-2:Customers'
END
CustNo = CustList<I,1>
CustEpiPartRec = XLATE('CUST_EPI_PART',CustNo:'*':EpiPN,'','X')
CustPNs = CustEpiPartRec<CUST_EPI_PART_CUST_PART_NO$>
CustPNCnt = COUNT(CustPNs,@VM) + (CustPNs NE '')
CustParts = ''
FOR N = 1 TO CustPNCnt
CustParts := @FM:'7-5:':CustPNs<1,N>
IF CustEpiPartRec<CUST_EPI_PART_CUST_PART_NO_INBOUND$,N> NE '' THEN
CustParts := ' - Inbound: ':CustEpiPartRec<CUST_EPI_PART_CUST_PART_NO_INBOUND$,N>
END
NEXT N
NavList := @FM:'3-3:':CustList<I,1>:' - ':CustList<I,2>
IF CustParts NE '' THEN
NavList := @FM:'4-4:Customer Part Nos'
NavList := CustParts
END
* Substrate Part No's
CustSubPNs = CustEpiPartRec<CUST_EPI_PART_SUBSTRATE_PART_NO$>
CustSubPNCnt = COUNT(CustSubPNs,@VM) + (CustSubPNs NE '')
CustSubParts = ''
FOR N = 1 TO CustSubPNCnt
CustSubParts := @FM:'5-5:':CustSubPNs<1,N>
IF CustEpiPartRec<CUST_EPI_PART_SUBSTRATE_MFR$,N> NE '' THEN
CustSubParts := ' - ':CustEpiPartRec<CUST_EPI_PART_SUBSTRATE_MFR$,N>
END
NEXT N
IF CustSubParts NE '' THEN
NavList := @FM:'4-4:Direct From Customer Substrate Part Nos'
NavList := CustSubParts
END
END; * End of check for null Customer
NEXT I
ProdVerList = Get_Property(@WINDOW:'.PROD_VER_NO','LIST')
ProdVerCnt = COUNT(ProdVerList,@FM) + (ProdVerList NE '')
ProdVerSort = ''
ProdVerKeys = ''
FOR I = 1 TO ProdVerCnt
ProdVerNo = ProdVerList<I,COL$PROD_VER_NO>
IF ProdVerNo NE '' THEN
CustNo = ProdVerList<I,COL$PROD_VER_CUST_NO>
ReactType = ProdVerList<I,COL$REACT_TYPE>
SubPN = ProdVerList<I,COL$PROD_VER_SUB_PART_NO>
SortKey = CustNo:'*':ReactType:'*':SubPN
LOCATE SortKey IN ProdVerSort BY 'AL' USING @FM SETTING Pos ELSE
ProdVerSort = INSERT(ProdVerSort,Pos,0,0,SortKey)
ProdVerKeys = INSERT(ProdVerKeys,Pos,0,0,ProdVerNo)
END
END ;* End of check for null ProdVerNo
NEXT I
ProdVerKeyCnt = COUNT(ProdVerKeys,@FM) + (ProdVerKeys NE '')
ProdVers = ''
IF ProdVerKeyCnt > 0 THEN
NavList := @FM:TAB$:@FM:'2-2:Production Versions'
END
SpecList = '' ;* Tree of specification data
ReactTypeArray = '' ;* ReactType:'*':StepNo
ReactDataArray = ''
FOR I = 1 TO ProdVerKeyCnt
ProdVerKey = ProdVerKeys<I>
ProdVerRec = XLATE('PROD_VER',ProdVerKey,'','X')
ReactType = OCONV(ProdVerRec<PROD_VER_REACT_TYPE$>,'[REACT_TYPE_CONV,OPSREF]')
NavList := @FM:'5-3:':ProdVerKey:TAB$:ReactType:TAB$:FMT(ProdVerRec<PROD_VER_DESC$>,"L#25"):TAB$
StepIDs = XLATE('PROD_VER',ProdVerKey,'PROC_STEP_ID','X')
StepPSNs = XLATE('PROD_VER',ProdVerKey,'PROC_STEP_PSN','X')
StepTypes = XLATE('PROD_VER',ProdVerKey,'PROC_STEP_LAYER_TYPE','X')
StepCnt = COUNT(StepIDs,@VM) + (StepIDs NE '')
IF StepCnt > 0 THEN
NewRDFlag = 0
FOR N = 1 TO StepCnt
StepID = StepIDs<1,N>
StepPSN = StepPSNs<1,N>
NavList := 'Step ':StepID:' - ':StepPSN:' - ':StepTypes<1,N>
IF N NE StepCnt THEN
NavList := '/'
END
LOCATE ReactType:'*':StepID IN ReactTypeArray BY 'AR' USING @FM SETTING RTPos ELSE
ReactTypeArray = INSERT(ReactTypeArray,RTPos,0,0,ReactType:'*':StepID)
IF SpecList = '' THEN
SpecList = 'Reactor Type'
END ELSE
SpecList := @FM:'ReactorType'
END
NewRDFlag = 1
END
NEXT N
END ;* End of check for StepCnt > 0
NEXT I
NavList := @FM:'2-2:Specification':ReactDataArray
Set_Property(@WINDOW:'.NAVIGATOR', 'LIST', NavList)
Send_Message(@WINDOW:'.NAVIGATOR', 'EXPAND', 0, 6)
* 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)
SpecCtrl = @WINDOW:'.LAYER_SPEC'
LSList = Get_Property(SpecCtrl,'LIST')
LSCnt = COUNT(LSList,@FM) + (LSList NE '')
FOR Line = 1 TO LSCnt
BEGIN CASE
CASE LSList<Line,COL$STEP_LS_ID> = 'L1' ; LineColor = LS1_GREEN$
CASE LSList<Line,COL$STEP_LS_ID> = 'L2' ; LineColor = LS2_GREEN$
CASE LSList<Line,COL$STEP_LS_ID> = 'L3' ; LineColor = LS3_GREEN$
CASE LSList<Line,COL$LAYER> = 'CMB' ; LineColor = CMB_YELLOW$
CASE 1 ;LineColor = WHITE$
END CASE
stat = Send_Message(SpecCtrl,'COLOR_BY_POS',0,Line,LineColor)
NEXT Line
* 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>
ETList = Get_Property(ETCtrl,'LIST')
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
IF ETList<Line,1> NE '' THEN
IF ETCtrl = 'EPI_PART.PROD_VER_NO' OR ETCtrl = 'EPI_PART.INACTIVE_PROD_VER' THEN
IF ETList<Line,COL$PART_STATUS> = 'A' AND ETList<Line,COL$PSN_STATUS> = 'A' THEN
LineColor = GREEN$
END ELSE
LineColor = RED$
END
END ELSE
LineColor = GREEN$
END
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,LineColor)
NEXT N
END
NEXT I
NEXT I
// Scheduler tab data and calculations.
MPWScheduler = Get_Property(@Window : '.MINUTES_PER_WAFER_SCHEDULER', 'ARRAY')
MPWASMScheduler = MPWScheduler<0, 1>
MPWASMPlusScheduler = MPWScheduler<0, 2>
MPWHTRScheduler = MPWScheduler<0, 3>
MPWEpiProScheduler = MPWScheduler<0, 4>
MPWGaNScheduler = MPWScheduler<0, 5>
Set_Property(@Window : '.MPW_ASM_SCHEDULER', 'INVALUE', MPWASMScheduler)
Set_Property(@Window : '.MPW_ASM_PLUS_SCHEDULER', 'INVALUE', MPWASMPlusScheduler)
Set_Property(@Window : '.MPW_HTR_SCHEDULER', 'INVALUE', MPWHTRScheduler)
Set_Property(@Window : '.MPW_EPIPRO_SCHEDULER', 'INVALUE', MPWEpiProScheduler)
Set_Property(@Window : '.MPW_GAN_SCHEDULER', 'INVALUE', MPWGaNScheduler)
GoSub Calculate_WPD
RETURN
* * * * * * *
Read:
* * * * * * *
GOSUB Refresh
RETURN
* * * * * * *
Write:
* * * * * * *
// Scheduler tab data and calculations.
MPWASMScheduler = Get_Property(@Window : '.MPW_ASM_SCHEDULER', 'INVALUE')
MPWASMPlusScheduler = Get_Property(@Window : '.MPW_ASM_PLUS_SCHEDULER', 'INVALUE')
MPWHTRScheduler = Get_Property(@Window : '.MPW_HTR_SCHEDULER', 'INVALUE')
MPWEpiProScheduler = Get_Property(@Window : '.MPW_EPIPRO_SCHEDULER', 'INVALUE')
MPWGaNScheduler = Get_Property(@Window : '.MPW_GAN_SCHEDULER', 'INVALUE')
MPWScheduler = ''
MPWScheduler<0, 1> = MPWASMScheduler
MPWScheduler<0, 2> = MPWASMPlusScheduler
MPWScheduler<0, 3> = MPWHTRScheduler
MPWScheduler<0, 4> = MPWEpiProScheduler
MPWScheduler<0, 5> = MPWGaNScheduler
Set_Property(@Window : '.MINUTES_PER_WAFER_SCHEDULER', 'ARRAY', MPWScheduler)
Forward_Event()
Post_Event(@WINDOW,'CLOSE')
Result = 0
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
* * * * * * *
LUEpiPartNo:
* * * * * * *
EpiPartNos = Popup(@WINDOW,'','EPI_PART_NOS')
IF EpiPartNos NE '' THEN
IF INDEX(EpiPartNos,@VM,1) THEN
Send_Event(@WINDOW,'QBFINIT')
Set_Property(@WINDOW,'QBFLIST',EpiPartNos)
Send_Event(@WINDOW,'QBFFIRST')
END ELSE
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:EpiPartNos)
END
END
RETURN
* * * * * * *
TabClick:
* * * * * * *
IF Parm1 NE '' THEN
Page = Parm1
END ELSE
Page = Get_Property(@WINDOW:'.TAB_CONTROL','VALUE')
END
Set_Property(@WINDOW,'VPOSITION',Page)
RETURN
* * * * * * *
ProdVerDC:
* * * * * * *
EpiPartNo = Get_Property(@WINDOW:'.EPI_PN','TEXT')
CtrlEntID = @WINDOW:'.PROD_VER_NO'
CurrPos = Get_Property(CtrlEntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
IF CurrCol = COL$PROD_VER_NO THEN
ProdVerNo = Get_Property(CtrlEntID,'CELLPOS',COL$PROD_VER_NO:@FM:CurrRow)
IF EpiPartNo NE '' THEN
CardWindow = 'PROD_VER'
CardKey = ProdVerNo
DefaultRec = ''
NewCardCtrl = ''
RecalcCtrl = CtrlEntID
RecalcPos = CurrPos
RetCtrl = CtrlEntID
RetPos = CurrPos
oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
obj_AppWindow('ViewNewCard',oAParms)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
END
END ;* End of ItemNo column
RETURN
* * * * * * *
ProdVerPC:
* * * * * * *
RETURN
* * * * * * *
InactiveProdVerDC:
* * * * * * *
EpiPartNo = Get_Property(@WINDOW:'.EPI_PN','TEXT')
CtrlEntID = @WINDOW:'.INACTIVE_PROD_VER'
CurrPos = Get_Property(CtrlEntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
IF CurrCol = COL$PROD_VER_NO THEN
ProdVerNo = Get_Property(CtrlEntID,'CELLPOS',COL$PROD_VER_NO:@FM:CurrRow)
IF EpiPartNo NE '' THEN
CardWindow = 'PROD_VER'
CardKey = ProdVerNo
DefaultRec = ''
NewCardCtrl = ''
RecalcCtrl = CtrlEntID
RecalcPos = CurrPos
RetCtrl = CtrlEntID
RetPos = CurrPos
oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
obj_AppWindow('ViewNewCard',oAParms)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
END
END ;* End of ItemNo column
RETURN
* * * * * * *
CustNoDC:
* * * * * * *
EpiPartNo = Get_Property(@WINDOW:'.EPI_PN','TEXT')
CtrlEntID = @WINDOW:'.CUST_NO'
CurrPos = Get_Property(CtrlEntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
IF CurrCol = COL$CUST_NO THEN
CustNo = Get_Property(CtrlEntID,'CELLPOS',COL$CUST_NO:@FM:CurrRow)
IF EpiPartNo NE '' THEN
CardWindow = 'CUST_EPI_PART'
CardKey = CustNo:'*':EpiPartNo
DefaultRec = ''
NewCardCtrl = ''
RecalcCtrl = CtrlEntID
RecalcPos = CurrPos
RetCtrl = CtrlEntID
RetPos = CurrPos
oAParms = CardWindow:@RM:CardKey:@RM:DefaultRec:@RM:NewCardCtrl:@RM:RecalcCtrl:@RM:RecalcPos:@RM:RetCtrl:@RM:RetPos
obj_AppWindow('ViewNewCard',oAParms)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
END
END ;* End of ItemNo column
RETURN
* * * * * * *
Close:
* * * * * * *
*obj_Notes('Inbox',@USER4) ;* Checks for any new messages
obj_Appwindow('DetailReturn')
RETURN
* * * * * * *
LoadLayers:
* * * * * * *
EpiPartNo = Get_Property(@WINDOW:'.EPI_PN','DEFPROP')
Send_Event(@WINDOW,'WRITE')
obj_EPI_Part('LoadLayers',EpiPartNo)
Set_Property(@WINDOW:'.EPI_PN','DEFPROP',EpiPartNo)
Send_Event(@WINDOW:'.EPI_PN','LOSTFOCUS')
RETURN
* * * * * * *
SubSizeGF:
* * * * * * *
SubSize = Get_Property(@WINDOW:'.SUB_WAFER_SIZE','DEFPROP')
IF SubSize NE '' THEN
IF SubSize MATCHES "2N' mm '1N' in'" OR SubSize MATCHES "3N' mm '1N' in'" THEN
RETURN
END ELSE
ErrMsg('Application Message':@SVM:'Invalid data format entered. Select from following popup.')
END
END
* Proceed to Popup with options
* * * * * * *
LUSubSize:
* * * * * * *
RetVal = Popup(@WINDOW,'','SUBSTRATE_SIZE')
IF RetVal NE '' THEN
oaParms = RetVal:@RM:@WINDOW:'.SUB_WAFER_SIZE'
obj_Appwindow('LUValReturn',oaParms)
END
RETURN
* * * * * * * *
NavigatorDC:
* * * * * * * *
RETURN
MPW_ASM_SCHEDULER.LOSTFOCUS:
GoSub Calculate_WPD
return
MPW_ASM_PLUS_SCHEDULER.LOSTFOCUS:
GoSub Calculate_WPD
return
MPW_HTR_SCHEDULER.LOSTFOCUS:
GoSub Calculate_WPD
return
MPW_EPIPRO_SCHEDULER.LOSTFOCUS:
GoSub Calculate_WPD
return
MPW_GAN_SCHEDULER.LOSTFOCUS:
GoSub Calculate_WPD
return
Calculate_WPD:
EpiPartNo = Get_Property(@Window : '.EPI_PN', 'TEXT')
MPWCtrls = 'MPW_ASM_SCHEDULER,MPW_ASM_PLUS_SCHEDULER,MPW_HTR_SCHEDULER,MPW_EPIPRO_SCHEDULER,MPW_GAN_SCHEDULER'
For Each MPWCtrl in MPWCtrls using ',' setting cPos
MPWValue = Get_Property(@Window : '.' : MPWCtrl, 'DEFPROP')
ReactorType = Field('ASM,ASM+,HTR,EpiPro,GaN', ',', cPos, 1)
If MPWValue NE '' then
WPDIdeal = Epi_Part_Services('GetIdealWafersPerDayScheduler', EpiPartNo, ReactorType, MPWValue)
end else
WPDIdeal = ''
end
WPDCtrl = MPWCtrl
Swap 'MPW' with 'WPD' in WPDCtrl
Set_Property(@Window : '.' : WPDCtrl, 'DEFPROP', WPDIdeal)
If MPWValue NE '' then
WPDAdjusted = Epi_Part_Services('GetAdjustedWafersPerDayScheduler', EpiPartNo, ReactorType, MPWValue)
end else
WPDAdjusted = ''
end
WPDCtrl = MPWCtrl
Swap 'MPW' with 'WPDA' in WPDCtrl
Set_Property(@Window : '.' : WPDCtrl, 'DEFPROP', WPDAdjusted)
Next MPWCtrl
return