compile function PRINT_CLEANROOM_LABELS_THERMAL( RdsIds , MultiStep ) begin condition pre: post: end condition $insert logical $insert msg_equates $insert rds_equ $insert rds_layer_info_equ $insert oiprint_equates $insert prod_spec_equ $insert quote_spec_equ $insert wo_log_equ declare function fieldcount, msg, key_sort, get_printer, set_printer, entid, choose_zebra_port declare function repository, print_wo_labels, utility,obj_Install declare subroutine extract_si_keys declare function Printer_Select,Set_Printer, Direct_Print, Environment_Services * * * * * * * added 9/10/2003 - J.C. Henry, changed printdriver to generic * eliminated port capture to print, changed printing OI Print Interface 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(RdsIds)) THEN RdsIds = '' ;* 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 RdsIds = '' THEN RETURN 0 ;* 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 = 0.1 PageInfo = 0.1 PageInfo = 0.1 PageInfo = 0.1 PageSetup = '1' ;* Landscape PrintSetup = '' ;* Preview *PrinterID = '\\FMSA001\PMSAZBR1' ;* This is the Zebra 105se PrinterID = '\\FMSA001\PMSAZBR5' ;* This is the Zebra 105se 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 if RdsIds then Void = utility( 'CURSOR', 'H' ) IdCnt = fieldcount( RdsIds, @fm ) * sort by run order number if IdCnt > 1 then RdsIds = key_sort( RdsIds, 'RDS', 'WO':@fm:'RUN_ORDER_NUM', 1, '', '' ) end 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 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 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' ) end * * * * * * OIPrint_Error: * * * * * * If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then stat = Set_Printer("TERM") end else stat = Direct_Print('STOP') end return 0 *===========================================================================* 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' ) LotNum = xlate( 'RDS', RdsIds, rds_lot_num$, 'X' ) RecipeIDS = xlate( 'RDS', RdsIds, rds_recipe_no$, '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' ) ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade PsnCRLabelInst = XLATE( 'PROD_SPEC', PSNIds, PROD_SPEC_CR_LABEL_INST$, 'X' ) ***************** 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 = '' *convert @lower_case to @upper_case in SpecType 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 ThisResVar = ResVar ThisConVar = ConVar ThisStressVar = StressVar ThisTransVar = TransVar ThisRunOrdNum = RONum ThisWO = WO ThisWOStepKey = WOStepKeys ;* 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$ end if ( ThisRunOrdNum = WOBoxCnt ) and ( ThickLast ) then PrintThickness = true$ end 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 = 1 next j if ( RoPrintFlag = 1 ) then PrintThickness = true$ end end end if PrintThickness then PSNRec = xlate( 'PROD_SPEC', PSNIds, '', 'X' ) SpecSub = PSNRec *if ThickType <> 'Prod' then TOrient = SpecSub<1,QSSubOrientation$> convert '<' to '' in TOrient convert '>' to '' in TOrient Orient = TOrient *end else * Orient = '' *end ThickPrintVar = ThickTool:'~':ThickType:'~':Orient:'~':ThickRecipe end else ThickPrintVar = '' end * NOW CHECK RESISTIVITY PrintResistivity = false$ if ( ThisRunOrdNum = 1 ) and ( ResFirst ) then PrintResistivity = true$ end if ( ThisRunOrdNum = WOBoxCnt ) and ( ResLast ) then PrintResistivity = true$ end 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 = 1 next j if ( RoPrintFlag = 1 ) then PrintResistivity = true$ end end end if PrintResistivity then PSNRec = xlate( 'PROD_SPEC', PSNIds, '', 'X' ) SpecSub = PSNRec *if ResType <> 'Prod' then TOrient = SpecSub<1,QSSubOrientation$> convert '<' to '' in TOrient convert '>' to '' in TOrient Orient = TOrient *end else * Orient = '' *end ResPrintVar = ResTool:'~':ResType:'~':Orient:'~':ResRecipe end else ResPrintVar = '' end PrintSRP = false$ SRPType = '' if SRPFlag 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 PrintSRP then * WE ARE ALREADY PRINTING IT SO NO NEED TO CHECK OTHER METROLOGY end else * NOW NEED TO CHECK CONCENTRATION if ConTool = 'SRP' then if ( ThisRunOrdNum = 1 ) and ( ConFirst ) then PrintSRP = true$ end if ( ThisRunOrdNum = WOBoxCnt ) and ( ConLast ) then PrintSRP = true$ end 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 = 1 next j if ( RoPrintFlag = 1 ) then PrintSRP = true$ end end end end if PrintSRP then SRPType = ConType end end if PrintSRP then * WE ARE ALREADY PRINTING IT SO NO NEED TO CHECK OTHER METROLOGY end else * NOW NEED TO CHECK STRESS if StressTool = 'SRP' then if ( ThisRunOrdNum = 1 ) and ( StressFirst ) then PrintSRP = true$ end if ( ThisRunOrdNum = WOBoxCnt ) and ( StressLast ) then PrintSRP = true$ end 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 = 1 next j if ( RoPrintFlag = 1 ) then PrintSRP = true$ end end end end if PrintSRP then SRPType = StressType end end if PrintSRP then * WE ARE ALREADY PRINTING IT SO NO NEED TO CHECK OTHER METROLOGY end else * NOW NEED TO CHECK TRANSITION if TransTool = 'SRP' then if ( ThisRunOrdNum = 1 ) and ( TransFirst ) then PrintSRP = true$ end if ( ThisRunOrdNum = WOBoxCnt ) and ( TransLast ) then PrintSRP = true$ end 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 = 1 next j if ( ROPrintFlag = 1 ) then PrintSRP = true$ end end end if PrintSRP then SRPType = TransType end end end if PrintSRP then SRPPrintVar = true$ SRPTypePrintVar = SRPType end else SRPPrintVar = false$ SRPTypePrintVar = '' end end else SRPPrintVar = false$ SRPTypePrintVar = '' end next i * GOT ALL DATA NOW WE CAN PRINT NewCustName = ''; NewWO = '';NewCustName = '';NewLotNum = ''; NewCustName = '' NewRecipeInfo = ''; NewSpecType = ''; NewRONum = ''; NewRdsIds = '' NewThickPrintVar = ''; NewResPrintVar = ''; NewMultiLayVar = ''; NewSRPPrintVar = '' NewSRPTypePrintVar = ''; NewQtys = ''; NewThickTarget = '' NewResTarget = ''; NewPO = ''; NewPartNum = ''; NewDopant = '' NewShipBagReq = ''; NewReqShipDate = ''; NewCleaningReqs = '' NewPSNNo = '' for i = 1 to IdCnt NewCustName<-1> = CustName:@fm:CustName IF MultiStep > 0 THEN WONo = WO:'.':MultiStep ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade WONo = WOStepKeys CONVERT '*' TO '.' IN WONo END ELSE WoNo = WO END NewWO<-1> = WoNo:@fm:WoNo ;* 5/21/2005 - JCH - Changed for Order Entry/Vision upgrade NewPSNNo<-1> = PSNIds:@FM:PSNIds ;* 6/10/2005 - JCH - Added per manufacturing manager request NewLotNum<-1> = LotNum:@fm:LotNum NewRecipeInfo<-1> = RecipeInfo:@fm:RecipeInfo NewSpecType<-1> = SpecType:@fm:SpecType NewRONum<-1> = RONum:@fm:RONum NewRdsIds<-1> = RdsIds:@fm:RdsIds NewThickPrintVar<-1> = ThickPrintVar:@fm:ThickPrintVar NewResPrintVar<-1> = ResPrintVar:@fm:ResPrintVar NewMultiLayVar<-1> = MultiLayVar:@fm:MultiLayVar NewSRPPrintVar<-1> = SRPPrintVar:@fm:SRPPrintVar NewSRPTypePrintVar<-1> = SRpTypePrintVar:@fm:SRPTypePrintVar NewQtys<-1> = Qtys:@fm:Qtys ThickCnt = fieldcount( ThickTarget, @vm ) ThickTargetString = '' for j = 1 to ThickCnt ThickTargetString:= ThickTarget:ThickUnit:';' next j ThickTargetString[-1,1] = '' NewThickTarget<-1> = ThickTargetString:@fm:ThickTargetString ResCnt = fieldcount( ResTarget, @vm ) ResTargetString = '' for j = 1 to ResCnt ResTargetString:= ResTarget:ResUnit:';' next j ResTargetString[-1,1] = '' NewResTarget<-1> = ResTargetString:@fm:ResTargetString NewPO<-1> = PO:@fm:PO NewPartNum<-1> = PartNum:'Sub Part# ':SubPartNum:@fm:PartNum:'Sub Part# ':SubPartNum NewDopant<-1> = Dopant:@fm:Dopant NewShipBagReq<-1> = ShipBagReq:@fm:ShipBagReq NewReqShipDate<-1> = ReqShipDate:@fm:ReqShipDate APreRec = '' APostRec = '' if ( PreAkrionRecipe <> '' ) then APreRec = ' ':PreAkrionRecipe:' ' SubOxide = 'No' ;* IF AKRION THEN NO OXIDE STRIP end if ( PostAkrionRecipe <> '' ) then APostRec = ' ':PostAkrionRecipe end Tvar = trim( 'Strip:':SubOxide:' Pre:':SubPreClean:APreRec:' Post:':SubPostClean:APostRec ) Tvar := @fm:Tvar NewCleaningReqs<-1> = Tvar next i transfer NewCustName to CustName transfer NewWO to WO transfer NewPSNNo to PSNNo transfer NewLotNum to LotNum transfer NewRecipeInfo to RecipeInfo transfer NewSpecType to SpecType transfer NewRONum to RONum transfer NewRdsIds to RdsIds transfer NewThickPrintVar to ThickPrintVar transfer NewResPrintVar to ResPrintVar transfer NewMultiLayVar to MultiLayVar transfer NewSRPPrintVar to SRPPrintVar transfer NewSRPTypePrintVar to SRpTypePrintVar transfer NewQtys to Qtys transfer NewThickTarget to ThickTarget transfer NewResTarget to ResTarget transfer NewPO to PO transfer NewPartNum to PartNum transfer NewDopant to Dopant transfer NewShipBagReq to ShipBagReq transfer NewReqShipDate to ReqShipDate transfer NewCleaningReqs to CleaningReqs IdCnt += IdCnt ;* SO WE PRINT TWO SETS OF LABELS for i = 1 to IdCnt step 2 PrintThickTarget = ThickTarget PrintResTarget = ResTarget PrintCustName = CustName PrintWO = WO PrintPSNNo = PSNNo PrintPO = PO PrintDopant = Dopant PrintPartNum = PartNum PrintLotNum = LotNum PrintRecipeInfo = RecipeInfo PrintSpecType = SpecType PrintRONum = RONum PrintRdsId = RdsIds PrintThickPrintVar = ThickPrintVar PrintResPrintVar = ResPrintVar PrintMultiLayVar = MultiLayVar PrintSRPPrintVar = SRPPrintVar PrintSRPTypePrintVar = SRPTypePrintVar PrintQty = Qtys PrintShipBagReq = ShipBagReq PrintReqShipDate = ReqShipDate PrintCleaningReqs = CleaningReqs gosub PrintLabel * PrintThickTarget = ThickTarget PrintResTarget = ResTarget PrintCustName = CustName PrintWO = WO PrintPSNNo = PSNNo PrintPO = PO PrintDopant = Dopant PrintPartNum = PartNum PrintLotNum = LotNum PrintRecipeInfo = RecipeInfo PrintSpecType = SpecType PrintRONum = RONum PrintRdsId = RdsIds PrintThickPrintVar = ThickPrintVar PrintResPrintVar = ResPrintVar PrintMultiLayVar = MultiLayVar PrintSRPPrintVar = SRPPrintVar PrintSRPTypePrintVar = SRPTypePrintVar PrintQty = Qtys PrintShipBagReq = ShipBagReq PrintReqShipDate = ReqShipDate PrintCleaningReqs = CleaningReqs gosub PrintLabel next i return *===========================================================================* PrintLabel: MakeupBox = XLATE('RDS',PrintRdsId,RDS_MAKEUP_BOX$,'X') ;* I give up on this mess 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 := CRLF$ Str := '^FO15,20^GB800,318,5,B^FS':CRLF$ * SRP Box and info in Upper Right Corner of label if PrintSrpPrintVar then Str:= '^FO742,20^GB72,60,3,B^FS':CRLF$ Str:= '^FO755,30^A045,25^FDSRP^FS':CRLF$ if len( PrintSRPTypePrintVar ) > 2 then Str:= '^FO755,55^A045,25^FD':PrintSRPTypePrintVar:'^FS':CRLF$ end else Str:= '^FO765,55^A045,25^FD':PrintSRPTypePrintVar:'^FS':CRLF$ end end IF PrintRONum = 1 THEN * Box bagging reqs, rds and run order num as a flag for first box Str:= '^FO420,130^GB375,95,3,B^FS':CRLF$ Str:= '^FO700,200^A045,25^FDFirst Box^FS':CRLF$ END * First Line Str:= '^FO30,30^A050,35^FD':obj_Install('Get_Prop','Company'):'^FS':CRLF$ Str:= '^FO470,30^A050,35^FD':quote(PrintSpecType):'^FS':CRLF$ * Second Line Str:= '^FO30,65^A045,25^FDRequested Ship Date:^FS':CRLF$ ;* Label Str:= '^FO265,65^A045,25^FD':PrintReqShipDate:'^FS':CRLF$ ;* Data IF MakeupBox THEN Str := '^FO380,60^A050,35^FD* * M a k e u p B o x * *^FS':CRLF$ END * Third Line Str:= '^FO30,90^A045,25^FDWork Order No:^FS':CRLF$ ;* Label Str:= '^FO190,90^A045,25^FD':PrintWO:'^FS':CRLF$ ;* Data Str:= '^FO320,90^A045,25^FDQty:^FS':CRLF$ ;* Label Str:= '^FO370,90^A045,25^FD':PrintQty:'^FS':CRLF$ ;* Data Str:= '^FO430,90^A045,25^FDCustomer:^FS':CRLF$ ;* Label Str:= '^FO550,90^A045,25^FD':PrintCustName:'^FS':CRLF$ ;* Data * Last Line Str:= '^FO30,305^A045,25^FDProd Spec No:^FS':CRLF$ ;* Label Str:= '^FO200,305^A045,25^FD':PrintPSNNo:'^FS':CRLF$ ;* Data * Original mess from here on Str:= '^FO30,140^A040,20^FDLot No:^FS':CRLF$ Str:= '^FO30,170^A040,20^FDPurchase Order No:^FS':CRLF$ Str:= '^FO30,200^A040,20^FDPart#^FS':CRLF$ Str:= '^FO30,230^A040,20^FDRecipe:^FS':CRLF$ Str:= '^FO30,280^A040,20^FDThk Spec:^FS':CRLF$ * RIGHT COLUMNS Str:= '^FO430,140^A040,20^FDBagging:^FS':CRLF$ Str:= '^FO430,170^A040,20^FDRun No:^FS':CRLF$ Str:= '^FO430,200^A040,20^FDRDS No:^FS':CRLF$ Str:= '^FO430,230^A040,20^FDEpi Dopant:^FS':CRLF$ Str:= '^FO430,280^A040,20^FDRes Spec:^FS':CRLF$ * LEFT DATA if PrintMultiLayVar then PrintMultiLayVar = 'MULTI-LAYER VIEW-RDS' end else PrintMultiLayVar = '' end swap '~' with fmt( ' ', 'L#2' ) in PrintThickPrintVar swap 'æm' with 'um' in PrintThickTarget swap 'ê-cm' with 'ohm.cm' in PrintThickTarget swap 'ê/Ü' with 'ohm/sq' in PrintThickTarget swap '' with 'A' in PrintThickTarget Str:= '^FO30,115^A040,20^FD':PrintCleaningReqs:'^FS':CRLF$ Str:= '^FO560,115^A045,20^FD':PrintMultiLayVar:'^FS':CRLF$ Str:= '^FO98,140^A040,20^FD':PrintLotNum:'^FS':CRLF$ Str:= '^FO200,170^A040,20^FD':PrintPO:'^FS':CRLF$ Str:= '^FO80,200^A040,20^FD':PrintPartNum:'^FS':CRLF$ Str:= '^FO100,230^A040,20^FD':PrintRecipeInfo:'^FS':CRLF$ Str:= '^FO30,255^A040,20^FD':PrintThickPrintVar:'^FS':CRLF$ Str:= '^FO118,280^A040,20^FD':PrintThickTarget:'^FS':CRLF$ * RIGHT DATA swap '~' with fmt( ' ', 'L#2' ) in PrintResPrintVar swap 'æm' with 'um' in PrintResTarget swap 'ê-cm' with 'ohm.cm' in PrintResTarget swap 'ê/Ü' with 'ohm/sq' in PrintResTarget swap '' with 'A' in PrintResTarget *convert @vm to ',' in PrintShipBagReq Str:= '^FO525,140^A040,20^FD':PrintShipBagReq:'^FS':CRLF$ Str:= '^FO500,170^A040,20^FD':PrintRONum:'^FS':CRLF$ Str := '^BY2,2.0':CRLF$ Str := '^FO550,167^A040,20^B3,,23,N^FD':PrintRDSId:'^FS':CRLF$ Str := '^BY2,3.0':CRLF$ Str:= '^FO550,195^A050,30^FD':PrintRDSId:'^FS':CRLF$ Str:= '^FO530,230^A040,20^FD':PrintDopant:'^FS':CRLF$ Str:= '^FO430,255^A040,20^FD':PrintResPrintVar:'^FS':CRLF$ Str:= '^FO520,280^A040,20^FD':PrintResTarget:'^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 0 *===========================================================================* 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,30^A0220,210^FD':PrintUniqueWO:'^FS':CRLF$ ;* 5/21/2005 - JCH - Changed for Order Entry/Vision upgrade END ELSE Str:= '^FO70,30^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,210^A110,70^FD':CustAbbrevOrName:'^FS':CRLF$ Str:= '^FO150,280^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 *oswrite Str on DosPath$ ;* remove JCH *Var1 = DosPath$ ;* remove JCH *Void = Utility("COPYFILE", Var1, Var2) ;* remove JCH return *===========================================================================* PrintMonitorLabels: for i = 1 to IdCnt step 2 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:'^FS':CRLF$ Str:= '^FO30,190^A060,40^FDRDS#: ':RDSIds:'^FS':CRLF$ Str:= '^FO400,190^A060,40^FDLot#: ':LotNum:'^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 *oswrite Str on DosPath$ ;* remove JCH *Var1 = DosPath$ ;* remove JCH *Void = Utility("COPYFILE", Var1, Var2) ;* remove JCH next i return *===========================================================================* PrintSurfscanLabels: for i = 1 to IdCnt step 2 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:'^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 *oswrite Str on DosPath$ ;* remove JCH *Var1 = DosPath$ ;* remove JCH *Void = Utility("COPYFILE", Var1, Var2) ;* remove JCH next i *===========================================================================*