1. For perhaps 20 years here we have been using HP-GL/2. What follows is the UniBasic Source Code for an example program. I believe that HP-GL/2 lives in every HP laser printer, but not on most inkjets. Thus, except for development time, HP-GL/2 is free. There is plenty of HP documentation on HP-GL/2.
2. In my former Epicor.com Avante SB+ life, we bought a 3rd party tool via Epicor from Optio .com (a big forms software company in Atlanta). I found Optio to be robust... and more than respectable. Regards, --Bill *--------------------------------------------------------------------------- ------------ $OPTIONS A AM = char(254) VM = char(253) SVM = char(252) CLR = @(-1) : STR(char(0),3) equate true to 1, false to 0 gosub Set.Dimensions open 'CM' to F.CM else null open 'IM' to F.IM else null open 'JOB.ROUTE' to F.JOB.ROUTE else null open 'OP' to F.OP else null open 'PPAP' to F.PPAP else null open 'ROUTE.REMARKS' to F.RR else null open 'ROUTE.OPS' to F.RO else null open 'SHIP.TO' to F.SHIP.TO else null open 'SOD' to F.SOD else null open 'SOH' to F.SOH else null open 'VOC' to F.VOC else null open 'WOH' to F.WOH else null *--------------------------------------------------------------------------- --- EOJ = 0 gosub Clear.Variables common PORT PORT = @USERNO TEMP.COMMAND = 'TEMP.COMMAND.':PORT input SO.ID read R.WOH from F.WOH, SO.ID else null HK.PN = R.WOH<31> read R.Router from F.RR, HK.PN else null PPAP = true read R.PPAP from F.PPAP, HK.PN else PPAP = false close F.PPAP gosub EXTRACT.JOB.INFO gosub FORMAT.Part.Description call *PRINTER.SETUP.R2('Portrait') Z = 1 call *INIT.LASER.PRINTER( "GRAPHIC", "PORTRAIT", "REGULAR", "UPPER") print char(27):'%0A' print char(27):'&l1X' ;* "1X" is for the number of copies print char(27):'%0B' gosub Print.Form call *EJECT.PAGE gosub RESET.BACK printer OFF printer CLOSE execute 'STD.SP.ASSIGN' execute 'RESET.PRINTER' go The.End *--------------------------------------------------------------------------- ----- Clear.Variables: Created = '' Cust.Part = '' Cust.Rev = '' Cust.Name = '' DESC = '' D.Message = '' Page.count = 0 HK.PN = '' HK.Rev = '' Last.Date = '' Line.Hgt = '' Line.Pg = '' Line.Hgt = '' Machine = '' Message = '' Op.Desc = '' OP.Code = '' P.Message = '' Qty.Compl = '' Seq.ID = '' Seq.Note.1 = '' Seq.Note.2 = '' Seq.Note.3 = '' Total.Pages = 0 X = 1 return *--------------------------------------------------------------------------- --------- Set.Dimensions: DETAIL.AREA.HGT = 7.5 Detail.Ht = 0.6 ;* Note.Ht * 3 INDENT = 0.5 ;* Headers Message.Len = 7.8 HK.PN.Len = 1.0 HK.Rev.Len = 0.9 Cust.Name.Len = 2.5 Cust.Part.Len = 1.5 Cust.Rev.Len = 1.0 Created.Len = 1.0 SO.ID.Len = 1.0 Op.Desc.Len = 1.0 ;* Details OP.BAR.Len = 1.5 Last.Mod.Len = 1.5 Machine.Len = 0.5 Notes.Len = 5.1 Note.Ht = 0.2 Seq.Nbr.Len = 0.5 Initials.Len = 0.8 DETAIL.HEAD.EXTRA.Len.Len = 0.7 return *--------------------------------------------------------------------------- --------- Print.Form: call *HK.LOGO(0, 8.7, 1.25 ) call *TITLE.TEXT( 3.0, 9.5, 'R', 'T', '', 30, 'Router') X.Now = 5.0 Ht = 0.3 Wide = 1.5 Font = 14 call *ONE.LINE.TEXT.BOX(X.Now,10.0, Wide, Ht, 2,'Y','C','', Font, 'Sales Order') call *ONE.LINE.TEXT.BOX(X.Now, 9.7, Wide, Ht, 0,'Y','C','', Font, SO.ID) Font = 36 if PPAP = true then call *ONE.LINE.TEXT.BOX(X.Now, 9.35, Wide, Ht, 0,'N','C','', Font, "PPAP") Font = 14 X.Now += Wide call *ONE.LINE.TEXT.BOX(X.Now,10.0, Wide, Ht, 2, 'Y', 'C', '', Font, 'HK PN') call *ONE.LINE.TEXT.BOX(X.Now, 9.7, Wide, Ht, 0, 'Y', 'C', '', Font, HK.PN) Y.Now = 9.4 Ht = 0.2 Font = 8 read R.RR from F.RR, HK.PN else null R = R.RR<1> Last.Rec = count(R,VM) + 1 Last.Mod = R.RR<1,Last.Rec> Last.Mod.A = Last.Mod[1,5] Last.Mod.F = oconv(Last.Mod.A, 'D4') call *ONE.LINE.TEXT.BOX(X.Now,Y.Now, Wide, Ht, 1, 'Y', 'C', '',Font, "Rev'd ":Last.Mod.F); X.Now += HK.PN.Len *--------------------------------------------------------------------------- ------------ Print.Job.Header.Desc: Font = 12 Ht = 0.3 X.Now = 2.5 Y.Now = 9.0 call *ONE.LINE.TEXT.BOX(X.Now,Y.Now, Cust.Name.Len, Ht,1,'Y','C','',Font, 'Customer') ; X.Now += Cust.Name.Len call *ONE.LINE.TEXT.BOX(X.Now,Y.Now, Wide , Ht,1,'Y','C','',Font, 'Customer PN') ; X.Now += Wide call *ONE.LINE.TEXT.BOX(X.Now,Y.Now, Wide , Ht,1,'Y','C','',Font, 'Customer Rev') *--------------------------------------------------------------------------- ----------------------- Print.Customer.Header: Y.Now -= Ht X.Now = 2.5 call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Cust.Name.Len, Ht, 0, 'Y', 'C', '', Font,Cust.Name); X.Now += Cust.Name.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Wide , Ht, 0, 'Y', 'C', '', Font,Cust.Part); X.Now += Cust.Part.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Wide , Ht, 0, 'Y', 'C', '', Font,Cust.Rev) *--------------------------------------------------------------------------- ----------------- Print.Part.Description: Font = 14 Y.Now = Y.Now - 0.2 Ht = 0.2 Lnth = 3.3 for LL = 1 to Max.Desc.Lines Y.Now = Y.Now - .20 TEXT = DESC<LL>; X.Now = 0.5; call *ONE.LINE.TEXT.BOX(X.Now,Y.Now,Lnth,Ht,0,'N','L','',Font,TEXT) TEXT = DESC<LL+Max.Desc.Lines>; X.Now = 4.0; call *ONE.LINE.TEXT.BOX(X.Now,Y.Now,Lnth,Ht,0,'N','L','',Font,TEXT) next LL Y.Now = Y.Now + 0.2 *--------------------------------------------------------------------------- --------------------- Print.Job.Detail.Header: Font = 12 Ht = 0.4 X.Now = 0.01 Y.Now = Y.Now - 0.5 call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Seq.Nbr.Len, Ht, 1, 'Y', 'C', '', Font, 'Sequence') ; X.Now += Seq.Nbr.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Op.Desc.Len, Ht, 1, 'Y', 'L', '', Font,' Operation') ; X.Now += Op.Desc.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Machine.Len, Ht, 2, 'Y', 'L', '', Font,' Machine') ; X.Now += Machine.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Notes.Len, Ht, 1, 'Y', 'L', '', Font,' Notes') ; X.Now += Notes.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Initials.Len, Ht, 1, 'Y', 'C', '', Font, 'Sign/Date') ; X.Now += Initials.Len *--------------------------------------------------------------------------- ------------------------- Print.Job.Detail.Data: Font = 12 X.Now = 0.01 Y.Now = Y.Now - 0.4 Out.Process.Printed = false Total.Ops = 11 read R.RR from F.RR, HK.PN else null Total.Ops = count(R.RR<2>,VM) + 1 for Op = 1 to Total.Ops This.Seq = R.RR<2,Op> gosub Read.This.Seq if This.Seq < 310 then gosub Print.Line.Item if This.Seq > 349 then if Out.Process.Printed = false then gosub Print.Out.Process gosub Print.Line.Item end next Op if Out.Process.Printed = false then gosub Print.Out.Process *--------------------------------------------------------------------------- -------------------- call *ONE.LINE.TEXT.BOX(X.Now, Y.Now , Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, Message.1) call *ONE.LINE.TEXT.BOX(X.Now, Y.Now - 0.21, Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, Message.2) call *ONE.LINE.TEXT.BOX(X.Now, Y.Now - 0.42, Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, Message.3) X.Now = 4.4 call *ONE.LINE.TEXT.BOX(X.Now, Y.Now , Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, Message.4) call *ONE.LINE.TEXT.BOX(X.Now, Y.Now - 0.21, Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, Message.5) call *ONE.LINE.TEXT.BOX(X.Now, Y.Now - 0.42, Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, Message.6) return *--------------------------------------------------------------------------- --- Read.This.Seq: read R.RO from F.RO, This.Seq else null This.Op.Desc = R.RO<1> Machine<Op> = R.RR<4,Op> Seq.Note.1<Op> = R.RR<10,Op> Seq.Note.2<Op> = R.RR<11,Op> Seq.Note.3<Op> = R.RR<12,Op> Seq.ID.F = This.Seq Op.Desc.F = ' ' : This.Op.Desc Machine.F = Machine<Op> Seq.Note.1F = ' ':Seq.Note.1<Op> Seq.Note.2F = ' ':Seq.Note.2<Op> Seq.Note.3F = ' ':Seq.Note.3<Op> return *--------------------------------------------------------------------------- -------- Print.Line.Item: call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Seq.Nbr.Len, Detail.Ht, 0, 'Y', 'C', '', Font, Seq.ID.F ); X.Now += Seq.Nbr.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Op.Desc.Len, Detail.Ht, 0, 'y', 'L', '', Font, Op.Desc.F); X.Now += Op.Desc.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Machine.Len, Detail.Ht, 0, 'Y', 'C', '', Font, Machine.F); X.Now += Machine.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Notes.Len, Detail.Ht, 0, 'Y', 'C', '', Font, '') call *ONE.LINE.TEXT.BOX(X.Now, Y.Now , Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, Seq.Note.1F) ; call *ONE.LINE.TEXT.BOX(X.Now, Y.Now - 0.21, Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, Seq.Note.2F) ; call *ONE.LINE.TEXT.BOX(X.Now, Y.Now - 0.42, Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, Seq.Note.3F) ; X.Now += Notes.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Initials.Len, Detail.Ht,0,'Y','C','',Font,'' ) ; X.Now += Initials.Len X.Now = 0.01 Y.Now = Y.Now - Detail.Ht return *--------------------------------------------------------------------------- -------- Print.OP.Item: call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Seq.Nbr.Len, Note.Ht, 0, 'Y', 'C', '', Font, Seq.ID.F ); X.Now += Seq.Nbr.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Op.Desc.Len, Note.Ht, 0, 'y', 'L', '', Font, Op.Desc.F); X.Now += Op.Desc.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Machine.Len, Note.Ht, 0, 'Y', 'C', '', Font, Machine.F); X.Now += Machine.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Notes.Len, Note.Ht, 0, 'Y', 'C', '', Font, '') call *ONE.LINE.TEXT.BOX(X.Now, Y.Now , Notes.Len, Note.Ht, 0, 'N', 'L', '', Font, OP.Note.1F) X.Now += Notes.Len call *ONE.LINE.TEXT.BOX(X.Now, Y.Now, Initials.Len, Note.Ht,0,'Y','C','',Font,'' ) ; X.Now += Initials.Len X.Now = 0.01 Y.Now = Y.Now - Note.Ht return *--------------------------------------------------------------------------- --- Print.Out.Process: read R.IM from F.IM, HK.PN else R.IM = '' OP.Code.1 = R.IM<71,1> OP.Code.2 = R.IM<71,2> OP.Code.3 = R.IM<71,3> OP.Code.A1 = field(OP.Code.1, '.', 1) ; OP.Code.A11 = OP.Code.A1[1,1] OP.Code.A2 = field(OP.Code.1, '.', 2) ; OP.Code.A21 = OP.Code.A2[1,1] OP.Code.A3 = field(OP.Code.1, '.', 3) ; OP.Code.A31 = OP.Code.A3[1,1] OP.Code.A4 = field(OP.Code.1, '.', 4) ; OP.Code.A41 = OP.Code.A4[1,1] OP.Code.A5 = field(OP.Code.1, '.', 5) ; OP.Code.A51 = OP.Code.A5[1,1] OP.Code.B1 = field(OP.Code.2, '.', 1) ; OP.Code.B11 = OP.Code.B1[1,1] OP.Code.B2 = field(OP.Code.2, '.', 2) ; OP.Code.B21 = OP.Code.B2[1,1] OP.Code.B3 = field(OP.Code.2, '.', 3) ; OP.Code.B31 = OP.Code.B3[1,1] OP.Code.B4 = field(OP.Code.2, '.', 4) ; OP.Code.B41 = OP.Code.B4[1,1] OP.Code.B5 = field(OP.Code.2, '.', 5) ; OP.Code.B51 = OP.Code.B5[1,1] OP.Code.C1 = field(OP.Code.3, '.', 1) ; OP.Code.C11 = OP.Code.C1[1,1] OP.Code.C2 = field(OP.Code.3, '.', 2) ; OP.Code.C21 = OP.Code.C2[1,1] OP.Code.C3 = field(OP.Code.3, '.', 3) ; OP.Code.C31 = OP.Code.C3[1,1] OP.Code.C4 = field(OP.Code.3, '.', 4) ; OP.Code.C41 = OP.Code.C4[1,1] OP.Code.C5 = field(OP.Code.3, '.', 5) ; OP.Code.C51 = OP.Code.C5[1,1] read R.OP.A1 from F.OP, OP.Code.A1 else null OP.Desc.A1 = R.OP.A1<2> read R.OP.A2 from F.OP, OP.Code.A2 else null OP.Desc.A2 = R.OP.A2<2> read R.OP.A3 from F.OP, OP.Code.A3 else null OP.Desc.A3 = R.OP.A3<2> read R.OP.A4 from F.OP, OP.Code.A4 else null OP.Desc.A4 = R.OP.A4<2> read R.OP.A5 from F.OP, OP.Code.A5 else null OP.Desc.A5 = R.OP.A5<2> read R.OP.B1 from F.OP, OP.Code.B1 else null OP.Desc.B1 = R.OP.B1<2> read R.OP.B2 from F.OP, OP.Code.B2 else null OP.Desc.B2 = R.OP.B2<2> read R.OP.B3 from F.OP, OP.Code.B3 else null OP.Desc.B3 = R.OP.B3<2> read R.OP.B4 from F.OP, OP.Code.B4 else null OP.Desc.B4 = R.OP.B4<2> read R.OP.B5 from F.OP, OP.Code.B5 else null OP.Desc.B5 = R.OP.B5<2> read R.OP.C1 from F.OP, OP.Code.C1 else null OP.Desc.C1 = R.OP.C1<2> read R.OP.C2 from F.OP, OP.Code.C2 else null OP.Desc.C2 = R.OP.C2<2> read R.OP.C3 from F.OP, OP.Code.C3 else null OP.Desc.C3 = R.OP.C3<2> read R.OP.C4 from F.OP, OP.Code.C4 else null OP.Desc.C4 = R.OP.C4<2> read R.OP.C5 from F.OP, OP.Code.C5 else null OP.Desc.C5 = R.OP.C5<2> OP.Desc.A1 = ' ' : OP.Desc.A1 OP.Desc.A2 = ' ' : OP.Desc.A2 OP.Desc.A3 = ' ' : OP.Desc.A3 OP.Desc.A4 = ' ' : OP.Desc.A4 OP.Desc.A5 = ' ' : OP.Desc.A5 OP.Desc.B1 = ' ' : OP.Desc.B1 OP.Desc.B2 = ' ' : OP.Desc.B2 OP.Desc.B3 = ' ' : OP.Desc.B3 OP.Desc.B4 = ' ' : OP.Desc.B4 OP.Desc.B5 = ' ' : OP.Desc.B5 OP.Desc.C1 = ' ' : OP.Desc.C1 OP.Desc.C2 = ' ' : OP.Desc.C2 OP.Desc.C3 = ' ' : OP.Desc.C3 OP.Desc.C4 = ' ' : OP.Desc.C4 OP.Desc.C5 = ' ' : OP.Desc.C5 OP.Spec.A1 = R.IM<72,1> OP.Spec.A2 = R.IM<96,1> OP.Spec.A3 = R.IM<96,2> OP.Spec.A4 = R.IM<96,3> OP.Spec.A5 = R.IM<96,4> OP.Spec.B1 = R.IM<72,2> OP.Spec.B2 = R.IM<97,1> OP.Spec.B3 = R.IM<97,2> OP.Spec.B4 = R.IM<97,3> OP.Spec.B5 = R.IM<97,4> OP.Spec.C1 = R.IM<72,3> OP.Spec.C2 = R.IM<98,1> OP.Spec.C3 = R.IM<98,2> OP.Spec.C4 = R.IM<98,3> OP.Spec.C5 = R.IM<98,4> *--------------------------------------------------------------------------- --- begin case case OP.Code.A11 = ' ' ; OP.Code.A1X = '' case OP.Code.A11 = '' ; OP.Code.A1X = '' case 1 ; OP.Code.A1X = OP.Code.A1 end case begin case case OP.Code.A21 = ' ' ; OP.Code.A2X = '' case OP.Code.A21 = '' ; OP.Code.A2X = '' case 1 ; OP.Code.A2X = OP.Code.A2 end case begin case case OP.Code.A31 = ' ' ; OP.Code.A3X = '' case OP.Code.A31 = '' ; OP.Code.A3X = '' case 1 ; OP.Code.A3X = OP.Code.A3 end case begin case case OP.Code.A41 = ' ' ; OP.Code.A4X = '' case OP.Code.A41 = '' ; OP.Code.A4X = '' case 1 ; OP.Code.A4X = OP.Code.A4 end case begin case case OP.Code.A51 = ' ' ; OP.Code.A5X = '' case OP.Code.A51 = '' ; OP.Code.A5X = '' case 1 ; OP.Code.A5X = OP.Code.A5 end case *--- begin case case OP.Code.B11 = ' ' ; OP.Code.B1X = '' case OP.Code.B11 = '' ; OP.Code.B1X = '' case 1 ; OP.Code.B1X = OP.Code.B1 end case begin case case OP.Code.B21 = ' ' ; OP.Code.B2X = '' case OP.Code.B21 = '' ; OP.Code.B2X = '' case 1 ; OP.Code.B2X = OP.Code.A2 end case begin case case OP.Code.B31 = ' ' ; OP.Code.B3X = '' case OP.Code.B31 = '' ; OP.Code.B3X = '' case 1 ; OP.Code.B3X = OP.Code.A3 end case begin case case OP.Code.B41 = ' ' ; OP.Code.B4X = '' case OP.Code.B41 = '' ; OP.Code.B4X = '' case 1 ; OP.Code.B4X = OP.Code.A4 end case begin case case OP.Code.B51 = ' ' ; OP.Code.B5X = '' case OP.Code.B51 = '' ; OP.Code.B5X = '' case 1 ; OP.Code.B5X = OP.Code.A5 end case *--- begin case case OP.Code.C11 = ' ' ; OP.Code.C1X = '' case OP.Code.C11 = '' ; OP.Code.C1X = '' case 1 ; OP.Code.C1X = OP.Code.C1 end case begin case case OP.Code.C21 = ' ' ; OP.Code.C2X = '' case OP.Code.C21 = '' ; OP.Code.C2X = '' case 1 ; OP.Code.C2X = OP.Code.C2 end case begin case case OP.Code.C31 = ' ' ; OP.Code.C3X = '' case OP.Code.C31 = '' ; OP.Code.C3X = '' case 1 ; OP.Code.C3X = OP.Code.C3 end case begin case case OP.Code.C41 = ' ' ; OP.Code.C4X = '' case OP.Code.C41 = '' ; OP.Code.C4X = '' case 1 ; OP.Code.C4X = OP.Code.C4 end case begin case case OP.Code.C51 = ' ' ; OP.Code.C5X = '' case OP.Code.C51 = '' ; OP.Code.C5X = '' case 1 ; OP.Code.C5X = OP.Code.C5 end case *--------------------------------------------------------------------------- --- begin case case len(OP.Spec.A1) <= 1 ; OP.Spec.A1X = '' case 1 ; OP.Spec.A1X = OP.Spec.A1 end case begin case case len(OP.Spec.A2) <= 1 ; OP.Spec.A2X = '' case 1 ; OP.Spec.A2X = OP.Spec.A2 end case begin case case len(OP.Spec.A3) <= 1 ; OP.Spec.A3X = '' case 1 ; OP.Spec.A3X = OP.Spec.A3 end case begin case case len(OP.Spec.A4) <= 1 ; OP.Spec.A4X = '' case 1 ; OP.Spec.A4X = OP.Spec.A4 end case begin case case len(OP.Spec.A5) <= 1 ; OP.Spec.A5X = '' case 1 ; OP.Spec.A5X = OP.Spec.A5 end case *--- begin case case len(OP.Spec.B1) <= 1 ; OP.Spec.B1X = '' case 1 ; OP.Spec.B1X = OP.Spec.B1 end case begin case case len(OP.Spec.B2) <= 1 ; OP.Spec.B2X = '' case 1 ; OP.Spec.B2X = OP.Spec.B2 end case begin case case len(OP.Spec.B3) <= 1 ; OP.Spec.B3X = '' case 1 ; OP.Spec.B3X = OP.Spec.B3 end case begin case case len(OP.Spec.B4) <= 1 ; OP.Spec.B4X = '' case 1 ; OP.Spec.B4X = OP.Spec.B4 end case begin case case len(OP.Spec.B5) <= 1 ; OP.Spec.B5X = '' case 1 ; OP.Spec.B5X = OP.Spec.B5 end case *--- begin case case len(OP.Spec.C1) <= 1 ; OP.Spec.C1X = '' case 1 ; OP.Spec.C1X = OP.Spec.C1 end case begin case case len(OP.Spec.C2) <= 1 ; OP.Spec.C2X = '' case 1 ; OP.Spec.C2X = OP.Spec.C2 end case begin case case len(OP.Spec.C3) <= 1 ; OP.Spec.C3X = '' case 1 ; OP.Spec.C3X = OP.Spec.C3 end case begin case case len(OP.Spec.C4) <= 1 ; OP.Spec.C4X = '' case 1 ; OP.Spec.C4X = OP.Spec.C4 end case begin case case len(OP.Spec.C5) <= 1 ; OP.Spec.C5X = '' case 1 ; OP.Spec.C5X = OP.Spec.C5 end case *--- OP.Code.1F = ' (' : OP.Code.1 : ')' OP.Code.2F = ' (' : OP.Code.2 : ')' OP.Code.3F = ' (' : OP.Code.3 : ')' OP.Note.1F = '' read R.OP from F.OP, OP.Code.1 else Nbr.OPs = 0 OP.Desc.1 = R.OP<2> read R.OP from F.OP, OP.Code.2 else Nbr.OPs = 1 OP.Desc.2 = R.OP<2> read R.OP from F.OP, OP.Code.3 else Nbr.OPs = 2 OP.Desc.3 = R.OP<2> A2x = 0 ; B2x = 0 ; C2x = 0 A3x = 0 ; B3x = 0 ; C3x = 0 A4x = 0 ; B4x = 0 ; C4x = 0 A5x = 0 ; B5x = 0 ; C5x = 0 if ((OP.Code.A2X # '') or (OP.Spec.A2X # '')) then A2x = 1 if ((OP.Code.A3X # '') or (OP.Spec.A3X # '')) then A3x = 1 if ((OP.Code.A4X # '') or (OP.Spec.A4X # '')) then A4x = 1 if ((OP.Code.A5X # '') or (OP.Spec.A5X # '')) then A5x = 1 if ((OP.Code.B2X # '') or (OP.Spec.B2X # '')) then B2x = 1 if ((OP.Code.B3X # '') or (OP.Spec.B3X # '')) then B3x = 1 if ((OP.Code.B4X # '') or (OP.Spec.B4X # '')) then B4x = 1 if ((OP.Code.B5X # '') or (OP.Spec.B5X # '')) then B5x = 1 if ((OP.Code.C2X # '') or (OP.Spec.C2X # '')) then C2x = 1 if ((OP.Code.C3X # '') or (OP.Spec.C3X # '')) then C3x = 1 if ((OP.Code.C4X # '') or (OP.Spec.C4X # '')) then C4x = 1 if ((OP.Code.C5X # '') or (OP.Spec.C5X # '')) then C5x = 1 if OP.Code.1 # '' then Seq.ID.F = 310 ; Op.Desc.F = ' Outside' ; OP.Note.1F = OP.Desc.A1 : '...' : OP.Spec.A1X ; gosub Print.OP.Item if A2x then Seq.ID.F = '' ; Op.Desc.F = ' Process' ; OP.Note.1F = OP.Desc.A2 : '...' : OP.Spec.A2X ; gosub Print.OP.Item if A3x then Seq.ID.F = '' ; Op.Desc.F = '' ; OP.Note.1F = OP.Desc.A3 : '...' : OP.Spec.A3X ; gosub Print.OP.Item if A4x then Seq.ID.F = '' ; Op.Desc.F = '' ; OP.Note.1F = OP.Desc.A4 : '...' : OP.Spec.A4X ; gosub Print.OP.Item if A5x then Seq.ID.F = '' ; Op.Desc.F = '' ; OP.Note.1F = OP.Desc.A5 : '...' : OP.Spec.A5X ; gosub Print.OP.Item if OP.Code.1 # '' then Seq.ID.F = 319 ; Op.Desc.F = ' Inspect OP' ; OP.Note.1F = ' Inspect Outside Process 310 @ HK' ; gosub Print.OP.Item end if OP.Code.2 # '' then Seq.ID.F = 320 ; Op.Desc.F = ' Outside' ; OP.Note.1F = OP.Desc.B1 : '...' : OP.Spec.B1X ; gosub Print.OP.Item if B2x then Seq.ID.F = '' ; Op.Desc.F = ' Process' ; OP.Note.1F = OP.Desc.B2 : '...' : OP.Spec.B2X ; gosub Print.OP.Item if B3x then Seq.ID.F = '' ; Op.Desc.F = '' ; OP.Note.1F = OP.Desc.B3 : '...' : OP.Spec.B3X ; gosub Print.OP.Item if B4x then Seq.ID.F = '' ; Op.Desc.F = '' ; OP.Note.1F = OP.Desc.B4 : '...' : OP.Spec.B4X ; gosub Print.OP.Item if B5x then Seq.ID.F = '' ; Op.Desc.F = '' ; OP.Note.1F = OP.Desc.B5 : '...' : OP.Spec.B5X ; gosub Print.OP.Item if OP.Code.2 # '' then Seq.ID.F = 329 ; Op.Desc.F = ' Inspect OP' ; OP.Note.1F = ' Inspect Outside Process 320 @ HK' ; gosub Print.OP.Item end if OP.Code.3 # '' then Seq.ID.F = 330 ; Op.Desc.F = ' Outside' ; OP.Note.1F = OP.Desc.C1 : '...' : OP.Spec.C1X ; gosub Print.OP.Item if C2x then Seq.ID.F = '' ; Op.Desc.F = ' Process' ; OP.Note.1F = OP.Desc.C2 : '...' : OP.Spec.C2X ; gosub Print.OP.Item if C3x then Seq.ID.F = '' ; Op.Desc.F = '' ; OP.Note.1F = OP.Desc.C3 : '...' : OP.Spec.C3X ; gosub Print.OP.Item if C4x then Seq.ID.F = '' ; Op.Desc.F = '' ; OP.Note.1F = OP.Desc.C4 : '...' : OP.Spec.C4X ; gosub Print.OP.Item if C5x then Seq.ID.F = '' ; Op.Desc.F = '' ; OP.Note.1F = OP.Desc.C5 : '...' : OP.Spec.C5X ; gosub Print.OP.Item if OP.Code.3 # '' then Seq.ID.F = 339 ; Op.Desc.F = ' Inspect OP' ; OP.Note.1F = ' Inspect Outside Process 330 @ HK' ; gosub Print.OP.Item end *---------- Out.Process.Printed = true gosub Read.This.Seq return *--------------------------------------------------------------------------- -------- RESET.BACK: print char(27):"%0A" print char(27):"E" return *--------------------------------------------------------------------------- ---------- EXTRACT.JOB.INFO: read R.SOH from F.SOH, SO.ID else R.SOH = '' read R.SOD from F.SOD, SO.ID:'*1' else R.SOD = '' read R.CM from F.CM, R.SOH<1> else R.CM = '' read R.WOH from F.WOH, SO.ID else R.WOH = '' HK.PN = R.SOD<16> Cust.Part = R.SOD<15> Cust.Rev = R.SOD<38> Cust.Name = R.CM<1,1> Message.1 = R.WOH<35,1> Message.2 = R.WOH<35,2> Message.3 = R.WOH<35,3> Message.4 = R.WOH<35,4> Message.5 = R.WOH<35,5> Message.6 = R.WOH<35,6> return *--------------------------------------------------------------------------- ------------ FORMAT.Part.Description: Max.Desc.Lines = count(R.SOD<14>,VM) + 1 DESC = '' for LL = 1 to Max.Desc.Lines DESC<-1> = R.SOD<14,LL> next LL Max.Desc.Lines = count(R.SOD<63>,VM) + 1 if R.SOD<63> = '' then Max.Desc.Lines = 0 for LL = 1 to Max.Desc.Lines DESC<-1> = R.SOD<63,LL> next LL Max.Desc.Lines = count(DESC,AM) + 1 for LL = Max.Desc.Lines to 1 STEP -1 if DESC<LL> = '' then DESC = DELETE(DESC,LL,0,0) next LL Max.Desc.Lines = INT(Max.Desc.Lines/2) + 1 return *--------------------------------------------------------------------------- --- The.End: crt @(-1) END -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of James F Thompson Sent: Thursday, January 03, 2008 6:43 PM To: u2-users@listserver.u2ug.org Subject: [U2] Graphic Printing Does anyone have a suggestion for doing graphical printing from Windows and Aix? I need to be able to embed dynamic images (i.e. Division logo, Shipping label), along with form data. We are using Universe. James F Thompson Senior System Analyst Cypress Business Solutions 678.494.9353 x1410 [EMAIL PROTECTED] www.cypressesolutions.com <http://www.cypressesolutions.com/> ------- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/ ------- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/