{ "header": { "version": 1, "type": "record" }, "body": { "record1": { "<1>": "$insert msg_equates\r\n$insert lsl_users_equ\r\n$insert prod_spec_equ\r\n$insert rds_equ\r\n$INSERT REACTOR_EQUATES\r\n$INSERT REACT_RUN_EQUATES\r\n\r\nequ CrLf$ to char(13):char(10)\r\n\r\nEQU COL$MET_TEST\t\tTO 1\t\t;* QA Metrology control on RDS_UNLOAD & RDS_POST_EPI windows\r\nEQU COL$MET_TEST_DESC\tTO 2\r\nEQU COL$MET_SLOT\t\tTO 3\r\nEQU COL$MET_SLOT_DESC\tTO 4\r\nEQU COL$MET_MIN\t\t\tTO 5\r\nEQU COL$MET_MAX\t\t\tTO 6\r\nEQU COL$MET_RESULT\t\tTO 7\r\nEQU COL$MET_SIG\t\t\tTO 8\r\nEQU COL$MET_SIG_DTM\t\tTO 9\r\n\r\n\r\n* Clean Insp Actions\r\n\r\nEQU ACTION$ACTIONS\t\t\t\tTO 1\t;* Data structures for each action\r\nEQU ACTION$SIGS\t\t\t\t\tTO 2\r\nEQU ACTION$SIG_DTMS\t\t\t\tTO 3\r\nEQU ACTION$TOOLS\t\t\t\tTO 4\r\nEQU ACTION$SPEC_CLEAN_TOOL\t\tTO 5\r\nEQU ACTION$SPEC_MICROSCOPE\t\tTO 6\r\nEQU ACTION$SPEC_BRIGHTLIGHT\t\tTO 7\r\nEQU ACTION$SPEC_SURFSCAN_RECIPE\tTO 8\r\n\r\n\r\nDECLARE FUNCTION dialog_box, msg, Get_Status, obj_WO_Mat, Get_Status, obj_Clean_Insp\r\nDECLARE SUBROUTINE record_lock, obj_React_Tube, ErrMsg, obj_WO_Mat_Log, obj_React_Status, obj_WO_Mat, Set_Status\r\n\r\n\r\n\r\n\r\nWONo\t= Get_Property(@WINDOW:'.WO','DEFPROP')\r\nCassNo\t= Get_Property(@WINDOW:'.CASS_NO','DEFPROP')\r\nWOStep\t= Get_Property(@WINDOW:'.WO_STEP','DEFPROP')\r\n \r\nWOMatCurrStatus = obj_WO_Mat('CurrStatus',WONo:'*':CassNo)\r\n\r\nIF WOMatCurrStatus = 'HOLD' THEN\r\n\tErrorMessage = 'Cassette is on Hold and may not be signed off.':CRLF$:CRLF$\r\n\tvoid = Msg(@WINDOW, ErrorMessage, 'PROCESS_SIGNATURE_ERROR')\r\n\tRETURN 0\r\nEND\r\n\r\nRDSId = .rds_no->text\r\n\r\nReactorType = XLATE('RDS',RDSId,'REACTOR_TYPE','X')\r\n\r\nIF ReactorType NE 'EPP' THEN\r\n\tSet_Status(0)\r\n\tobj_WO_Mat('CheckSigOrder',WONo:'*':CassNo:@RM:WOStep:'UNLOAD')\r\n\r\n\tIF Get_Status(errCode) THEN\r\n\t\tErrMsg(errCode)\r\n\t\tRETURN 0\r\n\tEND\r\nEND ELSE\r\n\t\r\n\tReactRunRec = XLATE('REACT_RUN',RDSId,'','X')\r\n\t\r\n\tLOCATE 'LWI' IN ReactRunRec USING @VM SETTING Pos THEN\r\n\t\tCINo = ReactRunRec\r\n\t\t\r\n\t\tActions = obj_Clean_Insp('GetActions',CINo)\r\n\t\t\r\n\t\tLOCATE 'Inspection' IN Actions USING @FM SETTING Pos THEN\r\n\t\t\t\r\n\t\t\tIF Actions = '' THEN\r\n\t\t\t\tErrMsg('A Wafer Inspection is required and has not been completed.')\r\n\t\t\t\tRETURN 0\r\n\t\t\tEND\r\n\t\tEND\r\n\tEND\r\n\r\nEND\t;* End of check for EpiPRO (EPP) reactor type\r\n\r\n\r\n* Met Test completed\r\n\r\nCtrlName = @WINDOW:'.MET_TEST'\r\n\t\r\nMetList = Get_Property(CtrlName,'LIST')\r\n\t\r\nMLCnt = COUNT(MetList,@FM) + (MetList NE '')\r\n\t\r\nFOR Line = 1 TO MLCnt\r\n\tIF MetList NE '' THEN\r\n\t\t\r\n\t\tIF MetList = '' THEN\r\n\t\t\tErrMsg('Required QA Metrology results have not been entered.')\r\n\t\t\tRETURN 0\r\n\t\tEND\r\n\t\t\r\n\t\tIF MetList NE '' AND MetList = '' THEN\r\n\t\t\tErrMsg('One or more QA Metrolgy results are not signed off.')\r\n\t\t\tRETURN 0\r\n\t\tEND\r\n\t\t\r\n\tEND\t;* End of check for a test requirement on the line\r\n\r\nNEXT Line\r\n\r\n*\r\n\r\nReactorType = Get_Property(@WINDOW:'.REACTOR_TYPE','DEFPROP')\t\r\n\r\n \r\nPSNId = .psn->text\r\nPSNRec = xlate( 'PROD_SPEC', PSNId, '', 'X' )\r\n\t \t \r\n* If there are Unload_Ver Instructions then show them\r\n\t \r\nIF PSNRec NE '' THEN\r\n\tYes = Dialog_Box( 'RDS_VER', @window, PSNId:'*':prod_spec_unload_ver_inst$ )\r\n\tIF NOT(Yes) THEN\r\n\t\tRETURN 0\r\n\tEND\r\nEND\r\n\t \r\n* Check for extra unloads without corresponding extra load\r\n\t \r\n\t \r\nRDSId = .rds_no->text\r\nRDSRec = xlate( 'RDS',RDSId , '', 'X' )\r\n\t \r\nIF RDSRec <> '' THEN\r\n\tIF RDSRec = '' THEN\r\n\t\tMsgInfo = ''\r\n\t\tText = 'You have an extra unload defined in the first wafer area, however, ':CrLf$\r\n\t\tText:= 'it must be reloaded there as well...You have the provision of overriding':CrLf$\r\n\t\tText:= 'the date and time in, due to it being forgotten'\r\n\t\tMsgInfo = Text\r\n\t\tMsgInfo = 'H'\r\n\t\tVoid = msg( '', MsgInfo )\r\n\t\tRETURN 0\r\n\tEND\r\nEND\r\n\r\nIF RDSRec <> '' THEN\r\n\tIF RDSRec = '' THEN\r\n\t\tMsgInfo = ''\r\n\t\tText = 'You have a second extra unload defined in the first wafer area, however, ':CrLf$\r\n\t\tText:= 'it must be reloaded there as well...You have the provision of overriding':CrLf$\r\n\t\tText:= 'the date and time in, due to it being forgotten'\r\n\t\tMsgInfo = Text\r\n\t\tMsgInfo = 'H'\r\n\t\tVoid = msg( '', MsgInfo )\r\n\t\tRETURN 0\r\n\tEND\r\nEND\r\n\r\n*\r\n\t \r\nValid = Dialog_Box( 'QUOTE_SIG_PWD_ENTRY', @window, @user4:@vm:xlate( 'LSL_USERS', @user4, lsl_users_password$, 'X' ) )\r\n\r\nIF Valid THEN\r\n\t\t\t\t\t\r\n\tSigDt = OCONV( date(), 'D2/' )\r\n\tSigTm = OCONV( time(), 'MTS' )\r\n\tSigBy = @USER4\r\n\t\t\t\t\t\r\n\tWONo\t\t= Get_Property(@WINDOW:'.WO','DEFPROP')\r\n\tCassNo\t\t= Get_Property(@WINDOW:'.CASS_NO','DEFPROP')\r\n\tWOStep\t\t= Get_Property(@WINDOW:'.WO_STEP','DEFPROP')\r\n\tReactorType\t= Get_Property(@WINDOW:'.REACTOR_TYPE','DEFPROP')\r\n\t\t\t\t\t \r\n\tIF ReactorType NE 'EPP' THEN\r\n\t\t\t\t\t\t\r\n\t\towmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'UNLOAD':@RM:@USER4:@RM:SigDt:' ':SigTm\t\t;* Sets UNLOAD signature\r\n\t\tobj_WO_Mat('SetSignature',owmParms)\r\n\t\t\t\t\t\t\r\n\t\tIF Get_Status(errCode) THEN\r\n\t\t\tCALL ErrMsg(ErrCode)\r\n\t\t\tRETURN 0\r\n\t\tEND\r\n\t\t\t\t\t\t\r\n\t\t**********************************************************************\r\n \t\r\n \tReactor\t\t= Get_Property(@WINDOW:'.REACTOR','DEFPROP')\r\n \t\r\n\t\tReactWH\t\t= XLATE('REACTOR',Reactor,'TOOL_WH','X')\r\n\t\tReactLoc\t= XLATE('REACTOR',Reactor,'TOOL_LOC','X')\r\n \t\r\n \tUnloadDTM = SigDt:' ':SigTm\r\n\t\t\r\n\t\tIF WONo NE '' AND CassNo NE '' THEN\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\tLogFile\t= 'WO_MAT'\t\t\t; WOMLParms = LogFile:@RM\r\n\t\t\tLogDTM\t= UnloadDTM\t\t\t; WOMLParms := LogDTM:@RM\r\n\t\t\tAction\t= WOStep:'UNLOAD'\t; WOMLParms := Action:@RM\r\n\t\t\tWhCd\t= ReactWH\t\t\t; WOMLParms := WhCd:@RM\r\n\t\t\tLocCd\t= ReactLoc\t\t\t; WOMLParms := LocCd:@RM\r\n\t\t\tWONos\t= WONo\t\t\t\t; WOMLParms := WONos:@RM\r\n\t\t\tCassNos\t= CassNo\t\t\t; WOMLParms := CassNos:@RM\r\n\t\t\tUserID\t= @USER4\t\t\t; WOMLParms := UserID:@RM\r\n\t\t\tTags\t= RDSId\t\t\t\t; WOMLParms := Tags:@RM\r\n\t\t\tToolID\t= 'R':Reactor\t\t; WOMLParms := ToolID\r\n\r\n\t\t\tobj_WO_Mat_Log('Create',WOMLParms)\t\t\t;* Add to WO_MAT Event Log\r\n\t\t\t\r\n\t\t\tobj_React_Status('CassUnload',Reactor:@RM:WONo:@RM:CassNo:@RM:UnloadDTM)\r\n\t\t\tIF Get_Status(errCode) THEN ErrMsg(errCode)\r\n\t\r\n\t\tEND\t;* End of check for WONo and CassNo \r\n\t\t\t\t\t\t\t\r\n\tEND\t;* End of check for EpiPRO reactor type\r\n\t\t\t\t\t\r\n\t.op_out->text = SigBy\r\n\t.op_out_name->text = oconv( SigBy, '[XLATE_CONV,LSL_USERS*FIRST_LAST]' )\r\n\t.op_out_date->text = SigDt\r\n\t.op_out_time->text = SigTm\r\n\t \r\n\tCurReactor = .reactor->text\r\n\tInjectors = xlate( 'CONFIG', 'INJECTORS':CurReactor, 1, 'X' )\r\n\tif Injectors <> '' then\r\n \t.injectors->text = Injectors\r\n\tend\r\n\t\r\n\tTubeRec = xlate( 'CONFIG', 'TUBE':CurReactor, '', 'X' )\r\n\tTubeID = TubeRec<1>\r\n\tTubeGrade = TubeRec<2>\r\n\tif TubeID <> '' then\r\n\t\t.tube_id->text = TubeID\r\n\t\t.tube_grade->text = TubeGrade\r\n\tend\r\n\t\r\n\tSusceptorID = xlate( 'CONFIG', 'SUSCEPTOR':CurReactor, 1, 'X' )\r\n\tif SusceptorID <> '' then\r\n\t\t.susceptor_id->text = SusceptorID\r\n\tend\r\n\t*\r\n\t\r\n\tPSNId = .psn->text\r\n\tPSNRec = xlate( 'PROD_SPEC', PSNId, '', 'X' )\r\n\tDopant = xlate( 'PROD_SPEC', PSNId, 'DOPANT_L1', 'X' )\r\n\tRestricter = PSNRec\r\n\tRatios = PSNRec\r\n\tPINSusceptor = PSNRec\r\n\tTubePressure = PSNRec\r\n\topen 'CONFIG' to ConfigTable else\r\n\t\tVoid = msg( '', 'Unable to open config.' )\r\n\t\tRETURN 0\r\n\tend\r\n\t\r\n\tRID = 'RESTRICTER':CurReactor\r\n\trecord_lock( ConfigTable, 'CONFIG', RID )\r\n\twritev Restricter on ConfigTable, RID, 1 else\r\n\t\tVoid = msg( '', 'Unable to write ':RID:' on CONFIG table...' )\r\n\t return 0\r\n\tend\r\n\tunlock ConfigTable, RID else\r\n\t\tVoid = msg( '', 'Unable to unlock ':RID:' on CONFIG table...' )\r\n\t\treturn 0\r\n\tend\r\n\tRID = 'RATIOS':CurReactor\r\n\trecord_lock( ConfigTable, 'CONFIG', RID )\r\n\twritev Ratios on ConfigTable, RID, 1 else\r\n\t\tVoid = msg( '', 'Unable to write ':RID:' on CONFIG table...' )\r\n\t\treturn 0\r\n\tend\r\n\tunlock ConfigTable, RID else\r\n\t\tVoid = msg( '', 'Unable to unlock ':RID:' on CONFIG table...' )\r\n\t\treturn 0\r\n\tend\r\n\tRID = 'PIN_SUSCEPTOR':CurReactor\r\n\trecord_lock( ConfigTable, 'CONFIG', RID )\r\n\twritev PinSusceptor on ConfigTable, RID, 1 else\r\n\t\tVoid = msg( '', 'Unable to write ':RID:' on CONFIG table...' )\r\n\t\treturn 0\r\n\tend\r\n\tunlock ConfigTable, RID else\r\n\t\tVoid = msg( '', 'Unable to unlock ':RID:' on CONFIG table...' )\r\n\t\treturn 0\r\n\tend\r\n\tRID = 'TUBE_PRESSURE':CurReactor\r\n\trecord_lock( ConfigTable, 'CONFIG', RID )\r\n\twritev TubePressure on ConfigTable, RID, 1 else\r\n\t\tVoid = msg( '', 'Unable to write ':RID:' on CONFIG table...' )\r\n\t\treturn 0\r\n\tend\r\n\tunlock ConfigTable, RID else\r\n\t\tVoid = msg( '', 'Unable to unlock ':RID:' on CONFIG table...' )\r\n\t\treturn 0\r\n\tend\r\n\tRID = 'DOPANT':CurReactor\r\n\trecord_lock( ConfigTable, 'CONFIG', RID )\r\n\twritev Dopant on ConfigTable, RID, 1 else\r\n\t\tVoid = msg( '', 'Unable to write ':RID:' on CONFIG table...' )\r\n\t\treturn 0\r\n\tend\r\n\tunlock ConfigTable, RID else\r\n\t\tVoid = msg( '', 'Unable to unlock ':RID:' on CONFIG table...' )\r\n\t\treturn 0\r\n\tend\r\n\t*\r\n\t@@window->savewarn = 1\r\n\t\r\n\tCtrls = @WINDOW:'.REACTOR':@RM:@WINDOW:'.WAFERS_SCHEDULED'\t\t;* Added 10/31/2005 JCH - J.C. Henry & Co., Inc.\r\n\tProps = 'TEXT':@RM:'TEXT'\r\n\tVals = Get_Property(Ctrls,Props)\r\n\t\t\r\n\tobj_React_Tube('ReactUnload',Vals)\r\n\t\t\t \t\t\r\n\tIF Get_Status(errCode) THEN ErrMsg(errCode)\r\n\r\nEND\r\n\r\n\r\nRETURN 0" } } }