home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / print / 2upprt / 2up.cmd < prev    next >
Encoding:
Text File  |  1993-03-20  |  7.3 KB  |  303 lines

  1. /* V2.3 - Print 2UP on Laser printer in Landscape Mode */
  2. mode=1  /* Change to: 1-for PPDS, 2-for HP, 3-for PostScript */
  3. vrexx=0 /* Change to: 1 to enable VREXX support */
  4. Arg file opt opt1 .
  5. If vrexx Then Call VREXXSET
  6. ft=1
  7. AGAIN:
  8. mg.1='      '
  9. bopt=0
  10. If file=''|file='?' Then Signal TELL
  11. opt=Translate(opt)
  12. opt1=Translate(opt1)
  13. If opt1='B' Then Signal BADOPT
  14. If opt='B' Then Do
  15.  bopt=1
  16.  opt=opt1
  17. End
  18. If opt\=''&opt\='N'&opt\='A'&opt\='F'&opt\='H' Then Signal BADOPT
  19. If opt='A'&mode=3 Then Signal BADOPT
  20. If mode=1 Then Do
  21.  q=X2C(1B5B4B0300063101)
  22.  prn='LPT1:'  /* Printer    */
  23.  If bopt Then Do
  24.   cpl=59      /* Char/Line  */
  25.   lpp=120     /* Lines/Page */
  26.   qq=X2C(1B6C1B3A1B41061B301B5B53080000003B0000143BF6)
  27.  End
  28.  Else Do
  29.   cpl=87      /* Char/Line  */
  30.   lpp=184     /* Lines/Page */
  31.   qq=X2C(1B6C0F1B41061B321B5B53080000003B0000143BF6)
  32.  End
  33. End
  34. If mode=2 Then Do
  35.  q=X2C(1B45)
  36.  prn='LPT2:'  /* Printer    */
  37.  If bopt Then Do
  38.   cpl=49      /* Char/Line  */
  39.   lpp=118     /* Lines/Page */
  40.   qq=X2C(1B451B266C314F1B266C31451B287330541B283130551B28733130481B266C3844)
  41.  End
  42.  Else Do
  43.   cpl=84      /* Char/Line  */
  44.   lpp=118     /* Lines/Page */
  45.   qq=X2C(1B451B266C314F1B266C31451B287330541B283130551B287331362E36481B266C3844)
  46.  End
  47. End
  48. If mode=3 Then Do
  49.  prn='LPT3:'  /* Printer    */
  50.  If bopt Then cpl=86
  51.  Else cpl=110 /* Char/Line  */
  52. End
  53. If opt=''|opt='N' Then Do
  54.  hll=(cpl*2)+8
  55.  ql=copies('═',cpl+2)
  56.  tl='╔'||ql||'╗╔'||ql||'╗'
  57.  bl='╚'||ql||'╝╚'||ql||'╝'
  58. End
  59. If (opt='A'|opt='H'|opt='F')&mode\=3 Then Do
  60.  cpl=cpl+2
  61.  lpp=lpp+2
  62.  If (opt='A'|opt='H') Then lpp=lpp+4
  63.  hll=(cpl*2)+3
  64.  tl=copies('═',hll)
  65. End
  66. x=1
  67. no=1
  68. pg=0
  69. sw=0
  70. swl=0
  71. np=D2C(12)
  72. tab=D2C(9)
  73. If mode\=3 Then lphp=lpp/2
  74. If mode=3 Then Call SETUP
  75. Else Do
  76.  Call charout prn,qq
  77.  Call HDR
  78. End
  79. Do Forever
  80.  If lines(file)<1 Then Signal FIN
  81.  ln=linein(file)
  82.  If opt='A'&mode\=3 Then Do
  83.   lns=substr(ln,1,1)
  84.   ln=substr(ln,2,cpl)
  85.  End
  86.  If substr(ln,1,1)=np Then ln=substr(ln,2)
  87.  ln=translate(ln,' ',np)
  88.  ln=translate(ln,' ',tab)
  89.  If ln=''&swl=1 Then sw=1
  90.  If sw=0|opt='A' Then Do
  91.   If opt='N' Then ln=right(no,3)||' '||ln
  92.   If length(ln)<=cpl Then Do
  93.    l.x=ln
  94.    Call CPG
  95.   End
  96.   Else Do
  97.    If length(ln)<=(cpl*2) Then Do
  98.     l.x=substr(ln,1,cpl)
  99.     Call CPG
  100.     x=x+1
  101.     If opt='N' Then l.x='    '||substr(ln,cpl+1,cpl-4)
  102.     Else l.x=substr(ln,cpl+1,cpl)
  103.     Call CPG
  104.    End
  105.    Else Do
  106.     l.x=substr(ln,1,cpl)
  107.     Call CPG
  108.     x=x+1
  109.     If opt='N' Then l.x='    '||substr(ln,cpl+1,cpl-4)
  110.     Else l.x=substr(ln,cpl+1,cpl)
  111.     Call CPG
  112.     x=x+1
  113.     If opt='N' Then l.x='    '||substr(ln,(2*cpl)-3,cpl-4)
  114.     Else l.x=substr(ln,(2*cpl)+1,cpl)
  115.     Call CPG
  116.    End
  117.   End
  118.   x=x+1
  119.   swl=0
  120.   no=no+1
  121.  End
  122.  If ln='' Then swl=1
  123.  sw=0
  124. End
  125. FIN:
  126. If mode=3 Then Call Out 'lastp'
  127. Else Do
  128.  Call PPG
  129.  Call charout prn,q
  130. End
  131. Call stream file,'C','close'
  132. If vrexx Then Call Vexit
  133. Exit
  134. CPG:
  135. If mode=3 Then Do
  136.  lp=''
  137.  Do i=1 to length(l.x)
  138.   If substr(l.x,i,1)='(' Then lp=lp||'\'
  139.   If substr(l.x,i,1)=')' Then lp=lp||'\'
  140.   lp=lp||substr(l.x,i,1)
  141.   If substr(l.x,i,1)='\' Then lp=lp||'\'
  142.  End
  143.  lp='('||lp||') show lf'
  144.  Call Out lp
  145.  Return
  146. End
  147. If opt='A'&(lns='0'|lns='-'|lns='1') Then Do
  148.  sv=l.x
  149.  l.x=' '
  150.  Call CPG1
  151.  If lns='1' Then Do
  152.   If x<=lphp Then x=lphp+1
  153.   Else Do
  154.    x=lpp
  155.    k=1
  156.   End
  157.  End
  158.  If lns\='1' Then x=x+1
  159.  If lns='-' Then Do
  160.   l.x=' '
  161.   Call CPG1
  162.   x=x+1
  163.  End
  164.  l.x=sv
  165. End
  166. Call CPG1
  167. Return
  168. CPG1:
  169. l.x=left(l.x,cpl,' ')
  170. If x=lpp Then Do
  171.  If k=1 Then Do
  172.   sv=l.x
  173.   l.x=' '
  174.  End
  175.  Call PPG
  176.  Call HDR
  177.  If k=1 Then Do
  178.   k=0
  179.   x=1
  180.   l.x=sv
  181.  End
  182.  Else x=0
  183. End
  184. Return
  185. PPG:
  186. Do z=1 To lphp
  187.  w=z+lphp
  188.  xz=l.z||' ║║ '||l.w
  189.  If opt='' Then xz='║ '||xz||' ║'
  190.  Call Out xz
  191. End
  192. If opt='' Then Call Out bl
  193. Return
  194. HDR:
  195. pg=pg+1
  196. If opt\='A' Then Do
  197.  dl=copies(' ',hll)
  198.  hl=strip(right(date('U'),hll),'t')
  199.  hl=overlay(hl,dl)
  200.  hl=overlay(file,hl)
  201.  If opt='' Then hl=overlay('Page       'pg,hl,cpl-2)
  202.  Else hl=overlay('Page       'pg,hl,cpl-3)
  203. End
  204. If opt='A'&ft=0 Then Call charout prn,np
  205. ft=0
  206. If opt\='H'&opt\='A' Then Do
  207.  Call Out hl
  208.  Call Out tl
  209. End
  210. Do z=1 To lpp
  211.  l.z=copies(' ',cpl)
  212. End
  213. Return
  214. OUT:
  215. Parse Arg ot
  216. Call lineout prn,ot
  217. Return
  218. SETUP:
  219. nf=''
  220. Do i=1 to length(file)
  221.  nf=nf||substr(file,i,1)
  222.  If substr(file,i,1)='\' Then nf=nf||'\'
  223. End
  224. nd=date('U')
  225. nd=strip(nd)
  226. Call Out 'save /pgn 1 def'
  227. Call Out '/lands { 90 rotate 0 -612 translate } bind def'
  228. Call Out '/F { findfont exch scalefont setfont } bind def'
  229. Call Out '/incp { /pgn pgn 1 add def } bind def'
  230. If bopt then Call Out '/lspace { 8 } bind def'
  231. Else Call Out '/lspace { 6 } bind def'
  232. Call Out '/tm { 572 } bind def /bm { 15 } bind def'
  233. Call Out '/lf { currentpoint exch pop lspace sub dup bm lt { pop lm 502 lt { /lm'
  234. Call Out ' { 502 } def tm } { showpage saveobj restore incp opg /saveobj save def'
  235. Call Out ' /lm { 26 } def tm } ifelse } if lm exch moveto } bind def'
  236. Call Out '/lbox { newpath setgray setlinewidth 22 580 moveto'
  237. Call Out ' 22 15 lineto 494 15 lineto 494 580 lineto closepath stroke } def'
  238. Call Out '/rbox { newpath setgray setlinewidth 498 580 moveto'
  239. Call Out ' 498 15 lineto 970 15 lineto 970 580 lineto closepath stroke } def'
  240. Call Out '/llin { newpath setgray setlinewidth 22 580 moveto'
  241. Call Out ' 970 580 lineto stroke } def'
  242. Call Out '/lastp { currentpoint tm 5 sub gt { 60 gt { showpage }'
  243. Call Out ' if } { pop showpage } ifelse saveobj restore restore } def'
  244. Call Out '/opg { 1 setgray clippath fill 1 setlinejoin'
  245. If opt\='H' Then Do
  246.  If opt='F' Then Call Out ' 2 0 llin 0 setgray 9 /Helvetica-Bold F'
  247.  Else Call Out ' 2 0 lbox 2 0 rbox 0 setgray 9 /Helvetica-Bold F'
  248.  Call Out ' 22 585 moveto ('||nf||') show 935 585 moveto'
  249.  Call Out ' ('||nd||') show 460 585 moveto (Page) show 515 585 moveto'
  250.  Call Out ' /pgstr 4 string def pgn pgstr cvs show'
  251. End
  252. If bopt Then Call Out ' 0 setgray 9 /Courier-Bold F } bind def lands .8 1 scale'
  253. Else Call Out ' 0 setgray 7 /Courier-Bold F } bind def lands .8 1 scale'
  254. Call Out ' 75 45 { dup mul exch dup mul add 1.0 exch sub } setscreen opg /saveobj save def'
  255. Call Out '/lm { 26 } def lm tm moveto'
  256. Return
  257. BADOPT:
  258. If vrexx Then Signal BADOPT1
  259. Say 'Bad option field!'
  260. TELL:
  261. If vrexx Then Signal TELL1
  262. Say 'Format: 2UP filespec <B> <N>'
  263. Say '                         <A>'
  264. Say '                         <F>'
  265. Say '                         <H>'
  266. Say '        B - Bigger print'
  267. Say '        N - Number lines'
  268. Say '        A - ANSI controls'
  269. Say "        F - don't Frame page"
  270. Say '        H - no frame/Headers'
  271. Exit
  272. VREXXSET:
  273. Call rxfuncadd 'VInit','VREXX','VINIT'
  274. ini=Vinit()
  275. If ini='ERROR' Then Signal FIN1
  276. Signal On Halt name FIN1
  277. Signal On Error name FIN1
  278. Signal On Syntax name FIN1
  279. Signal On Failure name FIN1
  280. Return
  281. BADOPT1:
  282. mg.1='Bad option field!'
  283. TELL1:
  284. Call vdialogpos 50,40
  285. mg.0=10
  286. If mg.1='' Then mg.1='You MUST enter a filespec!  '
  287. mg.2='Format: 2UP filespec <B> <N>    '
  288. mg.3='                             <A>   '
  289. mg.4='                             <F>   '
  290. mg.5='                             <H>   '
  291. mg.6='              B - Bigger print  '
  292. mg.7='              N - Number lines  '
  293. mg.8='              A - ANSI controls  '
  294. mg.9="              F - don't Frame page  "
  295. mg.10='              H - no frame/Headers   '
  296. rb=vinputbox('2UP ERROR',mg,35,3)
  297. If rb='OK' Then Do
  298.  Parse var mg.vstring file opt opt1 .
  299.  Signal AGAIN
  300. End
  301. FIN1:
  302. Call Vexit
  303.