home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 2: PC / frozenfish_august_1995.bin / bbs / d09xx / d0925.lha / DonsGenies / DonsGenies.lha / Don'sGenies / PrintPScollated3.pprx < prev    next >
Text File  |  1993-05-25  |  7KB  |  252 lines

  1. /* This genie will print out several copies of a document in collated order. Temporary files need quite a lot of RAM. If you are short of RAM, change all the references to "ram:" to "PPage:" to put these files on disk instead. 
  2. ⌐ Don Cox March 93. Not Public Domain. All rights reserved. 
  3. */
  4.  
  5. signal on error
  6. signal on syntax
  7. address command
  8. call SafeEndEdit.rexx()
  9. call ppm_AutoUpdate(0)
  10. cr="0a"x
  11.  
  12. oldoutput = ppm_GetPSOutput()
  13. dest="ser"
  14. if oldoutput = "par:" then dest = "par"
  15. last = ppm_DocLastPage()
  16. first = ppm_DocFirstPage()
  17. cpage = ppm_CurrentPage()
  18. totalpages = ppm_NumPages()
  19. if totalpages = 0 then exit_msg("No pages")
  20.  
  21. /* Set up a text file in ram: and later send it to a temporary command window */
  22. conwindow = "CON:40/40/500/200/NewWindow"
  23. call open out, "ram:temp", write  /* This wipes out any existing ram:temp  */
  24. call writeln out, "delete ram:temp.ps"
  25. call writeln out, "delete ram:prolog.ps" 
  26. call writeln out, "delete ram:black.ps" 
  27. call writeln out, "delete ram:odd.ps" 
  28. call writeln out, "delete ram:even.ps" 
  29. call writeln out, "delete ram:fonts.used"
  30. call writeln out, "delete ram:trailer.ps" 
  31. call writeln out, "endcli" 
  32. call close out
  33.  
  34.  
  35. form = "From:"first'0a'x"To:"last'0a'x"Number of copies:"2||'0a'x"Split Odd/Even?(Y/N) :N"||'0a'x"Destination :"dest
  36. form = ppm_GetForm("Enter Range Of Pages", 28, form)
  37. if form = '' then call exit_msg("Aborted by User")
  38. parse var form frompage '0a'x topage '0a'x numcopies '0a'x OddEven '0a'x destination
  39.  
  40. if destination= "ram:temp.ps" then exit_msg("Invalid Destination: ram:temp.ps")
  41. if destination = "" then destination = "ser:"
  42. if upper(destination) = "SER" then destination = "ser:"
  43. if upper(destination) = "PAR" then destination = "par:"
  44.  
  45. if ~(datatype(frompage, n) & datatype(topage, n) & datatype(numcopies, n)) then exit_msg('Invalid Input')
  46.  
  47. if frompage < first | frompage > last | topage < first | topage > last then exit_msg('Invalid Input for Page Range')
  48.  
  49. OddEven = pos("Y",upper(OddEven)) /* zero if no split */
  50.  
  51. call ppm_SetPSFontDownload(0)
  52. call ppm_SetPSPrintMode(1) /* Black & white only */
  53.  
  54. call ppm_SetPSOutput("ram:temp.ps")
  55. success = ppm_PrintDocPS(1,1)
  56. trace n
  57. if success ~=1 then exit_msg("Failed saving temporary Postscript file.")
  58.  
  59. call ppm_ShowStatus(" Printing...")
  60.  
  61. call open("all","ram:temp.ps","read")
  62. call open("prolog", "ram:prolog.ps", "write")  /* This wipes out any existing ram:temp1.ps  */
  63. call open("fonts", "ram:fonts.used", "write")
  64. call open("black", "ram:black.ps", "write")
  65. call open("odd", "ram:odd.ps", "write")
  66. call open("even", "ram:even.ps", "write")
  67. call open("trailer", "ram:trailer.ps", "write")
  68.  
  69. prologtext = ""
  70. instring = ""
  71. do until eof("all")
  72.     instring = readln("all")
  73.     if word(instring,1) = "%%DocumentFonts:" then do /* make a list of fonts */
  74.         prologtext = prologtext||instring
  75.         fileposition = seek("all",0,"C")
  76.         do until eof("all")
  77.             instring = readln("all")
  78.             if instring = "" then break
  79.             call writeln("fonts",word(instring,2))
  80.             end
  81.         call seek("all",fileposition,"B")
  82.         
  83.         end
  84.  
  85.     prologtext = prologtext||instring||"0a"x
  86.     if instring = "%%EndProlog" then break
  87.     end
  88.  
  89. call writech("prolog",prologtext)
  90. prologtext = ""  /* clear RAM */
  91. call close("prolog")
  92. call close("fonts")
  93. do until eof("all")
  94.     instring = readln("all")
  95.     instring = instring||"0a"x
  96.     if word(instring,1)= "%%BeginProcessColor:" then break
  97.     end
  98.  
  99. blacktext = instring
  100. do until eof("all")
  101.     instring = readln("all")
  102.     if word(instring,1)= "%%Page:" then break
  103.     blacktext = blacktext||instring||"0a"x
  104.     end
  105. call writech("black",blacktext)
  106. call close("black")
  107.  
  108. trace n
  109. oe="odd"
  110.  
  111. if OddEven = 0 then do /* odd/even pages not split */
  112.     do until eof("all")
  113.         if word(instring,1) = "%%Page:" & word(instring,2) >= frompage then break
  114.         instring = readln("all")
  115.         end
  116.  
  117.     pagetext = instring
  118.     do until eof("all")
  119.         instring = readln("all")
  120.         if instring = "%%EndProcessColor" then break
  121.         if word(instring,1) = "%%Page:" & word(instring,2) >= topage+1 then break
  122.         pagetext = pagetext||instring||"0a"x
  123.         if length(pagetext)>30000 then do
  124.             call writech("odd",pagetext)
  125.             pagetext = ""
  126.             end
  127.         end
  128.     call writech("odd",pagetext)
  129.     pagetext = ""
  130.     call close("odd")
  131.  
  132.     end  /* odd/even pages not split */
  133.  
  134.  
  135. else do /* odd/even pages split */
  136.     do until eof("all")
  137.         if word(instring,1)= "%%Page:" then do
  138.             outpage = word(instring,2)
  139.             oe="odd"
  140.             if outpage//2 = 0 then oe="even"
  141.             end
  142.         if word(instring,1) = "%%Page:" & outpage >= frompage then break
  143.         instring = readln("all")
  144.         end
  145.  
  146.     if oe = "even" then do
  147.         Epagetext = "%%Page: "frompage" "frompage
  148.         Opagetext = ""
  149.         end
  150.     else do
  151.         Opagetext = "%%Page: "frompage" "frompage
  152.         Epagetext = ""
  153.         end
  154.  
  155.     do until eof("all")
  156.         instring = readln("all")
  157.         if instring = "%%EndProcessColor" then break
  158.         if word(instring,1)= "%%Page:" then do
  159.             outpage = word(instring,2)
  160.             oe="odd"
  161.             if outpage//2 = 0 then oe="even"
  162.             end
  163.         if word(instring,1) = "%%Page:" & outpage >= topage+1 then break
  164.         if oe = "even" then do
  165.             Epagetext = Epagetext||instring||"0a"x
  166.             if length(Epagetext)>30000 then do
  167.                 call writech("odd",Epagetext)
  168.                 Epagetext = ""
  169.                 end
  170.             end
  171.         else do
  172.             Opagetext = Opagetext||instring||"0a"x
  173.             if length(Opagetext)>30000 then do
  174.                 call writech("odd",Opagetext)
  175.                 Opagetext = ""
  176.                 end 
  177.             end
  178.         end
  179.     call writech("odd",Opagetext)
  180.     Opagetext = ""
  181.     call close("odd")
  182.     call writech("even",Epagetext)  
  183.     Epagetext = ""
  184.     call close("even")
  185.  
  186.     end /* odd/even pages split */
  187.  
  188.  
  189. if instring~="%%EndProcessColor" then do until eof("all")
  190.     instring = readln("all")
  191.     if instring = "%%EndProcessColor" then break
  192.     end
  193.  
  194. trailertext = instring
  195. do until eof("all")
  196.     instring = readln("all")
  197.     trailertext = trailertext||instring||"0a"x
  198.     end
  199. call writech("trailer",trailertext)
  200. call close("trailer")
  201. call close("all")
  202.  
  203. trace n
  204.  
  205. call open("fonts", "ram:fonts.used", "read")
  206. fontstring = ""
  207. do until eof("fonts")
  208.     nextfont = readln("fonts")
  209.     nextfont = "cgfonts:ps/"nextfont".psfont"
  210.     if exists(nextfont) then fontstring = fontstring||" "nextfont
  211.     end
  212. call close("fonts")
  213.  
  214. oddstring = " "
  215. do i = 1 to numcopies
  216.     oddstring = oddstring||" ram:odd.ps"
  217.     end
  218. if OddEven~=0 then do
  219.     do i = 1 to numcopies
  220.         oddstring = oddstring||" ram:even.ps"
  221.         end
  222.     end
  223.  
  224. "join ram:prolog.ps "fontstring" ram:black.ps"oddstring" ram:trailer.ps as "destination
  225.  
  226. "newcli" conwindow "ram:temp" /* open a CLI and use ram:temp as a set of commands to delete temporary files */
  227.  
  228. call ppm_SetPSOutput(oldoutput)
  229. call exit_msg("Done")
  230.  
  231. end
  232.  
  233. error:
  234. syntax:
  235.     do
  236.     exit_msg("Genie failed due to error: "errortext(rc))
  237.     end
  238.  
  239. exit_msg:
  240.     do
  241.     parse arg message
  242.     if message ~= "" then
  243.     call ppm_Inform(1,message,"Resume")
  244.     call ppm_ClearStatus()
  245.     call ppm_PPageToFront()
  246.     call ppm_AutoUpdate(1)
  247.     exit
  248.     end
  249.  
  250.  
  251.  
  252.