COMPILE FUNCTION obj_RDS_Makeup(Method,Parms) /* Methods for RDS_Makeup table 09/21/2004 JCH - Initial Coding Properties: Methods: BoxType(RdsNo) ;* Returns 'Makeup Box' or 'Merge Lot' or Null RemMUWafers(SrcRDS,DestRDS,DestSlots) ;* Function returns Source Slots used, DestSlot can be multivalued */ DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Send_Dyn, obj_RDS DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, obj_RDS $INSERT MSG_EQUATES $INSERT RDS_EQU $INSERT RDS_MAKEUP_EQU ErrTitle = 'Error in Stored Procedure "obj_RDS_Makeup"' 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 = 'BoxType' ; GOSUB BoxType CASE Method = 'RemMUWafers' ; GOSUB RemMUWafers CASE Method = 'MUWafersRemoved' ; GOSUB MUWafersRemoved CASE Method = 'MUWafersAdded' ; GOSUB MUWafersAdded CASE 1 END CASE IF ErrorMsg NE '' THEN Set_Status(-1,ErrTitle:@SVM:ErrorMsg) RETURN '' END RETURN Result * * * * * * * RemMUWafers: * * * * * * * * This pulls wafers from SrcRDS and adds logging info to Src RDS record SrcRDS = Parms[1,@RM] DestRDS = Parms[COL2()+1,@RM] DestSlots = Parms[COL2()+1,@RM] IF NOT(ASSIGNED(SrcRDS)) THEN ErrorMsg = 'Unassigned parameter "SrcRDS" passed to routine. (':Method:')' IF NOT(ASSIGNED(DestRDS)) THEN ErrorMsg = 'Unassigned parameter "DestRDS" passed to routine. (':Method:')' IF NOT(ASSIGNED(DestSlots)) THEN ErrorMsg = 'Unassigned parameter "DestSlots" passed to routine. (':Method:')' IF ErrorMsg NE '' THEN RETURN IF SrcRDS = '' THEN ErrorMsg = 'Null parameter "SrcRDS" passed to routine. (':Method:')' IF DestRDS = '' THEN ErrorMsg = 'Null parameter "DestRDS" passed to routine. (':Method:')' IF DestSlots = '' THEN ErrorMsg = 'Null parameter "DestSlots" passed to routine. (':Method:')' IF ErrorMsg NE '' THEN RETURN otParms = 'RDS_MAKEUP':@RM:SrcRDS RdsSrcRec = obj_Tables('ReadRec',otParms) ;* Reads and sets lock IF RdsSrcRec = '' THEN obj_Tables('LockRec',otParms) ;* Set a lock for the new record Set_Status(0) END SchedWfrs = obj_RDS('SchedWfrQty',SrcRds) RejWfrs = obj_RDS('TestRejWfrQty',SrcRds) AvailWfrs = SchedWfrs - RejWfrs IF RdsSrcRec = '' THEN FOR I = 1 TO AvailWfrs RdsSrcRec = (AvailWfrs + 1 - I) NEXT I END SlotCnt = COUNT(DestSlots,@VM) + (DestSlots NE '') FOR I = AvailWfrs TO 1 STEP -1 UNTIL RdsSrcRec = '' NEXT I NextFullSlotPointer = I SrcSlots = '' FOR I = 1 TO SlotCnt NextFullSlotNumber = AvailWfrs - NextFullSlotPointer + 1 SrcSlots<1,I> = NextFullSlotNumber RdsSrcRec = DestSlots<1,I> RdsSrcRec = DestRDS RdsSrcRec = @USER4 RdsSrcRec = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DTM') NextFullSlotPointer -= 1 NEXT I otParms = FIELDSTORE(otParms,@RM,4,0,RdsSrcRec) obj_Tables('WriteRec',otParms) Result = SrcSlots:@FM:OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS') RETURN * * * * * * * BoxType: * * * * * * * RdsNo = Parms[1,@RM] IF NOT(ASSIGNED(RdsNo)) THEN RETURN IF RdsNo = '' THEN RETURN RdsMakeupRec = XLATE('RDS_MAKEUP',RdsNo,'','X') MakeupBoxFlag = XLATE('RDS',RdsNo,RDS_MAKEUP_BOX$,'X') SrcRDS = RdsMakeupRec DestRDS = RdsMakeupRec CONVERT @VM TO '' IN SrcRDS CONVERT @VM TO '' IN DestRDS BEGIN CASE CASE MakeupBoxFlag Result = 'Makeup Box' CASE SrcRDS NE '' Result = 'Merged Lots' CASE DestRDS NE '' Result = 'Makeup Box' CASE 1 Null ;* Result is already set to null END CASE RETURN * * * * * * * MUWafersAdded: * * * * * * * RDSNo = Parms[1,@RM] IF NOT(ASSIGNED(RDSNo)) THEN RETURN IF RDSNo = '' THEN RETURN RDSMakeupSrcRDS = XLATE('RDS_MAKEUP',RDSNo,'2','X') IF RDSMakeupSrcRDS = '' THEN Tmp = '' END ELSE Tmp = 0 FOR I = 1 TO COUNT(RDSMakeupSrcRDS,@VM) + (RDSMakeupSrcRDS NE '') IF RDSMakeupSrcRDS<1,I> NE '' THEN Tmp += 1 NEXT I END Result = Tmp RETURN * * * * * * * MUWafersRemoved: * * * * * * * RDSNo = Parms[1,@RM] IF NOT(ASSIGNED(RDSNo)) THEN RETURN IF RDSNo = '' THEN RETURN RDSMakeupDestRDS = XLATE('RDS_MAKEUP',RDSNo,'4','X') IF RDSMakeupDestRDS = '' THEN Tmp = '' END ELSE Tmp = 0 FOR I = 1 TO COUNT(RDSMakeupDestRDS,@VM) + (RDSMakeupDestRDS NE '') IF RDSMakeupDestRDS<1,I> NE '' THEN Tmp += 1 NEXT I END Result = Tmp RETURN