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

909 lines
24 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

COMPILE SUBROUTINE PRINT_PROD_LABELS(RDSNos)
$INSERT LOGICAL
$INSERT MSG_EQUATES
$INSERT REACT_RUN_EQUATES
$INSERT RDS_LAYER_EQUATES
$INSERT RDS_TEST_EQUATES
$INSERT CLEAN_INSP_EQUATES
$INSERT RECIPE_EQU
$INSERT OIPRINT_EQUATES
$INSERT PROD_SPEC_EQUATES
$INSERT QUOTE_SPEC_EQU
$INSERT WO_LOG_EQUATES
$INSERT WO_STEP_EQU
$INSERT WO_MAT_EQUATES
$INSERT ORDER_EQU
$INSERT ORDER_DET_EQU
$INSERT PRS_LAYER_EQU
$INSERT CUST_EPI_PART_EQUATES
DECLARE SUBROUTINE ErrMsg,
DECLARE FUNCTION MSG, Key_Sort, Get_Printer, Set_Printer, Utility, obj_Install, Printer_Select, obj_Prod_Spec
Declare function Direct_Print, Environment_Services
* 4/1/2010 cloned from PRINT_CASS_LABELS Change from RDS centric to WO_MAT and expand to 4x4
EQU PI$LEFT TO 1
EQU PI$TOP TO 2
EQU PI$RIGHT TO 3
EQU PI$BOTTOM TO 4
EQU PI$WIDTH TO 5
EQU PI$HEIGHT TO 6
EQU PI$SIZE TO 7
IF NOT(ASSIGNED(RDSNos)) THEN RDSNos = ''
ErrorMsg = ''
IF RDSNos = '' THEN ErrorMsg = 'Null parameter "RDSNos" passed to routine.'
IF ErrorMsg NE '' THEN
ErrMsg(ErrorMsg)
RETURN
END
FileName = "Printing Label"
Title = "Printing Label"
PageInfo = ''
PageInfo<PI$LEFT> = 0.1
PageInfo<PI$TOP> = 0.1
PageInfo<PI$RIGHT> = 0.1
PageInfo<PI$BOTTOM> = 0.1
PageSetup = '1' ;* Landscape
PrintSetup = '' ;* Preview
*PrinterID = '\\mesirwfp001\MESZBRPRT002' ;* This is the Zebra 105se
PrinterID = '\\mesirwfp002\MESZBRPRT004' ;* This is the 105SL - This is the production 1 ;* New Zebra 4x4" printer after IFX cutover - dkk 7/29/15
PrintPath = Printer_Select(PrinterID) ;* Popup is skipped IF Printer ID is passed
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
stat = Set_Printer("INIT",FileName,Title,PageInfo,PageSetup,PrintSetup,PrintPath)
end else
stat = Direct_Print('START', PrintPath<1>, '', '')
end
IF stat < 0 THEN GOTO OIPrint_Error
EQU DosPath$ TO 'C:\WINDOWS\OIZPL.TXT' ;* remove jch
CLOrientation = '' ;* used for printing on cleanroom labels
* Begin data extraction
FirstRunRec = XLATE('REACT_RUN',RDSNos<1,1>,'','X')
WONo = FirstRunRec<REACT_RUN_WO_NO$>
WOStep = FirstRunRec<REACT_RUN_WO_STEP$>
WORec = XLATE('WO_LOG',WONo,'','X')
WOCassCnt = COUNT(WORec<WO_LOG_WO_MAT_KEY$>,@VM) + (WORec<WO_LOG_WO_MAT_KEY$> NE '')
WOStepKeys = WORec<WO_LOG_WO_STEP_KEY$>
IF INDEX(WOStepKeys,@VM,1) THEN
PrintWONo = WONo:'.':WOStep
END ELSE
PrintWONo = WONo
END
WOLogRec = XLATE('WO_LOG',WONo,'','X')
CustNo = WOLogRec<WO_LOG_CUST_NO$>
CustName = XLATE('COMPANY',CustNo,'ABBREV_OR_CO_NAME','X')
Captive = XLATE('COMPANY',CustNo,'CAPTIVE','X')
PONo = WOLogRec<WO_LOG_CUST_PO_NO$>
EpiPartNo = WOLogRec<WO_LOG_EPI_PART_NO$>
ReqShipDate = OCONV(WORec<WO_LOG_PROMISE_SHIP_DT$>,'D2/')
WOStepKeys = WORec<WO_LOG_WO_STEP_KEY$>
IF Index(WOStepKeys,@VM,1) THEN MultiStep = 1 Else MultiStep = 0
PSNo = XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_PROD_SPEC_ID$,'X')
PSRec = XLATE('PROD_SPEC',PSNo,'','X')
SubOrient = PSRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubOrientation$>
CustEpiPartRec = XLATE('CUST_EPI_PART',CustNo:'*':EpiPartNo,'','X')
ShipBagReq = CustEpiPartRec<CUST_EPI_PART_SHIP_BAG_REQ$>
ReactType = OCONV(PSRec<PROD_SPEC_REACTOR_TYPE$>,'[REACT_TYPE_CONV,CODE]')
SpecType = OCONV( XLATE( 'PROD_SPEC', PSNo, 'SPEC_TYPE', 'X' ), '[SPEC_TYPE_CONV]' )
CustSpecNo = ''
IF Captive THEN
CustSpecNos = PSRec<PROD_SPEC_SPEC_NUM$>
CustSpecDescs = PSRec<PROD_SPEC_SPEC_DESC$>
CustSpecRevNos = PSRec<PROD_SPEC_REV_NUM$>
CustSpecRevDts = PSRec<PROD_SPEC_REV_DATE$>
SpecCnt = COUNT(CustSpecNos,@VM) + (CustSpecNos NE '')
FOR I = 1 TO SpecCnt
IF CustSpecDescs<1,I> _EQC 'GENERAL' THEN
CustSpecNo = CustSpecNos<1,I>
CustSpecDesc = CustSpecDescS<1,I>
CustSpecRevNo = CustSpecRevNos<1,I>
CustSpecRevDt = OCONV(CustSpecRevDts<1,I>,'D4/')
END
UNTIL CustSpecNo NE ''
NEXT I
END
BoxCnt = COUNT(RDSNos,@FM) + (RDSNos NE '')
GOSUB PrintCleanRoomLabels
* * * * * *
OIPrint_Error:
* * * * * *
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
stat = Set_Printer("TERM")
end else
stat = Direct_Print('STOP')
end
RETURN
* * * * * * * * * * * *` L o c a l S u b r o u t i n e s * * * * * * * * * * * *
* * * * * * *
PrintCleanRoomLabels:
* * * * * * *
FOR I = 1 TO BoxCnt
RDSNo = RDSNos<I>
ReactRunRec = XLATE('REACT_RUN',RDSNo,'','X')
CassNo = ReactRunRec<REACT_RUN_CASS_NO$>
WOStep = ReactRunRec<REACT_RUN_WO_STEP$>
IF MultiStep THEN
PrintWONo = WONo:'.':WOStep
END ELSE
PrintWONo = WONo
END
LSKeys = ReactRunRec<REACT_RUN_RDS_LAYER_KEYS$>
LSCnt = COUNT(LSKeys,@VM) + (LSKeys NE '')
LSIDs = ''
FOR N = 1 TO LSCnt
LSIDs<1,-1> = FIELD(LSKeys<1,N>,'*',2)
NEXT N
WOMatKey = WONo:'*':CassNo
WOMatRec = XLATE('WO_MAT',WOMatKey,'','X')
LotNo = WOMatRec<WO_MAT_LOT_NO$>
WfrQty = WOMatRec<WO_MAT_WAFER_QTY$>
CustPartNo = WOMatRec<WO_MAT_CUST_PART_NO$>
SubPartNo = WOMatRec<WO_MAT_SUB_PART_NO$>
OrderItem = WOMatRec<WO_MAT_ORDER_ITEM$>
MakeupBox = WOMatRec<WO_MAT_MAKEUP_BOX$>
LOCATE CustPartNo IN CustEpiPartRec<CUST_EPI_PART_CUST_PART_NO$> USING @VM SETTING Pos THEN
CustPartDesc = CustEpiPartRec<CUST_EPI_PART_CUST_PART_DESC$,Pos>
END ELSE
CustPartDesc = ''
END
********************************
OrderDetKey = WORec<WO_LOG_ORDER_NO$>:'*':OrderItem
PartNoDesc = XLATE( 'ORDER_DET',OrderDetKey,'CUST_PN_DESC','X') ;********** This needs checked
SuppCd = SubPartNo[-1,'B-']
IF LEN(SuppCd) NE '2' THEN SuppCd =''
LSKeys = ReactRunRec<REACT_RUN_RDS_LAYER_KEYS$>
LSCnt = COUNT(LSKeys,@VM) + (LSKeys NE '')
PrintThickTargets = ''
PrintResTargets = ''
PrintConTargets = ''
PrintCResTargets = ''
FOR N = 1 TO LSCnt
LSID = FIELD(LSKeys<1,N>,'*',2)
RDSLayerRec = XLATE('RDS_LAYER',RDSNo:'*':LSID,'','X')
MetKey = RDSLayerRec<RDS_LAYER_RDS_TEST_KEYS$,1> ;* Just 1st one
MetRec = XLATE('RDS_TEST',MetKey,'','X')
PrintThickTargets<1,N> = OCONV(MetRec<RDS_TEST_SPEC_THICK_TARGET$>,'MD2'):MetRec<RDS_TEST_SPEC_THICK_UNITS$>
PrintResTargets<1,N> = OCONV(MetRec<RDS_TEST_SPEC_RES_TARGET$>,'MD3'):MetRec<RDS_TEST_SPEC_RES_UNITS$>
PrintConTargets<1,N> = OCONV(MetRec<RDS_TEST_SPEC_CON_TARGET$>,'MS21'):MetRec<RDS_TEST_SPEC_CON_UNITS$>
PrintCResTargets<1,N> = OCONV(MetRec<RDS_TEST_SPEC_CRES_TARGET$>,'MD3'):MetRec<RDS_TEST_SPEC_CRES_UNITS$>
IF N = 1 THEN
RecipeNo = RDSLayerRec<RDS_LAYER_RECIPE_NO$>
RecipeInfo = XLATE( 'RECIPE', RecipeNo, 'RECIPE_NAME_NO', 'X' )
Dopant = RDSLayerRec<RDS_LAYER_DOPANT$>
ThickMTool = MetRec<RDS_TEST_SPEC_THICK_MTOOL$>
ThickMType = MetRec<RDS_TEST_SPEC_THICK_MTYPE$>
ThickMRecipe = MetRec<RDS_TEST_SPEC_THICK_MRECIPE$>
ThickMFreq = MetRec<RDS_TEST_SPEC_THICK_MFREQ$>
ThickMPIType = MetRec<RDS_TEST_SPEC_THICK_MPROVEIN$>
ThickMFirst = MetRec<RDS_TEST_SPEC_THICK_MFIRST$>
ThickMLast = MetRec<RDS_TEST_SPEC_THICK_MLAST$>
ThickMSPC = MetRec<RDS_TEST_SPEC_THICK_MSPC$>
ThickMOvergrow = MetRec<RDS_TEST_SPEC_THICK_MOVERGROW$>
ResMTool = MetRec<RDS_TEST_SPEC_RES_MTOOL$>
ResMType = MetRec<RDS_TEST_SPEC_RES_MTYPE$>
ResMRecipe = MetRec<RDS_TEST_SPEC_RES_MRECIPE$>
ResMFreq = MetRec<RDS_TEST_SPEC_RES_MFREQ$>
ResMPIType = MetRec<RDS_TEST_SPEC_RES_MPROVEIN$>
ResMFirst = MetRec<RDS_TEST_SPEC_RES_MFIRST$>
ResMLast = MetRec<RDS_TEST_SPEC_RES_MLAST$>
ResMSPC = MetRec<RDS_TEST_SPEC_RES_MSPC$>
ResMOvergrow = MetRec<RDS_TEST_SPEC_RES_MOVERGROW$>
ConMTool = MetRec<RDS_TEST_SPEC_CON_MTOOL$>
ConMType = MetRec<RDS_TEST_SPEC_CON_MTYPE$>
ConMRecipe = MetRec<RDS_TEST_SPEC_CON_MRECIPE$>
ConMFreq = MetRec<RDS_TEST_SPEC_CON_MFREQ$>
ConMPIType = MetRec<RDS_TEST_SPEC_CON_MPROVEIN$>
ConMFirst = MetRec<RDS_TEST_SPEC_CON_MFIRST$>
ConMLast = MetRec<RDS_TEST_SPEC_CON_MLAST$>
ConMSPC = MetRec<RDS_TEST_SPEC_CON_MSPC$>
ConMOvergrow = MetRec<RDS_TEST_SPEC_CON_MOVERGROW$>
CResMTool = MetRec<RDS_TEST_SPEC_CRES_MTOOL$>
CResMType = MetRec<RDS_TEST_SPEC_CRES_MTYPE$>
CResMRecipe = MetRec<RDS_TEST_SPEC_CRES_MRECIPE$>
CResMFreq = MetRec<RDS_TEST_SPEC_CRES_MFREQ$>
CResMPIType = MetRec<RDS_TEST_SPEC_CRES_MPROVEIN$>
CResMFirst = MetRec<RDS_TEST_SPEC_CRES_MFIRST$>
CResMLast = MetRec<RDS_TEST_SPEC_CRES_MLAST$>
CResMSPC = MetRec<RDS_TEST_SPEC_CRES_MSPC$>
CResMOvergrow = MetRec<RDS_TEST_SPEC_CRES_MOVERGROW$>
BEGIN CASE
CASE ThickMTool = 'SRP'
SRPParm = 'THICK'
SRPType = ThickMType
SRPFirst = ThickMFirst
SRPLast = ThickMLast
SRPFreq = ThickMFreq
CASE ResMTool = 'SRP'
SRPParm = 'RES'
SRPType = ResMType
SRPFirst = ResMFirst
SRPLast = ResMLast
SRPFreq = ResMFreq
CASE ConMTool = 'SRP'
SRPParm = 'CON'
SRPType = ConMType
SRPFirst = ConMFirst
SRPLast = ConMLast
SRPFreq = ConMFreq
CASE CResMTool = 'SRP'
SRPParm = 'CRES'
SRPType = CResMType
SRPFirst = CResMFirst
SRPLast = CResMLast
SRPFreq = CResMFreq
CASE 1
SRPPrintFlag = ''
SRPParm = ''
SRPType = ''
SRPFirst = ''
SRPLast = ''
SRPFreq = ''
END CASE
END ;* End of check for First Layer
NEXT N
swap 'æm' with 'um' in PrintThickTargets
swap 'ê-cm' with 'ohm.cm' in PrintThickTargets
swap 'ê/Ü' with 'ohm/sq' in PrintThickTargets
swap '' with 'A' in PrintThickTargets
swap 'æm' with 'um' in PrintResTargets
swap 'ê-cm' with 'ohm.cm' in PrintResTargets
swap 'ê/Ü' with 'ohm/sq' in PrintResTargets
swap '' with 'A' in PrintResTargets
* Thickness print data
PrintThickness = ''
PrintResistivity = ''
BEGIN CASE
CASE ThickMFirst AND CassNo = 1 ; PrintThickness = 1
CASE ThickMLast AND CassNo = WOCassCnt ; PrintThickness = 1
CASE 1
IF ThickMFreq = 1 THEN
PrintThickness = 1
END ELSE
IF MOD(CassNo,ThickMFreq) = 1 THEN
PrintThickness = 1
END
END
END CASE
IF PrintThickness THEN
CONVERT '<>' TO '' IN SubOrient
ThickPrintData = ThickMTool:' ':ThickMType:' ':SubOrient:' ':ThickMRecipe
END ELSE
ThickPrintData = ''
END
* Resistivity print data
BEGIN CASE
CASE ResMFirst AND CassNo = 1 ; PrintResistivity = 1
CASE ResMLast AND CassNo = WOCassCnt ; PrintResistivity = 1
CASE 1
IF ResMFreq = 1 THEN
PrintResistivity = 1
END ELSE
IF MOD(CassNo,ResMFreq) = 1 THEN
PrintResistivity = 1
END
END
END CASE
IF PrintResistivity THEN
CONVERT '<>' TO '' IN SubOrient
ResPrintData = ResMTool:' ':ResMType:' ':SubOrient:' ':ResMRecipe
END ELSE
ResPrintData = ''
END
SRPPrintFlag = ''
BEGIN CASE
*CASE SRPParm = 'THICK' ; SRPPrintFlag = 1
*CASE SRPParm = 'RES' ; SRPPrintFlag = 1
CASE 1
IF SRPFirst AND CassNo = 1 THEN SRPPrintFlag = 1
IF SRPLast AND CassNo = WOCassCnt THEN SRPPrintFlag = 1
IF SRPFreq = 1 THEN
SRPPrintFlag = 1
END ELSE
IF MOD(CassNo,SRPFreq) = 1 THEN
SRPPrintFlag = 1
END
END
END CASE
PreCINo = ReactRunRec<REACT_RUN_PRE_CI_NO$>
PreCIRec = XLATE('CLEAN_INSP',PreCINo,'','X')
SubOxide = OCONV(PreCIRec<CLEAN_INSP_SPEC_CLEAN_SUBOXIDE$>,'B')
PreCleanTool = PreCIRec<CLEAN_INSP_SPEC_CLEAN_TOOL$>
PreAkrionRecipe = PreCIRec<CLEAN_INSP_SPEC_CLEAN_AKRION_RECIPE$>
PreSurfscan = PreCIRec<CLEAN_INSP_SPEC_SURFSCAN$>
WfrCINo = ReactRunRec<REACT_RUN_WFR_CI_NO$>
WfrCIRec = XLATE('CLEAN_INSP',WfrCINo,'','X')
FirstSurfscan = WfrCIRec<CLEAN_INSP_SPEC_SURFSCAN$>
PostCINo = ReactRunRec<REACT_RUN_POST_CI_NO$>
PostCIRec = XLATE('CLEAN_INSP',PostCINo,'','X')
IF PostCINo NE '' THEN
PostCleanTool = PostCIRec<CLEAN_INSP_SPEC_CLEAN_TOOL$>
PostAkrionRecipe = PostCIRec<CLEAN_INSP_SPEC_CLEAN_AKRION_RECIPE$>
PostCleanSurfScan = PostCIRec<CLEAN_INSP_SPEC_SURFSCAN$>
PostCleanSSSampleQty = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$>
PostCleanSurfscanRecipe = PostCIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
PostCleanSurfDefects = PostCIRec<CLEAN_INSP_SPEC_SURF_DEFECTS$>
PostCleanSurfHaze = OCONV(PostCIRec<CLEAN_INSP_SPEC_SURF_HAZE$>,'MD2')
END
APreRec = ''
APostRec = ''
IF ( PreAkrionRecipe<1> <> '' ) THEN
APreRec = ' ':PreAkrionRecipe:' '
SubOxide = 'No' ;* If Akrion then no oxide strip
END
IF ( PostAkrionRecipe<1> <> '' ) THEN
APostRec = ' ':PostAkrionRecipe
END
PrintCleaningReqs = TRIM( 'Strip:':SubOxide:' Pre:':PreCleanTool:APreRec:' Post:':PostCleanTool:APostRec )
GOSUB PrintLabel
*GOSUB PrintLabel
NEXT I
RETURN
* * * * * * *
PrintLabel:
* * * * * * *
Str = '^XA'
Str := '^LH0,0'
Str := '^PR2' ;* Print speed 2 inches per second
Str := '^LL812' ;* Label length @203 dpi
Str := '^PW900'
Str := '^MD15' ;* Media darkness
Str := '^MMT' ;* Media mode t=tear off mode
*Str := '^PQ2' ;* Print 2 labels for each pass through here
Str = '^XA' ;* Start of label format
Str := '^LH20,70' ;* Label home offset (needed to get onto the label medium)
Str := '^BY3' ;* Set narrow Bar Code line width to 3 dots
Str := '^PR2' ;* Print speed = 2 IPS
Str := '^FO15,15^GB795,786,3,B^FS'
* SRP Box and info in Upper Right Corner of label
IF SRPPrintFlag THEN
Str:= '^FO738,15^GB72,60,3,B^FS'
Str:= '^FO755,25^A0,25^FDSRP^FS':CRLF$
IF LEN( SRPType ) > 2 THEN
Str:= '^FO750,50^A0,N,25,^FD':SRPType:'^FS'
END ELSE
Str:= '^FO745,50^A0,N,25,^FD':SRPType:'^FS':CRLF$
END
END
****** First Line
Company = 'IFX Epi Services'
Str := '^FO30,25^A0,,36^FD':Company:'^FS'
Str := '^FO310,25^AC,18^FDWO No:^FS':CRLF$ ;* Label
Str := '^FO390,25^A045,36^FD':PrintWONo:'^FS':CRLF$ ;* Data
IF CassNo = 1 THEN
Str := '^FO550,20^GB90,40,40,,3^FS':CRLF$
Str := '^FO560,25^AC,18^FR^FDRun:^FS':CRLF$ ;* Label
Str := '^FO615,25^A045,36^FR^FD':CassNo:'^FS':CRLF$ ;* Data
END ELSE
Str := '^FO560,25^AC,18^FDRun:^FS':CRLF$ ;* Label
Str := '^FO615,25^A045,36^FD':CassNo:'^FS':CRLF$ ;* Data
END
****** Second Line
Str:= '^FO30,70^AC,18^FDRDS:^FS':CRLF$
Str:= '^FO90,70^A050,30^FD':RDSNo:'^FS':CRLF$
Str := '^BY2,2.0':CRLF$
Str := '^FO200,70^B3,,23,N^FD':RDSNo:'^FS':CRLF$
Str := '^BY2,3.0':CRLF$
Str:= '^FO450,70^AC,18^FDQty:^FS':CRLF$ ;* Label
Str:= '^FO510,70^A045,25^FD':WfrQty:'^FS':CRLF$ ;* Data
IF MakeupBox THEN
Str := '^FO575,65^GB140,35,35,,3^FS':CRLF$
Str := '^FO585,70^A0,,35^FR^FDM/U Box^FS'
END
****** Third Line
Str:= '^FO30,105^AC,18^FDShip Dt:^FS' ;* Label
Str:= '^FO140,105^A0,,25^FD':ReqShipDate:'^FS':CRLF$ ;* Data
Str:= '^FO250,105^AC,18^FDCust:^FS':CRLF$ ;* Label
Str:= '^FO320,105^A045,25^FD':CustName:'^FS':CRLF$ ;* Data
Str:= '^FO560,105^AC,18^FDPO:^FS':CRLF$
Str:= '^FO600,105^A045,25^FD':PONo:'^FS':CRLF$
****** Separator bar
Str:= '^FO15,128^GB795,1^FS'
****** Fourth Line
LineY = 135
Str := '^FO30,':LineY:'^AC,18^FDLot No:^FS':CRLF$
Str := '^FO120,':LineY:'^A0,20^FD':LotNo:'^FS':CRLF$
****** Fifth Line
LineY += 25
Str := '^FO30,':LineY:'^AC,18^FDSub PN:^FS':CRLF$
Str := '^FO120,':LineY:'^A0,20^FD':SubPartNo:'^FS':CRLF$
IF SuppCd NE '' THEN
Str := '^FO410,':LineY:'^AC,18^FDSupp Cd:^FS':CRLF$ ;* Label ;* Added 8/17/2005 JCH - J.C.Henry & Co.
Str := '^FO510,':LineY:'^A0,20^FD':SuppCd:'^FS':CRLF$ ;* Data
Str := '^BY2,2.0':CRLF$
Str := '^FO610,':LineY:'^A040,20^B3,,23,N^FD':SuppCd:'^FS':CRLF$
Str := '^BY2,3.0':CRLF$
END
****** New Part Number line
LineY += 25
Str := '^FO30,':LineY:'^AC,18^FDCust Part No:^FS':CRLF$
Str := '^FO200,':LineY:'^A0,20^FD':CustPartNo:' ':CustPartDesc:'^FS':CRLF$
****** Customer Spec Line
LineY += 25
IF CustSpecNo NE '' THEN
Str := '^FO30,':LineY:'^AC,18^FDCust Spec No:^FS':CRLF$
Str := '^FO200,':LineY:'^A0,20^FD':CustSpecNo:' ':CustSpecDesc:'^FS':CRLF$
Str := '^FO475,':LineY:'^AC,18^FDRev:^FS':CRLF$
Str := '^FO525,':LineY:'^A0,20^FD':CustSpecRevNo:'^FS':CRLF$
Str := '^FO615,':LineY:'^AC,18^FDRev Dt:^FS':CRLF$
Str := '^FO700,':LineY:'^A0,20^FD':CustSpecRevDt:'^FS':CRLF$
END
****** Separator bar
LineY += 23
Str := '^FO15,':LineY:'^GB795,1^FS'
****** Sixth Line
LineY += 7
Str := '^FO30,':LineY:'^AC,18^FDStrip Oxide:^FS':CRLF$
Str := '^FO180,':LineY:'^A0,20^FD':SubOxide:'^FS':CRLF$
Str := '^FO410,':LineY:'^AC,18^FDReact Type:^FS':CRLF$
Str := '^FO560,':LineY:'^A0,20^FD':ReactType:'^FS':CRLF$
****** Seventh Line
LineY += 25
Str := '^FO30,':LineY:'^AC,18^FDPre:^FS':CRLF$
Str := '^FO90,':LineY:'^A0,20^FD':PreCleanTool:'^FS':CRLF$
LineY += 25
IF PreAkrionRecipe NE '' THEN
Str := '^FO30,':LineY:'^AC,18^FDAkrion:^FS':CRLF$
Str := '^FO120,':LineY:'^A0,20^FD':PreAkrionRecipe:'^FS':CRLF$
Str := '^BY2,2.0':CRLF$
Str := '^FO400,':LineY:'^A040,20^B3,,23,N^FD':PreAkrionRecipe:'^FS':CRLF$
Str := '^BY2,3.0':CRLF$
END
****** Eighth Line
LineY += 35
Str := '^FO30,':LineY:'^AC,18^FDRecipe:^FS':CRLF$
Str := '^FO120,':LineY:'^A0,20^FD':RecipeInfo:'^FS':CRLF$
Str := '^FO410,':LineY:'^AC,18^FDEpi Dopant:^FS':CRLF$
Str := '^FO560,':LineY:'^A040,20^FD':Dopant:'^FS':CRLF$
****** Ninth Line
LineY += 25
Str := '^FO30,':LineY:'^A040,20^FD':ThickPrintData:'^FS':CRLF$
Str := '^FO410,':LineY:'^A040,20^FD':ResPrintData:'^FS':CRLF$
****** Tenth, Eleventh and Twelfth Lines
LineY += 25
Str := '^FO30,':LineY:'^AC,18^FDThk Spec:^FS':CRLF$
FOR M = 1 TO COUNT(PrintThickTargets,@VM) + (PrintThickTargets NE '')
BaseLine = LineY + (M-1)*20
Str := '^FO140,':BaseLine:'^A040,20^FD':PrintThickTargets<1,M>:'^FS':CRLF$
NEXT M
Str := '^FO410,':LineY:'^AC,18^FDRes Spec:^FS':CRLF$
FOR M = 1 TO COUNT(PrintResTargets,@VM) + (PrintResTargets NE '')
BaseLine = LineY + (M-1)*20
Str := '^FO520,':BaseLine:'^A040,20^FD':PrintResTargets<1,M>:'^FS':CRLF$
NEXT M
LineY = 625
****** Line
Str := '^FO30,625^AC,18^FDPost:^FS':CRLF$
Str := '^FO120,625^A0,20^FD':PostCleanTool:'^FS':CRLF$
IF PostAkrionRecipe NE '' THEN
Str := '^FO30,650^AC,18^FDAkrion:^FS':CRLF$
Str := '^FO120,650^A0,20^FD':PostAkrionRecipe:'^FS':CRLF$
Str := '^BY2,2.0':CRLF$
Str := '^FO400,650^A040,20^B3,,23,N^FD':PostAkrionRecipe:'^FS':CRLF$
Str := '^BY2,3.0':CRLF$
END
****** Line 13
PostCleanSSSampleQty = PostCIRec<CLEAN_INSP_SPEC_SS_SAMP_QTY$>
PostCleanSurfscanRecipe = PostCIRec<CLEAN_INSP_SPEC_SURFSCAN_RECIPE$>
PostCleanSurfDefects = PostCIRec<CLEAN_INSP_SPEC_SURF_DEFECTS$>
PostCleanSurfHaze = OCONV(PostCIRec<CLEAN_INSP_SPEC_SURF_HAZE$>,'MD2')
IF PostCleanSurfScanRecipe NE '' THEN
LineY = 685
Str := '^FO30,':LineY:'^AC,18^FDSample:^FS':CRLF$
Str := '^FO120,':LineY:'^A0,20^FD':PostCleanSSSampleQty:'^FS':CRLF$
Str := '^FO200,':LineY:'^AC,18^FDSum of Defects:^FS':CRLF$
Str := '^FO390,':LineY:'^A0,20^FD':PostCleanSurfDefects:'^FS':CRLF$
Str := '^FO450,':LineY:'^AC,18^FDHaze Avg:^FS':CRLF$
Str := '^FO570,':LineY:'^A0,20^FD':PostCleanSurfHaze:'^FS':CRLF$
Str := '^FO30,710^AC,18^FDTencor:^FS':CRLF$
Str := '^FO120,710^A0,20^FD':PostCleanSurfScanRecipe:'^FS':CRLF$
Str := '^BY2,2.0':CRLF$
Str := '^FO350,710^A040,20^B3,,23,N^FD':PostCleanSurfScanRecipe:'^FS':CRLF$
Str := '^BY2,3.0':CRLF$
*Str := '^FO30,700^AC,18^FDPost:^FS':CRLF$
*Str := '^FO90,700^A0,20^FD':PostCleanTool:'^FS':CRLF$
END
****** Separator bar
Str := '^FO15,738^GB795,1^FS'
****** Lines 15 and 16
Str := '^FO30,775^AC,18^FDProd Spec No:^FS':CRLF$ ;* Label
Str := '^FO190,775^A0,25^FD':PSNo:'^FS':CRLF$ ;* Data
IF SpecType = 'Production' THEN SpecType = 'Prod'
IF SpecType = 'Pre-Production' THEN SpecType = 'Pre'
Str := '^FO275,775^AC,18^FDSpec Type:^FS':CRLF$ ;* Label
Str := '^FO400,775^A0,25^FD':SpecType:'^FS':CRLF$ ;* Data
Str:= '^FO30,750^AC,18^FDBag:^FS':CRLF$
Str:= '^FO80,750^A0,20^FD':ShipBagReq:'^FS':CRLF$
Str:= '^XZ'
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
stat = Set_Printer('TEXT',Str)
end else
stat = Direct_Print('PRINT', Str)
end
RETURN
* * * * * * *
PrintWOLabels:
* * * * * * *
* Got all data now we can print
RDSCnt = COUNT(RDSNos,@VM) + (RDSNos NE '')
ShelfCnt = INT(RDSCnt/28) + (MOD(RDSCnt,28) NE 0) ;* Come back TO this later JCH 7/27/2005
* So we print two sets of labels
GOSUB PrintWO
GOSUB PrintWO
RETURN
* * * * * * *
PrintWO:
* * * * * * *
Str = '^XA^CFD'
Str:= '^LH0,0'
Str:= '^PR2' ;* PRINT SPEED 2 INCHES PER SECOND
Str:= '^LL325' ;* LABEL LENGTH IN DOTS
Str:= '^MD15' ;* MEDIA DARKNESS
Str:= '^MMT':CRLF$ ;* MEDIA MODE T=TEAR OFF MODE
IF MultiStep > 0 THEN
Str:= '^FO10,30^A0220,210^FD':PrintWONo:'^FS':CRLF$ ;* 5/21/2005 - JCH - Changed for Order Entry/Vision upgrade
END ELSE
Str:= '^FO70,30^A0220,210^FD':PrintWONo:'^FS':CRLF$
END
* Get Cust Abbrev
CharCnt = LEN(CustName)
NameLength = CharCnt*72
WhiteSpace = INT(((2103 - NameLength)/2103) * 806)
StartingXPos = INT(WhiteSpace/2)
Str:= '^FO':StartingXPos:',230^A0,75,72^FD':CustName:'^FS':CRLF$
*Str:= '^FO150,320^A080,50^FD':'Commit Date: ':OCONV( XLATE( 'WO_LOG', PrintUniqueWO[1,'.'], wo_log_commit_date$, 'X' ), 'D2/' ):'^FS':CRLF$
Str:= '^XZ'
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
stat = Set_Printer('TEXT',Str)
end else
stat = Direct_Print('PRINT', Str)
end
RETURN
* * * * * * *
PrintMonitorLabels:
* * * * * * *
FOR I = 1 TO IdCnt
Str = '^XA^CFD'
Str:= '^LH0,0'
Str:= '^PR2' ;* PRINT SPEED 2 INCHES PER SECOND
Str:= '^LL325' ;* LABEL LENGTH IN DOTS
Str:= '^MD15' ;* MEDIA DARKNESS
Str:= '^MMT':CRLF$ ;* MEDIA MODE T=TEAR OFF MODE
Str:= '^FO30,30^A060,40^FDMonitor Wafer^FS':CRLF$
Str:= '^FO550,30^A060,40^FDReactor#_____^FS':CRLF$
Str:= '^FO30,70^A060,40^FDDate_____________^FS':CRLF$
Str:= '^FO30,130^A060,40^FDCustomer Name: ':CustName<I>:'^FS':CRLF$
Str:= '^FO30,190^A060,40^FDRDS#: ':RDSIds<I>:'^FS':CRLF$
Str:= '^FO400,190^A060,40^FDLot#: ':LotNum<I>:'^FS':CRLF$
Str:= '^FO30,250^A060,40^FDThick Avg__________^FS':CRLF$
Str:= '^FO400,250^A060,40^FDWafer Type__________^FS':CRLF$
Str:= '^FO30,280^A060,40^FDRes Avg____________^FS':CRLF$
Str:= '^FO400,280^A060,40^FDWafer Type__________^FS':CRLF$
Str:= '^XZ'
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
stat = Set_Printer('TEXT',Str)
end else
stat = Direct_Print('PRINT', Str)
end
NEXT I
RETURN
* * * * * * *
PrintSurfscanLabels:
* * * * * * *
FOR I = 1 TO IdCnt
Str = '^XA^CFD'
Str:= '^LH0,0'
Str:= '^PR2' ;* PRINT SPEED 2 INCHES PER SECOND
Str:= '^LL325' ;* LABEL LENGTH IN DOTS
Str:= '^MD15' ;* MEDIA DARKNESS
Str:= '^MMT' ;* MEDIA MODE T=TEAR OFF MODE
Str:= '^FO30,30^A060,40^FDSurfscan Required^FS'
*Str:= '^FO550,30^A060,40^FDRDS#':RDSIds<I>:'^FS'
IF PreSurfscan THEN
Str:= '^FO30,130^A060,40^FDPre Epi:^FS'
Str:= '^FO250,130^A060,40^FDDefects________^FS'
Str:= '^FO500,130^A060,40^FDHaze________^FS'
END
IF FirstSurfscan THEN
Str:= '^FO30,190^A060,40^FDFirst Wafer^FS'
Str:= '^FO250,190^A060,40^FDDefects________^FS'
Str:= '^FO500,190^A060,40^FDHaze________^FS'
END
IF PostCleanSurfscan THEN
Str:= '^FO30,250^A060,40^FDPost Epi:^FS'
Str:= '^FO250,250^A060,40^FDDefects________^FS'
Str:= '^FO500,250^A060,40^FDHaze________^FS'
END
Str:= '^XZ'
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
stat = Set_Printer('TEXT',Str)
end else
stat = Direct_Print('PRINT', Str)
end
NEXT I
RETURN