open-insight/LSL2/STPROC/PRINT_PROD_LABELS.txt
2024-05-22 14:06:46 -07:00

910 lines
24 KiB
Plaintext

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