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

923 lines
26 KiB
Plaintext
Raw 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_WM_IN_LABELS(WO_No , MultiStep )
***** This appears to be dead JCH
$INSERT LOGICAL
$INSERT MSG_EQUATES
$INSERT OIPRINT_EQUATES
$INSERT PROD_SPEC_EQUATES
$INSERT QUOTE_SPEC_EQU
$INSERT WO_LOG_EQU
$INSERT ORDER_DET_EQU
$INSERT WM_IN_EQUATES
DECLARE FUNCTION Msg, Get_Printer, Set_Printer, Utility, obj_Install, Printer_Select, FieldCount
Declare function Direct_Print, Environment_Services
DECLARE SUBROUTINE Btree.Extract, ErrMsg
* 5/18/2006 - Cloned from Print_Cass_Labels
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(WONo)) THEN WONo = '' ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
IF NOT(ASSIGNED(MultiStep)) THEN MultiStep = '' ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
IF WONo = '' THEN RETURN ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
IF MultiStep = '' THEN MultiStep = 0 ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
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 = '\\FMSA001\PMSAZ_BR3' ;* Print Server change
PrinterID = '\\mesirwfp001\MESZBRPRT002' ;* This is the Zebra 105sl with the test labels loaded
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
CLOrientation = '' ;* used for printing on cleanroom labels
OPEN 'DICT.WM_IN' TO DictVar ELSE
ErrMsg('Unable to open DICT.WM_IN in PRINT_WM_IN_LABELS for Btree.Extract.')
RETURN
END
SearchString = 'WO_NO':@VM:WONo:@FM
Btree.Extract(SearchString,'WM_IN',DictVar,WMInKeys,'',Flag)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
IF WMInKeys = '' THEN RETURN
debug
return
Void = utility( 'CURSOR', 'H' )
IdCnt = COUNT( RdsIds, @FM ) + (RdsIds NE '')
IF IdCnt > 1 THEN
* RdsIds = key_sort( RdsIds, 'RDS', 'WO':@FM:'RUN_ORDER_NUM', 1, '', '' )
END
RETURN
GOSUB PrintCleanRoomLabels
UniqueWOs = ''
IF MultiStep > 0 THEN
WOStepKeys = XLATE('RDS',RdsIds,RDS_WO_STEP_KEY$,'X') ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
FOR I = 1 TO IdCnt
ThisWO = WOStepKeys<I>
CONVERT '*' TO '.' IN ThisWO
LOCATE ThisWO IN UniqueWOs USING @VM SETTING FPos ELSE
UniqueWOs<1,-1> = ThisWO
END
NEXT I
END ELSE
AllWOs = XLATE( 'RDS', RdsIds, rds_wo$, 'X' )
FOR I = 1 TO IdCnt
ThisWO = AllWOs<I>
LOCATE ThisWO IN UniqueWOs USING @VM SETTING Fpos ELSE
UniqueWOs<1,-1> = ThisWO
END
NEXT I
END
GOSUB PrintWOLabels
* Check to see if they get the monitor wafers based on the psn using the first of RdsIDs
IF XLATE( 'PROD_SPEC', XLATE( 'RDS', RdsIds<1>, rds_prod_spec_id$, 'X' ), prod_spec_monitor_wafer_label$, 'X' ) THEN
GOSUB PrintMonitorLabels
END
* Check to see if they get a surfscan label
CustNo = XLATE('RDS',RdsIds<1>,rds_cust_no$,'X')
IF (CustNo = '6874') OR (CustNo = '6593') ELSE
IF ( PreSurfscan ) or ( FirstSurfscan ) or ( PostCleanSurfscan ) THEN
GOSUB PrintSurfscanLabels
END
END
Void = UTILITY( 'CURSOR', 'A' )
* * * * * *
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:
* * * * * * *
CustName = XLATE( 'RDS', RdsIds, 'ABBREV_OR_CO_NAME', 'X' )
WO = XLATE( 'RDS', RdsIds, rds_wo$, 'X' )
ShipBagReq = XLATE( 'RDS', RdsIds, 'SHIP_BAG_REQ', 'X' )
ReqShipDate = OCONV( XLATE( 'WO_LOG', WO, WO_LOG_PROMISE_SHIP_DT$, 'X' ), 'D2/' )
PO = XLATE( 'RDS', RdsIds, rds_po$, 'X' )
PartNum = XLATE( 'RDS', RdsIds, rds_part_num$, 'X' )
ThickTarget = OCONV( XLATE( 'RDS', RdsIds, 'THICK_TARGET_ALL', 'X' ), 'MD2' )
ThickUnit = XLATE( 'RDS', RdsIds, 'THICK_UNITS_ALL', 'X' )
Dopant = XLATE( 'RDS', RdsIds, 'DOPANT_L1', 'X' )
ResTarget = OCONV( XLATE( 'RDS', RdsIds, 'RES_TARGET_ALL', 'X' ), 'MD3' )
ResUnit = XLATE( 'RDS', RdsIds, 'RES_UNITS_ALL', 'X' )
RecipeIDS = XLATE( 'RDS', RdsIds, 'RECIPE_NO', 'X' ) ;* Changed to calculated field 4/14/2006 JCH
LotNum = XLATE( 'RDS', RdsIds, rds_lot_num$, 'X' )
RecipeInfo = XLATE( 'RECIPE', RecipeIDS, 'RECIPE_NAME_NO', 'X' )
RONum = XLATE( 'RDS', RdsIds, 'RUN_ORDER_NUM', 'X' )
PSNIds = XLATE( 'RDS', RdsIds, rds_prod_spec_id$, 'X' )
ThickVar = XLATE( 'PROD_SPEC', PSNIds, 'THICK_MEASURE_L1', 'X' )
ResVar = XLATE( 'PROD_SPEC', PSNIds, 'RES_MEASURE_L1', 'X' )
ConVar = XLATE( 'PROD_SPEC', PSNIds, 'CON_MEASURE_L1', 'X' )
StressVar = XLATE( 'PROD_SPEC', PSNIds, 'STRESS_MEASURE', 'X' )
TransVar = XLATE( 'PROD_SPEC', PSNIds, 'TRANS_MEASURE', 'X' )
SpecType = OCONV( XLATE( 'RDS', RdsIds, 'SPEC_TYPE', 'X' ), '[SPEC_TYPE_CONV]' )
SubOxide = OCONV( XLATE( 'PROD_SPEC', PSNIds, 'SUB_OXIDE_STRIP', 'X' ), 'B' )
SubPreClean = XLATE( 'PROD_SPEC', PSNIds, 'SUB_PRE_CLEAN', 'X' )
SubPostClean = XLATE( 'PROD_SPEC', PSNIds, 'SUB_POST_CLEAN', 'X' )
PreAkrionRecipe = XLATE( 'PROD_SPEC', PSNIds, 'PRE_AKRION_RECIPE', 'X' )
PostAkrionRecipe = XLATE( 'PROD_SPEC', PSNIds, 'POST_AKRION_RECIPE', 'X' )
SubPartNum = XLATE( 'RDS', RdsIds, 'SUB_PART_NUM', 'X' )
WOStepKeys = XLATE( 'RDS',RdsIds,RDS_WO_STEP_KEY$,'X' ) ;* 05/21/2005 - JCH - Added for Order Entry/Vision upgrade
OrderNos = XLATE( 'RDS',RdsIds,RDS_ORDER_NO$,'X' ) ;* 10/04/2005 - JCH - Added for Order Entry/Vision upgrade
OrderItems = XLATE( 'RDS',RdsIds,RDS_ORDER_ITEM$,'X' ) ;* 10/04/2005 - JCH - Added for Order Entry/Vision upgrade
OrderDetKeys = ''
FOR I = 1 TO COUNT(OrderNos,@FM) + (OrderNos NE '')
OrderDetKeys<I> = OrderNos<I>:'*':OrderItems<I>
NEXT I
CustPNDescs = XLATE( 'ORDER_DET',OrderDetKeys,ORDER_DET_CUST_PN_DESC$,'X') ;* 10/04/2005 - JCH - Added for Order Entry/Vision upgrade
PreSurfscan = XLATE( 'PROD_SPEC', PSNIds<1>, prod_spec_pre_surfscan$, 'X' )
FirstSurfscan = XLATE( 'PROD_SPEC', PSNIds<1>, prod_spec_first_surfscan$, 'X' )
PostCleanSurfscan = XLATE( 'PROD_SPEC', PSNIds<1>, prod_spec_post_clean_surfscan$, 'X' )
CleaningReqs = ''
SRPFlag = XLATE( 'PROD_SPEC', PSNIds, 'SRP_REQ', 'X' )
Qtys = XLATE( 'RDS', RdsIds, 'WAFERS_SCHEDULED', 'X' )
MultilayVar = XLATE( 'RDS', RdsIds, 'MULTI_LAYER', 'X' )
* Lets break out thick and res and see if it gets measured based on frequency
* Thickness
ThickPrintVar = ''
ResPrintVar = ''
SRPPrintVar = ''
SRPTypePrintVar = ''
FOR I = 1 TO IdCnt
ThisThickVar = ThickVar<I>
ThisResVar = ResVar<I>
ThisConVar = ConVar<I>
ThisStressVar = StressVar<I>
ThisTransVar = TransVar<I>
ThisRunOrdNum = RONum<I>
ThisWO = WO<I>
ThisWOStepKey = WOStepKeys<I> ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
IF MultiStep > 0 THEN ThisWO = ThisWOStepKey[1,'*'] ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
*
ThickTool = field( ThisThickVar, '~', 1 )
ThickType = field( ThisThickVar, '~', 2 )
ThickRecipe = field( ThisThickVar, '~', 3 )
ThickFreq = field( ThisThickVar, '~', 4 )
ThickFirst = field( ThisThickVar, '~', 6 )
ThickLast = field( ThisThickVar, '~', 7 )
*
ResTool = field( ThisResVar, '~', 1 )
ResType = field( ThisResVar, '~', 2 )
ResRecipe = field( ThisResVar, '~', 3 )
ResFreq = field( ThisResVar, '~', 4 )
ResFirst = field( ThisResVar, '~', 6 )
ResLast = field( ThisResVar, '~', 7 )
*
ConTool = field( ThisConVar, '~', 1 )
ConType = field( ThisConVar, '~', 2 )
ConRecipe = field( ThisConVar, '~', 3 )
ConFreq = field( ThisConVar, '~', 4 )
ConFirst = field( ThisConVar, '~', 6 )
ConLast = field( ThisConVar, '~', 7 )
*
StressTool = field( ThisStressVar, '~', 1 )
StressType = field( ThisStressVar, '~', 2 )
StressRecipe = field( ThisStressVar, '~', 3 )
StressFreq = field( ThisStressVar, '~', 4 )
StressFirst = field( ThisStressVar, '~', 6 )
StressLast = field( ThisStressVar, '~', 7 )
*
TransTool = field( ThisTransVar, '~', 1 )
TransType = field( ThisTransVar, '~', 2 )
TransRecipe = field( ThisTransVar, '~', 3 )
TransFreq = field( ThisTransVar, '~', 4 )
TransFirst = field( ThisTransVar, '~', 6 )
TransLast = field( ThisTransVar, '~', 7 )
*
IF MultiStep > 0 THEN
WOBoxCnt = COUNT(XLATE('WO_STEP',ThisWOStepKey,6,'X'),@VM) ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
END ELSE
*EXTRACT_SI_KEYS( 'RDS', 'WO', ThisWO, RDSsInWO ) ;* Original Code
WOBoxCnt = FIELDCOUNT( RDSsInWO, @VM ) ;* Original Code
END
* First check thickness
PrintThickness = false$
IF ( ThisRunOrdNum = 1 ) AND ( ThickFirst ) THEN PrintThickness = true$
IF ( ThisRunOrdNum = WOBoxCnt ) AND ( ThickLast ) THEN PrintThickness = true$
IF ThickFreq THEN
* Need to check run order and see if it needs to be printed
IF ThickFreq = 1 THEN
PrintThickness = true$
END ELSE
* Generate @FM delim of runs that should print
RoPrintFlag = str( @FM, WOBoxCnt-1 )
FOR J = 1 TO WOBoxCnt step ThickFreq
RoPrintFlag<J> = 1
NEXT J
IF ( RoPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintThickness = true$
END
END
IF PrintThickness THEN
PSNRec = XLATE( 'PROD_SPEC', PSNIds<I>, '', 'X' )
SpecSub = PSNRec<prod_spec_spec_substrate$>
TOrient = SpecSub<1,QSSubOrientation$>
convert '<' TO '' in TOrient
convert '>' TO '' in TOrient
Orient = TOrient
ThickPrintVar<I> = ThickTool:'~':ThickType:'~':Orient:'~':ThickRecipe
END ELSE
ThickPrintVar<I> = ''
END
* Now check resistivity
PrintResistivity = false$
IF ( ThisRunOrdNum = 1 ) and ( ResFirst ) THEN PrintResistivity = true$
IF ( ThisRunOrdNum = WOBoxCnt ) and ( ResLast ) THEN PrintResistivity = true$
IF ResFreq THEN
* NEED TO CHECK RUN ORDER AND SEE IF IT NEEDS TO BE PRINTED
IF ResFreq = 1 THEN
PrintResistivity = true$
END ELSE
* Generate @FM delim of runs that should print
RoPrintFlag = str( @FM, WOBoxCnt-1 )
FOR J = 1 TO WOBoxCnt step ResFreq
RoPrintFlag<J> = 1
NEXT J
IF ( RoPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintResistivity = true$
END
END
IF PrintResistivity THEN
PSNRec = XLATE( 'PROD_SPEC', PSNIds<I>, '', 'X' )
SpecSub = PSNRec<prod_spec_spec_substrate$>
TOrient = SpecSub<1,QSSubOrientation$>
convert '<' TO '' in TOrient
convert '>' TO '' in TOrient
Orient = TOrient
ResPrintVar<I> = ResTool:'~':ResType:'~':Orient:'~':ResRecipe
END ELSE
ResPrintVar<I> = ''
END
PrintSRP = false$
SRPType = ''
IF SRPFlag<I> THEN
* We know that SRP is one of the tools
IF PrintThickness THEN
IF ThickTool = 'SRP' THEN
PrintSRP = true$
SRPType = ThickType
END
END
IF PrintResistivity THEN
IF ResTool = 'SRP' THEN
PrintSRP = true$
SRPType = ResType
END
END
IF NOT(PrintSRP) THEN
* Now need to check concentration
IF ConTool = 'SRP' THEN
IF ( ThisRunOrdNum = 1 ) and ( ConFirst ) THEN PrintSRP = true$
IF ( ThisRunOrdNum = WOBoxCnt ) and ( ConLast ) THEN PrintSRP = true$
IF ConFreq THEN
* Need to check run order and see if it needs to be printed
IF ConFreq = 1 THEN
PrintSRP = true$
END ELSE
* Generate fm delim of runs that should print
RoPrintFlag = str( @FM, WOBoxCnt-1 )
FOR J = 1 TO WOBoxCnt step ConFreq
RoPrintFlag<J> = 1
NEXT J
IF ( RoPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintSRP = true$
END
END
END
IF PrintSRP THEN SRPType = ConType
END
IF NOT(PrintSRP) THEN
* Now need to check stress
IF StressTool = 'SRP' THEN
IF ( ThisRunOrdNum = 1 ) AND ( StressFirst ) THEN PrintSRP = true$
IF ( ThisRunOrdNum = WOBoxCnt ) AND ( StressLast ) THEN PrintSRP = true$
IF StressFreq THEN
* Need to check run order and see if it needs to be printed
IF StressFreq = 1 THEN
PrintSRP = true$
END ELSE
* Generate @FM delim of runs that should print
RoPrintFlag = str( @FM, WOBoxCnt-1 )
FOR J = 1 TO WOBoxCnt step StressFreq
RoPrintFlag<J> = 1
NEXT J
IF ( RoPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintSRP = true$
END
END
END
IF PrintSRP THEN SRPType = StressType
END
IF NOT(PrintSRP) THEN
* Now need to check transition
IF TransTool = 'SRP' THEN
IF ( ThisRunOrdNum = 1 ) AND ( TransFirst ) THEN PrintSRP = true$
IF ( ThisRunOrdNum = WOBoxCnt ) AND ( TransLast ) THEN PrintSRP = true$
IF TransFreq THEN
* Need to check run order and see if it needs to be printed
IF TransFreq = 1 THEN
PrintSRP = true$
END ELSE
* Generate fm delim of runs that should print
RoPrintFlag = str( @FM, WOBoxCnt-1 )
FOR J = 1 TO WOBoxCnt step TransFreq
RoPrintFlag<J> = 1
NEXT J
IF ( ROPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintSRP = true$
END
IF PrintSRP THEN SRPType = TransType
END
END
END
IF PrintSRP THEN
SRPPrintVar<I> = true$
SRPTypePrintVar<I> = SRPType
END ELSE
SRPPrintVar<I> = false$
SRPTypePrintVar<I> = ''
END
END ELSE
SRPPrintVar<I> = false$
SRPTypePrintVar<I> = ''
END
NEXT I
* Got all data now we can print
FOR I = 1 TO IdCnt
PrintCustName = CustName<I>
IF MultiStep > 0 THEN
WONo = WO<I>:'.':MultiStep ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
WONo = WOStepKeys<I>
CONVERT '*' TO '.' IN WONo
END ELSE
WoNo = WO<I>
END
PrintWO = WoNo ;* 5/21/2005 - JCH - Changed for Order Entry/Vision upgrade
PrintPSNNo = PSNIds<I> ;* 6/10/2005 - JCH - Added per manufacturing manager request
PrintLotNum = LotNum<I>
PrintRecipeInfo = RecipeInfo<I>
PrintSpecType = SpecType<I>
PrintRONum = RONum<I>
PrintRdsId = RdsIds<I>
PrintThickPrintVar = ThickPrintVar<I>
PrintResPrintVar = ResPrintVar<I>
PrintMultiLayVar = MultiLayVar<I>
PrintSRPPrintVar = SRPPrintVar<I>
PrintSRPTypePrintVar = SRPTypePrintVar<I>
PrintQty = Qtys<I>
ThickCnt = FIELDCOUNT( ThickTarget<I>, @VM )
PrintThickTargets = ''
FOR J = 1 TO ThickCnt
PrintThickTargets<1,J> = ThickTarget<i,j>:ThickUnit<i,j>
NEXT J
ResCnt = FIELDCOUNT( ResTarget<I>, @VM )
PrintResTargets = ''
FOR J = 1 TO ResCnt
IF ResTarget<I,J>[1,1] = '.' THEN
TargetVal = '0':ResTarget<I,J>
END ELSE
TargetVal = ResTarget<I,J>
END
PrintResTargets<1,J> = TargetVal:ResUnit<I,J>
NEXT J
PrintPO = PO<I>
PrintPartNum = PartNum<I>:' ':CustPNDescs<I>
PrintSubPartNum = SubPartNum<I>
SuppCd = SubPartNum<I>[-1,'B-']
IF LEN(SuppCd) NE '2' THEN SuppCd =''
PrintSuppCd = SuppCd
PrintDopant = Dopant<I>
PrintShipBagReq = ShipBagReq<I>
PrintReqShipDate = ReqShipDate<I>
PrintSubOxide = SubOxide<I>
PrintSubPreClean = SubPreClean<I>
PrintSubPostClean = SubPostClean<I>
PrintPreAkrionRecipe = PreAkrionRecipe<I>
PrintPostAkrionRecipe = PostAkrionRecipe<I>
APreRec = ''
APostRec = ''
IF ( PreAkrionRecipe<I> <> '' ) THEN
APreRec = ' ':PreAkrionRecipe<I>:' '
SubOxide<I> = 'No' ;* IF AKRION THEN NO OXIDE STRIP
END
IF ( PostAkrionRecipe<I> <> '' ) THEN
APostRec = ' ':PostAkrionRecipe<I>
END
*PrintCleaningReqs = TRIM( 'Strip:':SubOxide<I>:' Pre:':SubPreClean<I>:APreRec:' Post:':SubPostClean<I>:APostRec )
PrintCleaningReqs = TRIM( 'Strip:':SubOxide<I>:' Pre:':SubPreClean<I>:APreRec:' Post:':SubPostClean<I>:APostRec )
swap '~' with fmt( ' ', 'L#2' ) in PrintThickPrintVar
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 '~' with fmt( ' ', 'L#2' ) in PrintResPrintVar
swap 'æm' with 'um' in PrintResTargets
swap 'ê-cm' with 'ohm.cm' in PrintResTargets
swap 'ê/Ü' with 'ohm/sq' in PrintResTargets
swap '' with 'A' in PrintResTargets
GOSUB PrintLabel
NEXT I
RETURN
* * * * * * *
PrintLabel:
* * * * * * *
MakeupBox = XLATE('RDS',PrintRdsId,RDS_MAKEUP_BOX$,'X')
Str = '^XA'
Str := '^LH0,0'
Str := '^PR2' ;* Print speed 2 inches per second
Str := '^LL406' ;* 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 := '^FO15,15^GB795,398,3,B^FS'
* SRP Box and info in Upper Right Corner of label
IF PrintSRPPrintVar THEN
Str:= '^FO738,15^GB72,60,3,B^FS'
Str:= '^FO755,25^A0,25^FDSRP^FS'
IF LEN( PrintSRPTypePrintVar ) > 2 THEN
Str:= '^FO750,50^A0,,25^FD':PrintSRPTypePrintVar:'^FS':CRLF$
END ELSE
Str:= '^FO740,50^A0,,25^FD':PrintSRPTypePrintVar:'^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':PrintWO:'^FS':CRLF$ ;* Data
IF PrintRONum = 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':PrintRONum:'^FS':CRLF$ ;* Data
END ELSE
Str := '^FO560,25^AC,18^FDRun:^FS':CRLF$ ;* Label
Str := '^FO615,25^A045,36^FD':PrintRONum:'^FS':CRLF$ ;* Data
END
****** Second Line
Str:= '^FO30,70^AC,18^FDRDS:^FS':CRLF$
Str:= '^FO90,70^A050,30^FD':PrintRDSId:'^FS':CRLF$
Str := '^BY2,2.0':CRLF$
Str := '^FO200,70^B3,,23,N^FD':PrintRDSId:'^FS':CRLF$
Str := '^BY2,3.0':CRLF$
Str:= '^FO450,70^AC,18^FDQty:^FS':CRLF$ ;* Label
Str:= '^FO510,70^A045,25^FD':PrintQty:'^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':PrintReqShipDate:'^FS':CRLF$ ;* Data
Str:= '^FO250,105^AC,18^FDCust:^FS':CRLF$ ;* Label
Str:= '^FO320,105^A045,25^FD':PrintCustName:'^FS':CRLF$ ;* Data
Str:= '^FO560,105^AC,18^FDPO:^FS':CRLF$
Str:= '^FO600,105^A045,25^FD':PrintPO:'^FS':CRLF$
****** Separator bar
Str:= '^FO15,128^GB795,1^FS'
****** Fourth Line
Str := '^FO30,135^AC,18^FDLot No:^FS':CRLF$
Str := '^FO120,135^A0,20^FD':PrintLotNum:'^FS':CRLF$
Str := '^FO410,135^AC,18^FDPart No:^FS':CRLF$
Str := '^FO510,135^A0,20^FD':PrintPartNum:'^FS':CRLF$
****** Fifth Line
Str := '^FO30,160^AC,18^FDSub PN:^FS':CRLF$
Str := '^FO120,160^A0,20^FD':PrintSubPartNum:'^FS':CRLF$
IF PrintSuppCd NE '' THEN
Str := '^FO410,160^AC,18^FDSupp Cd:^FS':CRLF$ ;* Label ;* Added 8/17/2005 JCH - J.C.Henry & Co.
Str := '^FO510,160^A0,20^FD':PrintSuppCd:'^FS':CRLF$ ;* Data
Str := '^BY2,2.0':CRLF$
Str := '^FO610,160^A040,20^B3,,23,N^FD':PrintSuppCd:'^FS':CRLF$
Str := '^BY2,3.0':CRLF$
END
****** Separator bar
Str := '^FO15,183^GB795,1^FS'
****** Sixth Line
Str := '^FO30,190^AC,18^FDStrip Oxide:^FS':CRLF$
Str := '^FO180,190^A0,20^FD':PrintSubOxide:'^FS':CRLF$
****** Seventh Line
Str := '^FO30,210^AC,18^FDPre:^FS':CRLF$
Str := '^FO90,210^A0,20^FD':PrintSubPreClean:'^FS':CRLF$
IF PrintPreAkrionRecipe NE '' THEN
Str := '^FO210,210^AC,18^FDAkrion:^FS':CRLF$
Str := '^FO300,210^A0,20^FD':PrintPreAkrionRecipe:'^FS':CRLF$
Str := '^BY2,2.0':CRLF$
Str := '^FO450,210^A040,20^B3,,23,N^FD':PrintPreAkrionRecipe:'^FS':CRLF$
Str := '^BY2,3.0':CRLF$
END
****** Eighth Line
Str := '^FO30,235^AC,18^FDRecipe:^FS':CRLF$
Str := '^FO120,235^A0,20^FD':PrintRecipeInfo:'^FS':CRLF$
Str := '^FO410,235^AC,18^FDEpi Dopant:^FS':CRLF$
Str := '^FO560,235^A040,20^FD':PrintDopant:'^FS':CRLF$
****** Ninth Line
Str := '^FO30,260^A040,20^FD':PrintThickPrintVar:'^FS':CRLF$
Str := '^FO410,260^A040,20^FD':PrintResPrintVar:'^FS':CRLF$
****** Tenth, Eleventh and Twelfth Lines
Str := '^FO30,285^AC,18^FDThk Spec:^FS':CRLF$
FOR M = 1 TO COUNT(PrintThickTargets,@VM) + (PrintThickTargets NE '')
BaseLine = 285 + (M-1)*20
Str := '^FO140,':BaseLine:'^A040,20^FD':PrintThickTargets<1,M>:'^FS':CRLF$
NEXT M
Str := '^FO410,285^AC,18^FDRes Spec:^FS':CRLF$
FOR M = 1 TO COUNT(PrintResTargets,@VM) + (PrintResTargets NE '')
BaseLine = 285 + (M-1)*20
Str := '^FO520,':BaseLine:'^A040,20^FD':PrintResTargets<1,M>:'^FS':CRLF$
NEXT M
****** The Line with No Name
IF PrintPostAkrionRecipe NE '' THEN
Str := '^FO30,350^AC,18^FDPost:^FS':CRLF$
Str := '^FO90,350^A0,20^FD':PrintSubPostClean:'^FS':CRLF$
Str := '^FO210,350^AC,18^FDAkrion:^FS':CRLF$
Str := '^FO300,350^A0,20^FD':PrintPostAkrionRecipe:'^FS':CRLF$
Str := '^BY2,2.0':CRLF$
Str := '^FO450,350^A040,20^B3,,23,N^FD':PrintPostAkrionRecipe:'^FS':CRLF$
Str := '^BY2,3.0':CRLF$
END ELSE
Str := '^FO30,350^AC,18^FDPost:^FS':CRLF$
Str := '^FO120,350^A0,20^FD':PrintSubPostClean:'^FS':CRLF$
END
****** Separator bar
Str := '^FO15,373^GB795,1^FS'
****** Fourteenth Line
Str := '^FO30,385^AC,18^FDProd Spec No:^FS':CRLF$ ;* Label
Str := '^FO190,385^A0,25^FD':PrintPSNNo:'^FS':CRLF$ ;* Data
IF PrintSpecType = 'Production' THEN PrintSpecType = 'Prod'
IF PrintSpecType = 'Pre-Production' THEN PrintSpecType = 'Pre'
Str := '^FO275,385^AC,18^FDSpec Type:^FS':CRLF$ ;* Label
Str := '^FO400,385^A0,25^FD':PrintSpecType:'^FS':CRLF$ ;* Data
Str:= '^FO480,385^AC,18^FDBag:^FS':CRLF$
Str:= '^FO530,385^A0,20^FD':PrintShipBagReq:'^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(RdsIds,@VM) + (RdsIds NE '')
ShelfCnt = INT(RDSCnt/28) + (MOD(RDSCnt,28) NE 0) ;* Come back TO this later JCH 7/27/2005
NewUniqueWOs = ''
UWOCnt = fieldcount( UniqueWOs, @VM )
FOR I = 1 TO UWOCnt
NewUniqueWOs<1,-1> = UniqueWOs<1,I>:@VM:UniqueWOs<1,I>
NEXT I
TRANSFER NewUniqueWOs TO UniqueWOs
UWOCnt += UWOCnt
* So we print two sets of labels
FOR I = 1 TO UWOCnt step 2
PrintUniqueWO = UniqueWOs<1,i>
GOSUB PrintWO
PrintUniqueWO = UniqueWOs<1,i+1>
GOSUB PrintWO
NEXT I
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,05^A0220,210^FD':PrintUniqueWO:'^FS':CRLF$ ;* 5/21/2005 - JCH - Changed for Order Entry/Vision upgrade
END ELSE
Str:= '^FO70,05^A0220,210^FD':PrintUniqueWO:'^FS':CRLF$
END
* GET CUST ABBREV
CustNo = XLATE( 'WO_LOG', PrintUniqueWO[1,'.'], wo_log_cust_no$, 'X' )
CustAbbrevOrName = XLATE( 'COMPANY', CustNo, 'ABBREV_OR_CO_NAME', 'X' )
Str:= '^FO30,185^A110,70^FD':CustAbbrevOrName:'^FS':CRLF$
Str:= '^FO150,255^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