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

370 lines
7.9 KiB
Plaintext

COMPILE FUNCTION obj_TW_Use(Method,Parms)
/*
Methods for TW_USE table
07/21/2010 JCH - Initial Coding
Properties:
Methods:
Load(DataStruct) ;* Loads TW_USE table from RDS_TES
*/
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, obj_Notes, ErrMsg, RList, Send_Dyn, Send_Info
DECLARE SUBROUTINE Btree.Extract
$INSERT RDS_TEST_EQUATES
$INSERT TW_USE_EQUATES
$INSERT RLIST_EQUATES
EQU COL$TW_QTY TO 1 ;* Used for conversion process from RDS_TEST
EQU COL$TW_CODE TO 2
EQU COL$TW_USAGE_DESC TO 3
EQU COL$TW_TOOL TO 4
EQU COL$TW_TYPE TO 5
EQU COL$TW_SIG TO 6
EQU COL$TW_SIG_DTM TO 7
EQU COL$TW_HRS_SINCE_PROD TO 8
EQU COL$TW_HRS_ESC TO 9
EQU COL$TW_WAFER_ID TO 10
EQU COL$TW_USE_ID TO 11
ErrTitle = 'Error in Stored Procedure "obj_TW_Use"'
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 = 'Copy' ; GOSUB Copy
CASE Method = 'Load' ; GOSUB Load
CASE Method = 'Convert' ; GOSUB Convert
CASE 1
END CASE
IF ErrorMsg NE '' THEN
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
RETURN ''
END
RETURN Result
* * * * * * *
Copy:
* * * * * * *
MetNo = Parms[1,@RM]
NewTWUseNo = Parms[COL2()+1,@RM]
OrgTWUseNo = Parms[COL2()+1,@RM]
IF MetNo = '' THEN ErrorMsg = 'Null Parameter "MetNo" passed to routine. (':Method:')'
IF NewTWUseNo = '' THEN ErrorMsg = 'Null Parameter "NewTWUseNo" passed to routine. (':Method:')'
IF OrgTWUseNo = '' THEN ErrorMsg = 'Null Parameter "OrgTWUseNo" passed to routine. (':Method:')'
IF ErrorMsg NE '' THEN RETURN
OrgRec = XLATE('TW_USE',MetNo:'*':OrgTWUseNo,'','X')
IF OrgRec ='' THEN
ErrorMsg = 'Original TW_USE Record not found ':QUOTE(MetNo:'*':OrgTWUseNo):'.'
RETURN
END
OrgRec<TW_USE_SIGNATURE$> = ''
OrgRec<TW_USE_SIG_DTM$> = ''
TWUseKey = MetNo:'*':NewTWUseNo
obj_Tables('WriteRec','TW_USE':@RM:TWUseKey:@RM:@RM:OrgRec)
RETURN
* * * * * * *
Load:
* * * * * * *
OPEN 'RDS_TEST' TO MetTable ELSE
DEBUG
RETURN
END
OPEN 'TW_USE' TO TestWfrTable ELSE
DEBUG
RETURN
END
*SelectSent = 'SELECT RDS_TEST 512775'
SelectSent = 'SELECT RDS_TEST WITH TW_SIG_DT FROM "3/28/2011" TO "4/2/2011"'
RList(SelectSent,TARGET_ACTIVELIST$,'','','')
debug
IF Get_Status(ErrCode) THEN DEBUG
TotRecCnt = @RECCOUNT
RecCnt = 0
Done = 0
LOOP
READNEXT MetNo ELSE Done = 1
UNTIL Done
READ MetRec FROM MetTable,MetNo THEN
RecCnt += 1
TWCnt = COUNT(MetRec<RDS_TEST_TW_CNT$>,@VM) + (MetRec<RDS_TEST_TW_CNT$> NE '')
TWList = ''
FOR Line = 1 TO TWCnt
TWList<Line,COL$TW_QTY> = MetRec<RDS_TEST_TW_CNT$,Line>
TWList<Line,COL$TW_CODE> = MetRec<RDS_TEST_TW_CODE$,Line>
TWList<Line,COL$TW_USAGE_DESC> = ''
TWList<Line,COL$TW_TOOL> = MetRec<RDS_TEST_TW_TOOL$,Line>
TWList<Line,COL$TW_TYPE> = MetRec<RDS_TEST_TW_TYPE$,Line>
TWList<Line,COL$TW_SIG> = MetRec<RDS_TEST_TW_SIG$,Line>
TWList<Line,COL$TW_SIG_DTM> = OCONV(MetRec<RDS_TEST_TW_SIG_DTM$,Line>,'DT/^S')
TWList<Line,COL$TW_HRS_SINCE_PROD> = MetRec<RDS_TEST_TW_HRS_SINCE_PROD$,Line>
TWList<Line,COL$TW_HRS_ESC> = MetRec<RDS_TEST_TW_HRS_ESC$,Line>
TWList<Line,COL$TW_WAFER_ID> = MetRec<RDS_TEST_TW_WAFER_ID$,Line>
TWList<Line,COL$TW_USE_ID> = MetRec<RDS_TEST_TW_USE_ID$,Line>
NEXT Line
GOSUB Convert
MetRec<RDS_TEST_TW_USE_ID$> = Result
WRITE MetRec ON MetTable,MetNo THEN
Send_Info(RecCnt:'/':TotRecCnt:' ':MetNo:' - Written')
END
END ;* End of MetRec read
REPEAT
RETURN
* * * * * * *
Convert:
* * * * * * *
IF NOT(Assigned(MetNo)) THEN
MetNo = Parms[1,@RM]
END
IF NOT(Assigned(TWList)) THEN
TWList = Parms[COL2()+1,@RM]
END
ListCnt = COUNT(TWList,@FM) + (TWList NE '')
RowCnt = ListCnt
LOOP
TWLine = TWList<RowCnt>
CONVERT @VM TO '' IN TWLine
UNTIL TWLine NE '' OR TWList = ''
TWList = DELETE(TWList,RowCnt,0,0) ;* Strip empty lines from display List
RowCnt -= 1
REPEAT
TWArray = ''
FOR I = 1 TO RowCnt
FOR N = COL$TW_QTY TO COL$TW_USE_ID
TWArray<N,I> = TWList<I,N> ;* Build an 'ARRAY' from the 'LIST'
NEXT N
NEXT I
UseIDs = TWArray<COL$TW_USE_ID>
TWCodes = TWArray<COL$TW_CODE>
LastSeq = 0
Pos = 1
Flag = ""
LOOP
REMOVE UseID FROM UseIds AT Pos SETTING Flag
WHILE Flag
SeqNo = UseID[-1,'B*']
IF SeqNo > LastSeq THEN LastSeq = SeqNo
REPEAT
NextSeq = LastSeq + 1 ;* Highest number used in keys (Position in the array doesn't count)
OPEN 'DICT.TW_USE' TO DictTWUse ELSE
ErrorMsg = 'Unable to open DICT.TW_USE in obj_TW_Use Convert method.'
RETURN
END
OPEN 'TW_USE' TO TWUseFile ELSE
ErrorMsg = 'Unable to open TW_USE in obj_TW_Use Convert method.'
RETURN
END
SearchString = 'MET_NO':@VM:MetNo:@FM
Option = ''
Flag = ''
Set_Status(0)
Btree.Extract(SearchString,'TW_USE',DictTWUse,CurrUseIDs,Option,Flag)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
BuildKeys = ''
DeleteKeys = ''
FOR I = 1 TO RowCnt
UseID = UseIDs<1,I>
IF CurrUseIDs = '' THEN
BuildKeys<1,I> = MetNo:'*':NextSeq
NextSeq += 1
END ELSE
LOCATE UseID IN CurrUseIDs USING @VM SETTING Pos THEN
BuildKeys<1,I> = ''
READ TWUseRec FROM TWUseFile,UseID THEN
OrgTWUseRec = TWUseRec
TWUseRec<TW_USE_TW_QTY$> = TWArray<COL$TW_QTY,I>
TWUseRec<TW_USE_TW_USE_CODE$> = TWArray<COL$TW_CODE,I>
TWUseRec<TW_USE_TOOL$> = TWArray<COL$TW_TOOL,I>
TWUseRec<TW_USE_TW_TYPE$> = TWArray<COL$TW_TYPE,I>
TWUseRec<TW_USE_SIGNATURE$> = TWArray<COL$TW_SIG,I>
TWUseRec<TW_USE_SIG_DTM$> = ICONV(TWArray<COL$TW_SIG_DTM,I>,'DT')
TWUseRec<TW_USE_HRS_SINCE_PROD$> = TWArray<COL$TW_HRS_SINCE_PROD,I>
TWUseRec<TW_USE_HRS_ESC$> = TWArray<COL$TW_HRS_ESC,I>
ProdWafers = TWArray<COL$TW_WAFER_ID,I>
CONVERT ',' TO @VM IN ProdWafers
CONVERT ' ' TO '' IN ProdWafers
TWUseRec<TW_USE_WAFER_ID$> = ProdWafers
IF TWUseRec NE OrgTWUseRec THEN
WRITE TWUseRec ON TWUseFile,UseID THEN NULL
END
END
END ELSE
BuildKeys<1,I> = MetNo:'*':NextSeq
NextSeq += 1
END
END
NEXT I
DelCnt = 0
FOR I = 1 TO RowCnt
CurrUseID = CurrUseIDs<1,I>
IF CurrUseID NE '' THEN
LOCATE CurrUseID IN UseIDs USING @VM SETTING Pos ELSE
DeleteKeys<1,-1> = CurrUseID
DelCnt += 1
END
END
NEXT I
IF DelCnt > 0 THEN
FOR I = 1 TO DelCnt
DeleteKey = DeleteKeys<1,I>
Set_Status(0)
obj_Tables('DeleteRec','TW_USE':@RM:DeleteKey:@RM)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
NEXT I
END
LineCnt = COUNT(TWArray<COL$TW_QTY>,@VM) + (TWArray<COL$TW_QTY> NE '')
FOR I = 1 TO LineCnt
IF BuildKeys<1,I> NE '' THEN
NewKey = BuildKeys<1,I>
IF TWArray<COL$TW_TYPE,I> NE '' THEN
TWUseRec = ''
TWUseRec<TW_USE_TW_QTY$> = TWArray<COL$TW_QTY,I>
TWUseRec<TW_USE_TW_USE_CODE$> = TWArray<COL$TW_CODE,I>
TWUseRec<TW_USE_TOOL$> = TWArray<COL$TW_TOOL,I>
TWUseRec<TW_USE_TW_TYPE$> = TWArray<COL$TW_TYPE,I>
TWUseRec<TW_USE_SIGNATURE$> = TWArray<COL$TW_SIG,I>
TWUseRec<TW_USE_SIG_DTM$> = ICONV(TWArray<COL$TW_SIG_DTM,I>,'DT')
TWUseRec<TW_USE_HRS_SINCE_PROD$> = TWArray<COL$TW_HRS_SINCE_PROD,I>
TWUseRec<TW_USE_HRS_ESC$> = TWArray<COL$TW_HRS_ESC,I>
TWUseRec<TW_USE_WAFER_ID$> = TWArray<COL$TW_WAFER_ID,I>
obj_Tables('WriteRec','TW_USE':@RM:NewKey:@RM:@RM:TWUseRec)
NextSeq += 1
Result<1,I> = NewKey
END
END ELSE
Result<1,I> = TWArray<COL$TW_USE_ID,I>
END
NEXT I
IF LineCnt < ListCnt THEN
Result := STR(@VM,ListCnt - LineCnt)
END
RETURN Result